* tinygrad with snpe * force with snpe to validate * fix path * fix more paths * Adjust modeld execution logic based on active model runner Introduced a check to conditionally execute `modeld` based on the active model runner. Added support for distinguishing between SNPE and TinyGrad runners using new helper functions and updated `custom.capnp` definitions. This change optimizes process management by ensuring compatibility with the selected model runner. * Refactor modeld process function checks. Introduce `is_stock_model` to clarify logic and replace direct uses of `is_snpe_model` where the stock model condition is needed. Additionally, rename the duplicate "modeld" process in sunnyPilot to "modeld_snpe" for clarity and consistency. * ignore tg * fix process name * ruff * fix thneed paths * mypy * remove our own * use upstream compile3 * fix thneed * try this * Revert "remove our own" This reverts commit1cf4f57502. * try using compile2.py again * add back symlink * fix path * more fix * wrong path again * Revert "wrong path again" This reverts commitf5301c19d5. * update * hardcode path to our submodule * force path * try this * fix file name * try this * again * Revert "again" This reverts commit17c8cd7376. * Revert "try this" This reverts commit767f78bbcf. * Revert "fix file name" This reverts commit485eef68da. * Revert "try this" This reverts commit41fef87680. * Revert "force path" This reverts commit5c3b408937. * Revert "hardcode path to our submodule" This reverts commit5ee1950b6f. * Revert "update" This reverts commitfb313bd7fb. * Reapply "wrong path again" This reverts commit309639aeb3. * Revert "wrong path again" This reverts commitf5301c19d5. * Revert "more fix" This reverts commit23dd423e78. * Revert "fix path" This reverts commit75d338f2bd. * Revert "add back symlink" This reverts commit9f71ad0b8a. * Revert "try using compile2.py again" This reverts commit914117d2e1. * Reapply "remove our own" This reverts commitb1996377b3. * don't even compile anymore * need it for default snpe model * add to lfs * bring onnx back for sim * must add this back * need this --------- Co-authored-by: DevTekVE <devtekve@gmail.com>
What is cereal?
cereal is the messaging system for openpilot. It uses msgq as a pub/sub backend, and Cap'n proto for serialization of the structs.
Messaging Spec
You'll find the message types in log.capnp. It uses Cap'n proto and defines one struct called Event.
All Events have a logMonoTime and a valid. Then a big union defines the packet type.
Best Practices
- All fields must describe quantities in SI units, unless otherwise specified in the field name.
- In the context of the message they are in, field names should be completely unambiguous.
- All values should be easy to plot and be human-readable with minimal parsing.
Maintaining backwards-compatibility
When making changes to the messaging spec you want to maintain backwards-compatibility, such that old logs can be parsed with a new version of cereal. Adding structs and adding members to structs is generally safe, most other things are not. Read more details here.
Custom forks
Forks of openpilot might want to add things to the messaging spec, however this could conflict with future changes made in mainline cereal/openpilot. Rebasing against mainline openpilot then means breaking backwards-compatibility with all old logs of your fork. So we added reserved events in custom.capnp that we will leave empty in mainline cereal/openpilot. If you only modify those, you can ensure your fork will remain backwards-compatible with all versions of mainline openpilot and your fork.
Example
import cereal.messaging as messaging
# in subscriber
sm = messaging.SubMaster(['sensorEvents'])
while 1:
sm.update()
print(sm['sensorEvents'])
# in publisher
pm = messaging.PubMaster(['sensorEvents'])
dat = messaging.new_message('sensorEvents', size=1)
dat.sensorEvents[0] = {"gyro": {"v": [0.1, -0.1, 0.1]}}
pm.send('sensorEvents', dat)