ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | Q&A answers.ros.org |
![]() | 1 | initial version |
So I actually achieved understanding of this issue and my poorly formulated question, here it is:
My actual question was:
What is ROSControl software architecture?
The wiki page and Adolfo's conference talk do an excellent job explaining what ROSControl is but I was having trouble understanding what it was that I had to actually code.
What my understanding of the answer is:
The above picture shows the set of programs and protocols needed to write in order to communicate bidirectionally with a robot.
Controller: In charge of talking with higher level ROS Nodes and abstracting the control commands. For example, diff_drive_controller will read from a /cmd_vel topic, calculate what the angular speed of each wheel should be and send it down. At the same time it would read the state of the joints and will offer it in the /odom topic.
Robot_HW: It is in charge of maintaining and connecting the interface objects(velocity,position,effort,state) and the robot_interface object. It inherits from robot_hw.h and It is a very simple class that varies very little from robot to robot being the main difference the amount of interfaces maintained that usually matched the number of motors being controlled.
Robot_interface: The piece of software which is in charge of communicating with the motor controller and the first door out of code and into the physical world. It sends commands in the form of velocities, positions, etc and receives as feedback the measured state of the motor. It is also in charge of implementing the chosen communication protocol with the motor controller: ethernet, CANBus, serial, etc.
Robot_firmware: The program running in the motor controller in charge of receiving the command and transform it into voltage to send to the motor. It could be a microbasic script, an arduino script, etc.
Let me know if you see anything inaccurate!