ROS2 Control
Hardware Interface
This package provides multiple hardware interfaces for testing. Mainly the following:
canopen_ros2_control/CanopenSystem: A system interface for ProxyDrivers
canopen_ros2_control/Cia402System: A system interface for Cia402Drivers
canopen_ros2_control/Cia402RobotSystem: A system interface for Cia402Drivers in a robot configuration (under development)
Robot System Interface
The robot system interface takes a number of inputs from the robot description (urdf). It will make the Cia402Drivers available via the ros2_control hardware interface. The bus has to still be defined in the bus.yml file. In the urdf you can the choose the CANopen nodes that have a Cia402Driver attached to them.
The ros2_control interface only works with non-lifecycle drivers right now.
For each joint in your urdf you can choose the attached CANopen device by using the
node_id
parameter. The node_id
parameter is the CANopen node id of the device.
<ros2_control name="${name}" type="system">
<hardware>
<plugin>canopen_ros2_control/Cia402RobotSystem</plugin>
<param name="bus_config">[path to bus.yml]</param>
<param name="master_config">[path to master.dcf]</param>
<param name="can_interface_name">[can interface to be used]</param>
<param name="master_bin">[master.bin if it exists]</param>
</hardware>
<joint name="joint1">
<param name="node_id">3</param>
...
</joint>
<joint name="joint2">
<param name="node_id">3</param>
...
</joint>
</ros2_control>
Note
You can find an example for the configuration in the canopen_tests
package under robot_control.
ROS2 Controllers
This package provides multiple controllers for testing. Mainly the following:
canopen_ros2_controllers/Cia402RobotController: Works with Robot System Interface
canopen_ros2_controllers/Cia402DeviceController: Works with Cia402System
canopen_ros2_controllers/CanopenProxyController: Works with CanopenSystem and Cia402System
Robot Controller
The robot controller enables bringing up the different joints of the robot automatically by using the ros2_controller lifecycle. There is no need for further action, once the controller is activated, the drives are ready to be used.
The robot controller can be configured in the ros2_controllers.yaml with the following parameters:
robot_controller:
ros__parameters:
joints: # joints that are controlled by the controller
- joint1
- joint2
operation_mode: 1 # operation mode of the controller
command_poll_freq: 5 # frequency with which the controller polls for command feedback