Control architecture design - help!
Dear all,
I am having a control architecture design decision to take and I was thinking some of you guys have probably already faced the same kind of problems. So here follows the description.
We are currently designing a mobile robot + mounted arm with multiple controlled degrees of freedom and sensors. In the initial configuration there are 10 positioning motors to control and we are considering modifications were this number would scale up. Sensors include an IMU (gyros + accelerometers + magneto) + kinect (for SLAM) + motor encoders.
I am considering the following architecture:
1. RTx: Positioning motors control
- Achieved by a RT system (either Raspeberry Pis running an RTOS such as Xenomai or bare metal microcontrollers)
-> let us call these machines RTx, with x=1,2,3… depending on the number of microcontrollers
- Each of them controlling 2 or 3 motors with related encoders (not sure about the technology of the motors yet)
- Fast loop: 200Hz
2. PC1: SLAM computation + IMU computation + fusion (SLAM + IMU + mocap) + high level logic (decide the robot’s task and deduct the motors desired position and speed)
- Compute on a powerful machine (vanilla linux, no RT)
-> Let us call this machine PC1
- Onboard robot
- Using ROS
- Slow loop: 30Hz
I know my framework needs to be scalable to account for more motors, more sensors, more PCs (eg. for external mocap). I was wondering whether there were typical or mainstream communication solutions used on robots (I know no brainer solutions do not exist but maybe there are typical ones that are often used). I have looked at papers related to robots architecture (eg. 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?
My main problem is to decide how to have the different RTx communicate with PC1. I am not sure which technology of BUS/netword to use to connect the fast RT machines ensuring the motor control with PC1. I have considered TCP/IP, CAN and UART. There may be other solutions, I do not know about:
1. 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)?
2. CAN: slow, very reliable, targeted to cars ( have seen there are some exemples using CAN with robots but it looked exotic)
3. 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 exemple using a specific reliable and scalable solution, I do not feel confident to make a choice. Anyone has a clear view on this ...
Another bus to consider is (EtherCat)[http://en.wikipedia.org/wiki/EtherCAT].