Frequently asked questions
Node is emitting incomplete transfers or losing frames
Possible causes are listed below. Also refer to the first tutorial for more info on troubleshooting.
Memory pool is too small
This may prevent the node from allocating enough memory for the TX queue. Try to increase the pool, and make sure that it is not getting exhausted.
Node is not spinning regularly
This may cause the frames scheduled for transmission to time out before even reaching the CAN driver. Make sure that the spin method is being invoked regularly.
CAN frames lose arbitration
This could happen if the bus is too congested with higher-priority traffic. Try to increase either or both:
- Transmission timeout.
- Transfer priority (if appropriate).
Both are explained in the relevant tutorials.
Build is failing because of missing header files
This issue typically manifests itself with a message like that:
libuavcan/include/uavcan/time.hpp:12:32: fatal error: uavcan/Timestamp.hpp: No such file or directory
This could be caused by failing DSDL compilation - see below.
DSDL compiler is failing
Make sure you have Python installed.
Inspect the build logs for error messages from the DSDL compiler. They should be descriptive enough to help you understand the nature of the problem.
If you’re facing the following error message:
File "dsdl_compiler/libuavcan_dsdlc", line 59, in <module> from libuavcan_dsdl_compiler import run as dsdlc_run File "/home/XXXXX/libuavcan/libuavcan/dsdl_compiler/libuavcan_dsdl_compiler/__init__.py", line 17, in <module> from dronecan import dsdl ImportError: No module named dronecan
Make sure that all git submodules are checked out and updated - use
git submodule update --init --recursive --force.
SocketCAN does not work reliably with an SLCAN adapter
slcand may be losing outgoing frames because TX queue is not large enough.
TX queue of an interface can be resized as follows:
ifconfig slcan0 txqueuelen 1000
The example above makes TX queue of
slcan0 1000 frames deep.