I’m developing a real-time control system on Jetson Orin Nano, with a main loop running every 1ms.
The system uses a single CAN bus running at 1Mbps, communicating with sensors and motors as follows:
*** Sensors**
2 Loadcells (Left & Right) → Each sends 1 CAN packet every 1ms → Total: 2 packets/ms
2 IMUs (Left & Right) → Each sends 3 packets every 10ms (quaternion, gyroscope, accelerometer) → Total: 6 packets every 10ms → ~0.6 packets/ms average
*** Actuators**
2 Motors (Left & Right) → Jetson sends 1 control command per motor every 1ms → 2 packets/ms
*** Estimated Load**
Total ≈ 4.6 packets per ms, at 1 Mbps CAN speed → approx. 60–65% bus utilization
This seems to push the CAN bus close to saturation.
*** In an ideal setup:**
A Loadcell packet sent at 4ms is received by Jetson before 5ms, and used in the 5ms control loop.
Would you hit the delay issue if you connect only one CAN device? Is there any error in dmesg at this moment?
I haven’t checked that yet, but I will verify and share the results.
Also, based on theoretical calculations, I understand that if CAN bus utilization exceeds 80%, communication may fail. I’m wondering if it’s expected behavior for CAN packets to be delayed as CAN bus utilization increases.
It seems the expected result since they are from the same CAN interface.
The CAN bus uses the CSMA/CA (Carrier Sense Multiple Access with Collision Avoidance) protocol for communication. When multiple nodes attempt to transmit data simultaneously, the bus arbitrates based on message priority (determined by the CAN ID). Lower-priority messages must wait for higher-priority messages to finish transmitting, leading to increased arbitration delays as bus utilization rises.
Please check if your delay issue is caused from multiple CAN devices on your CAN bus.