01942b89 add TODO b74a456a don't hardcode the lists ed5a4bf5 add face stds 396a2bb5 add can error counter to controlsState c6b5c73b Switch default to msgq (#21) a457ffa0 Fix indentation in readme.md a1fc8c75 explicitly mention Python for syntax colouring (#20) 19e23931 Fix expected for cameraOdometry and liveCalibration e7d2f978 Add radar comm issue error db64cd43 Reserve safety #21 for VAG PQ35/PQ46/NMS (#19) 79d638d5 separate honda safety models between Bosch Giraffe and Bosch Nidec 2614a650 better name b6b84cda add longitudinal 78f5934a Add canRxErrs to health 67588993 qlog liveCalibration df80b870 add more stuff to fw log in CarParams a87805ad fix doxs 4746b208 got doxed 21cf3f55 build on mac 31ac47c2 Add carUnrecognized event git-subtree-dir: cereal git-subtree-split: 01942b890d7acf19aecc09432fe5048ba21c0fc9pull/37/head
parent
e3b21173a5
commit
9504037aa7
11 changed files with 122 additions and 40 deletions
@ -0,0 +1,42 @@ |
||||
What is cereal? |
||||
---- |
||||
|
||||
cereal is both a messaging spec for robotics systems as well as generic high performance IPC pub sub messaging with a single publisher and multiple subscribers. |
||||
|
||||
Imagine this use case: |
||||
* A sensor process reads gyro measurements directly from an IMU and publishes a sensorEvents packet |
||||
* A calibration process subscribes to the sensorEvents packet to use the IMU |
||||
* A localization process subscribes to the sensorEvents packet to use the IMU also |
||||
|
||||
|
||||
Messaging Spec |
||||
---- |
||||
|
||||
You'll find the message types in [log.capnp](log.capnp). It uses [Cap'n proto](https://capnproto.org/capnp-tool.html) and defines one struct called Event. |
||||
|
||||
All Events have a logMonoTime and a valid. Then a big union defines the packet type. |
||||
|
||||
|
||||
Pub Sub Backends |
||||
---- |
||||
|
||||
cereal supports two backends, one based on [zmq](https://zeromq.org/), the other called msgq, a custom pub sub based on shared memory that doesn't require the bytes to pass through the kernel. |
||||
|
||||
Example |
||||
--- |
||||
```python |
||||
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() |
||||
dat.init('sensorEvents', 1) |
||||
dat.sensorEvents[0] = {"gyro": {"v": [0.1, -0.1, 0.1]}} |
||||
pm.send('sensorEvents', dat) |
||||
``` |
Loading…
Reference in new issue