We are currently designing a mobile robot + mounted arm with multiple controlled degrees of freedom and sensors.
I am considering an architecture in two parts:
A set of realtime controllers (either Raspeberry Pis running an RTOS such as Xenomai or bare metal microcontrollers) to control the arm motors and encoders. Let us call these machines RTx, with x=1,2,3… depending on the number of microcontrollers. This control loop will run at 200Hz.
A powerful vanilla linux machine running ROS to compute SLAM, mocap, and execute high-level logic (decide the robot’s task and compute the motors' desired position and speed). This control loop will run at 30Hz.
I know my framework needs to be scalable to account for more motors, more sensors, more PCs (eg. for external mocap).
My main problem is to decide how to have the different RTx communicate with PC1. I have looked at papers related to robots architecture (e.g. HRP2), most often they describe the high level control architecture but I have yet to find information on how to have the low level communicate with the high level and in a scalable way. Did I miss something?
In order to connect the fast RT machines ensuring the motor control with PC1, I have considered TCP/IP, CAN and UART:
- TCP/IP: not deterministic but easy to put in place. Is non determinism a real issue (as it will only be used at at slow speed 30Hz anyways)?
- CAN: slow, very reliable, targeted to cars ( have seen there are some exemples using CAN with robots but it looked exotic)
- UART: if I had only had one RT machine for motor control I would have considered UART but I guess this port does not scale well with many RTx Is TCP/IP really a no go because of its non-deterministic characteristics? It is so easy to use…
At the moment no solution really seems obvious to me. And as I can find no serious robot example using a specific reliable and scalable solution, I do not feel confident to make a choice.
Does anyone have a clear view on this point or literature to point to? Are there typical or mainstream communication solutions used on robots?