No version for distro humble showing github. Known supported distros are highlighted in the buttons above.

Package Summary

Tags No category tags.
Version 0.1.0
License Apache-2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description ROS2 packages for the igus Robot Control
Checkout URI https://github.com/commonplacerobotics/irc_ros.git
VCS Type git
VCS Version humble
Last Updated 2025-05-21
Dev Status UNKNOWN
Released UNRELEASED
Tags robotics ros ros2
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

ROS package to control an igus ReBeL cobot.

Additional Links

Maintainers

  • Felix Reuter

Authors

  • Björn Schenke
  • Felix Reuter

iRC ROS Hardware interface

This package contains the drivers for interfacing with different robots. This can be done both over the CPRCANv2 protocol and the CRI protocol. The CPRCANv2 protocol is more perfomant and provides more functionality. The drawback is requiring more direct hardware access. If an EmbeddedControl unit or a igus Rebel with a base is used, the Raspberry Pi inside could be used. This could interfere with TinyCtrl and stop the robot from working with CRI unless you swap out or partition the SD Card and install a seperate sytem just for the ROS setup on it. While ROS2 and all used nodes should work on the Pi, it was not tested and the performance might be subpar, depending on your application. If you require more performance you can leave only parts of the nodes running on the Pi and e.g. start the visualisation + Nav2 nodes on a seperate device in the same network. Alternatively you could swap out the entire base and connect directly to the CAN bus cable coming out of the first robot axis. In that case you will have to take caution to provide an adequate power supply to the second cable coming out of the robot. In case you have a “ReBeL Open Source” version you are not provided with a base unit by default and need to follow this way.

While the CAN interface has few problems you still must be very careful when operating a robot!

The alternative to CAN is called CRI. Instead of directly interfacing with the bus itself, an intermediary device takes over the bus side and provides functionality such as path planning over the Network. The current CRI hardware interface only works reliable with velocity commands, as TinyCtrl can’t handle streaming joint goals. This will either be resolved by a custom ROS2 controller or an update for TinyCtrl. The CRI interface offers the advantage of working directly with existing robots otherwise controlled by iRC/CPRog.

Do not use the CRI interface for any serious work. It is not yet ready for anything besides testing, if even that.

Usage

The package is intended to be used inside the ROS2_Control ecosystem. The hardware interfaces provide state and command interfaces, which are connected to Controllers. For the movement commands the standard ROS2_Control Controllers are used. For other functionality, DIO and Module states, custom controllers are provided by the irc_ros_controllers package.

CRI

The CRI implementation is based on the TruPhysics ROS package for the igus ReBel. The protocol version should be V17 2022-08-02, although only a small subset of functions is implemented.

The CRI protocol requires a controller computer running a compatible version of TinyCtrl. It should be reachable under 192.168.3.11, otherwise the IP needs to configured accordingly.

CPRCANv2

This aims to implement a subset of the CPRCANv2 protocol. The protocol reference v1.5 released on 2022-07-18 was used, but not all functionality was deemed necessary. The EEPROM commands are not implemented here. Furthermore some undocumented functionality is implemented, notably a movement_ready bit available in more recent rebel axes firmwares.

The can hardware interface works on a per module base. They are collected in the main irc_ros_can class for combined hardware interfaces, but otherwise work independatly from each other. Each module is configured via the .ros2_control.xacro files with their can_id and module type. Control works both over position and velocity values, in theory also torque control is available but untested. The proper motion information is received by the position state, the velocity state is a simply, noisy calculation between two position states, only used for mobile platform velocity control. Module info and control is done via the dashboard found in the irc_ros_dashboard package. For debugging the CAN communication candump, cansend and ip link show can0 commands provide a good start.

Hardware Interfaces

Joint states

  • hardware_interface::HW_IF_POSITION
  • hardware_interface::HW_IF_VELOCITY (Note: very noisy)

    DIO states

  • (dio_name)_(number)

    Module states, found on all devices

  • “can_id”
  • “temperature_board”
  • “temperature_motor”
  • “hardware_ident”
  • “version_major”
  • “version_minor”
  • “error_state”
  • “motor_state”
  • “reset_state”
  • “supply_voltage”

Joint commands

  • hardware_interface::HW_IF_POSITION
  • hardware_interface::HW_IF_VELOCITY
  • hardware_interface::HW_IF_EFFORT (Note: untested)

    DIO commands

  • (dio_name)_(number)

    Module commands

  • “dashboard_command”

Movement commands

The CPRCAN V2 startup sequence combined with the desire to easily switch between position, velocity and torque control is integrated with an internal state that depends on the claimed interfaces. Only one of the interfaces may be used at the same time.

State machine

These are the current plans and/or statii of the different state machines. Once these are tested with all different hardware combinations these diagrams should be redone in a nicer design.

Motor State

stateDiagram-v2
    [*] --> disabled
    disabled --> enabling : enable_motor()
    enabling --> disabled : timeout
    enabling --> enabled : ACK
    enabled --> disabled : error state received
    enabled --> disabling : disable_motor()
    disabling --> disabled : ACK
    disabling --> enabled : timeout

The enable_motor() function is called once for a movement startup or via the dashboard interface. Currently disabling is only done manually via the dashboard. It might be an option to disable the motor after a certain delay of no movement commands, if the startup sequence is fast and stable enough.

ReadyToMove

Another state that needs to be checked for the readiness to move is the ready to move bit. On rebel axis modules this indicates for position commands if the set_pos variable can be modified from set_pos=current_pos. It is only set shortly after a successful motor enable and is unset once an error/motor disable occurs.

stateDiagram-v2
    [*] --> not_implemented : Din rail module or old firmware 
    [*] --> not_ready : Rebel axis module with recent firmware
    not_ready --> ready : Ready bit received
    ready --> not_ready : No ready bit received

ResetState

Used to track the state of error reset commands and error state.

stateDiagram-v2
    [*] --> not_reset
    not_reset --> resetting : reset_error()
    resetting --> reset : No Errors remaining
    resetting --> not_reset : timeout
    reset --> not_reset : Error received 

Note that the reset state is reached via a no error-bits set status message, as otherwise an unhandled status message send beforehand may set the state back to not_reset immediately.

SetToZeroState, ReferenceState, RotorAlignmentState

File truncated at 100 lines see the full file

CHANGELOG
No CHANGELOG found.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged irc_ros_hardware at Robotics Stack Exchange

No version for distro jazzy showing github. Known supported distros are highlighted in the buttons above.

Package Summary

Tags No category tags.
Version 0.1.0
License Apache-2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description ROS2 packages for the igus Robot Control
Checkout URI https://github.com/commonplacerobotics/irc_ros.git
VCS Type git
VCS Version humble
Last Updated 2025-05-21
Dev Status UNKNOWN
Released UNRELEASED
Tags robotics ros ros2
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

ROS package to control an igus ReBeL cobot.

Additional Links

Maintainers

  • Felix Reuter

Authors

  • Björn Schenke
  • Felix Reuter

iRC ROS Hardware interface

This package contains the drivers for interfacing with different robots. This can be done both over the CPRCANv2 protocol and the CRI protocol. The CPRCANv2 protocol is more perfomant and provides more functionality. The drawback is requiring more direct hardware access. If an EmbeddedControl unit or a igus Rebel with a base is used, the Raspberry Pi inside could be used. This could interfere with TinyCtrl and stop the robot from working with CRI unless you swap out or partition the SD Card and install a seperate sytem just for the ROS setup on it. While ROS2 and all used nodes should work on the Pi, it was not tested and the performance might be subpar, depending on your application. If you require more performance you can leave only parts of the nodes running on the Pi and e.g. start the visualisation + Nav2 nodes on a seperate device in the same network. Alternatively you could swap out the entire base and connect directly to the CAN bus cable coming out of the first robot axis. In that case you will have to take caution to provide an adequate power supply to the second cable coming out of the robot. In case you have a “ReBeL Open Source” version you are not provided with a base unit by default and need to follow this way.

While the CAN interface has few problems you still must be very careful when operating a robot!

The alternative to CAN is called CRI. Instead of directly interfacing with the bus itself, an intermediary device takes over the bus side and provides functionality such as path planning over the Network. The current CRI hardware interface only works reliable with velocity commands, as TinyCtrl can’t handle streaming joint goals. This will either be resolved by a custom ROS2 controller or an update for TinyCtrl. The CRI interface offers the advantage of working directly with existing robots otherwise controlled by iRC/CPRog.

Do not use the CRI interface for any serious work. It is not yet ready for anything besides testing, if even that.

Usage

The package is intended to be used inside the ROS2_Control ecosystem. The hardware interfaces provide state and command interfaces, which are connected to Controllers. For the movement commands the standard ROS2_Control Controllers are used. For other functionality, DIO and Module states, custom controllers are provided by the irc_ros_controllers package.

CRI

The CRI implementation is based on the TruPhysics ROS package for the igus ReBel. The protocol version should be V17 2022-08-02, although only a small subset of functions is implemented.

The CRI protocol requires a controller computer running a compatible version of TinyCtrl. It should be reachable under 192.168.3.11, otherwise the IP needs to configured accordingly.

CPRCANv2

This aims to implement a subset of the CPRCANv2 protocol. The protocol reference v1.5 released on 2022-07-18 was used, but not all functionality was deemed necessary. The EEPROM commands are not implemented here. Furthermore some undocumented functionality is implemented, notably a movement_ready bit available in more recent rebel axes firmwares.

The can hardware interface works on a per module base. They are collected in the main irc_ros_can class for combined hardware interfaces, but otherwise work independatly from each other. Each module is configured via the .ros2_control.xacro files with their can_id and module type. Control works both over position and velocity values, in theory also torque control is available but untested. The proper motion information is received by the position state, the velocity state is a simply, noisy calculation between two position states, only used for mobile platform velocity control. Module info and control is done via the dashboard found in the irc_ros_dashboard package. For debugging the CAN communication candump, cansend and ip link show can0 commands provide a good start.

Hardware Interfaces

Joint states

  • hardware_interface::HW_IF_POSITION
  • hardware_interface::HW_IF_VELOCITY (Note: very noisy)

    DIO states

  • (dio_name)_(number)

    Module states, found on all devices

  • “can_id”
  • “temperature_board”
  • “temperature_motor”
  • “hardware_ident”
  • “version_major”
  • “version_minor”
  • “error_state”
  • “motor_state”
  • “reset_state”
  • “supply_voltage”

Joint commands

  • hardware_interface::HW_IF_POSITION
  • hardware_interface::HW_IF_VELOCITY
  • hardware_interface::HW_IF_EFFORT (Note: untested)

    DIO commands

  • (dio_name)_(number)

    Module commands

  • “dashboard_command”

Movement commands

The CPRCAN V2 startup sequence combined with the desire to easily switch between position, velocity and torque control is integrated with an internal state that depends on the claimed interfaces. Only one of the interfaces may be used at the same time.

State machine

These are the current plans and/or statii of the different state machines. Once these are tested with all different hardware combinations these diagrams should be redone in a nicer design.

Motor State

stateDiagram-v2
    [*] --> disabled
    disabled --> enabling : enable_motor()
    enabling --> disabled : timeout
    enabling --> enabled : ACK
    enabled --> disabled : error state received
    enabled --> disabling : disable_motor()
    disabling --> disabled : ACK
    disabling --> enabled : timeout

The enable_motor() function is called once for a movement startup or via the dashboard interface. Currently disabling is only done manually via the dashboard. It might be an option to disable the motor after a certain delay of no movement commands, if the startup sequence is fast and stable enough.

ReadyToMove

Another state that needs to be checked for the readiness to move is the ready to move bit. On rebel axis modules this indicates for position commands if the set_pos variable can be modified from set_pos=current_pos. It is only set shortly after a successful motor enable and is unset once an error/motor disable occurs.

stateDiagram-v2
    [*] --> not_implemented : Din rail module or old firmware 
    [*] --> not_ready : Rebel axis module with recent firmware
    not_ready --> ready : Ready bit received
    ready --> not_ready : No ready bit received

ResetState

Used to track the state of error reset commands and error state.

stateDiagram-v2
    [*] --> not_reset
    not_reset --> resetting : reset_error()
    resetting --> reset : No Errors remaining
    resetting --> not_reset : timeout
    reset --> not_reset : Error received 

Note that the reset state is reached via a no error-bits set status message, as otherwise an unhandled status message send beforehand may set the state back to not_reset immediately.

SetToZeroState, ReferenceState, RotorAlignmentState

File truncated at 100 lines see the full file

CHANGELOG
No CHANGELOG found.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged irc_ros_hardware at Robotics Stack Exchange

No version for distro kilted showing github. Known supported distros are highlighted in the buttons above.

Package Summary

Tags No category tags.
Version 0.1.0
License Apache-2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description ROS2 packages for the igus Robot Control
Checkout URI https://github.com/commonplacerobotics/irc_ros.git
VCS Type git
VCS Version humble
Last Updated 2025-05-21
Dev Status UNKNOWN
Released UNRELEASED
Tags robotics ros ros2
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

ROS package to control an igus ReBeL cobot.

Additional Links

Maintainers

  • Felix Reuter

Authors

  • Björn Schenke
  • Felix Reuter

iRC ROS Hardware interface

This package contains the drivers for interfacing with different robots. This can be done both over the CPRCANv2 protocol and the CRI protocol. The CPRCANv2 protocol is more perfomant and provides more functionality. The drawback is requiring more direct hardware access. If an EmbeddedControl unit or a igus Rebel with a base is used, the Raspberry Pi inside could be used. This could interfere with TinyCtrl and stop the robot from working with CRI unless you swap out or partition the SD Card and install a seperate sytem just for the ROS setup on it. While ROS2 and all used nodes should work on the Pi, it was not tested and the performance might be subpar, depending on your application. If you require more performance you can leave only parts of the nodes running on the Pi and e.g. start the visualisation + Nav2 nodes on a seperate device in the same network. Alternatively you could swap out the entire base and connect directly to the CAN bus cable coming out of the first robot axis. In that case you will have to take caution to provide an adequate power supply to the second cable coming out of the robot. In case you have a “ReBeL Open Source” version you are not provided with a base unit by default and need to follow this way.

While the CAN interface has few problems you still must be very careful when operating a robot!

The alternative to CAN is called CRI. Instead of directly interfacing with the bus itself, an intermediary device takes over the bus side and provides functionality such as path planning over the Network. The current CRI hardware interface only works reliable with velocity commands, as TinyCtrl can’t handle streaming joint goals. This will either be resolved by a custom ROS2 controller or an update for TinyCtrl. The CRI interface offers the advantage of working directly with existing robots otherwise controlled by iRC/CPRog.

Do not use the CRI interface for any serious work. It is not yet ready for anything besides testing, if even that.

Usage

The package is intended to be used inside the ROS2_Control ecosystem. The hardware interfaces provide state and command interfaces, which are connected to Controllers. For the movement commands the standard ROS2_Control Controllers are used. For other functionality, DIO and Module states, custom controllers are provided by the irc_ros_controllers package.

CRI

The CRI implementation is based on the TruPhysics ROS package for the igus ReBel. The protocol version should be V17 2022-08-02, although only a small subset of functions is implemented.

The CRI protocol requires a controller computer running a compatible version of TinyCtrl. It should be reachable under 192.168.3.11, otherwise the IP needs to configured accordingly.

CPRCANv2

This aims to implement a subset of the CPRCANv2 protocol. The protocol reference v1.5 released on 2022-07-18 was used, but not all functionality was deemed necessary. The EEPROM commands are not implemented here. Furthermore some undocumented functionality is implemented, notably a movement_ready bit available in more recent rebel axes firmwares.

The can hardware interface works on a per module base. They are collected in the main irc_ros_can class for combined hardware interfaces, but otherwise work independatly from each other. Each module is configured via the .ros2_control.xacro files with their can_id and module type. Control works both over position and velocity values, in theory also torque control is available but untested. The proper motion information is received by the position state, the velocity state is a simply, noisy calculation between two position states, only used for mobile platform velocity control. Module info and control is done via the dashboard found in the irc_ros_dashboard package. For debugging the CAN communication candump, cansend and ip link show can0 commands provide a good start.

Hardware Interfaces

Joint states

  • hardware_interface::HW_IF_POSITION
  • hardware_interface::HW_IF_VELOCITY (Note: very noisy)

    DIO states

  • (dio_name)_(number)

    Module states, found on all devices

  • “can_id”
  • “temperature_board”
  • “temperature_motor”
  • “hardware_ident”
  • “version_major”
  • “version_minor”
  • “error_state”
  • “motor_state”
  • “reset_state”
  • “supply_voltage”

Joint commands

  • hardware_interface::HW_IF_POSITION
  • hardware_interface::HW_IF_VELOCITY
  • hardware_interface::HW_IF_EFFORT (Note: untested)

    DIO commands

  • (dio_name)_(number)

    Module commands

  • “dashboard_command”

Movement commands

The CPRCAN V2 startup sequence combined with the desire to easily switch between position, velocity and torque control is integrated with an internal state that depends on the claimed interfaces. Only one of the interfaces may be used at the same time.

State machine

These are the current plans and/or statii of the different state machines. Once these are tested with all different hardware combinations these diagrams should be redone in a nicer design.

Motor State

stateDiagram-v2
    [*] --> disabled
    disabled --> enabling : enable_motor()
    enabling --> disabled : timeout
    enabling --> enabled : ACK
    enabled --> disabled : error state received
    enabled --> disabling : disable_motor()
    disabling --> disabled : ACK
    disabling --> enabled : timeout

The enable_motor() function is called once for a movement startup or via the dashboard interface. Currently disabling is only done manually via the dashboard. It might be an option to disable the motor after a certain delay of no movement commands, if the startup sequence is fast and stable enough.

ReadyToMove

Another state that needs to be checked for the readiness to move is the ready to move bit. On rebel axis modules this indicates for position commands if the set_pos variable can be modified from set_pos=current_pos. It is only set shortly after a successful motor enable and is unset once an error/motor disable occurs.

stateDiagram-v2
    [*] --> not_implemented : Din rail module or old firmware 
    [*] --> not_ready : Rebel axis module with recent firmware
    not_ready --> ready : Ready bit received
    ready --> not_ready : No ready bit received

ResetState

Used to track the state of error reset commands and error state.

stateDiagram-v2
    [*] --> not_reset
    not_reset --> resetting : reset_error()
    resetting --> reset : No Errors remaining
    resetting --> not_reset : timeout
    reset --> not_reset : Error received 

Note that the reset state is reached via a no error-bits set status message, as otherwise an unhandled status message send beforehand may set the state back to not_reset immediately.

SetToZeroState, ReferenceState, RotorAlignmentState

File truncated at 100 lines see the full file

CHANGELOG
No CHANGELOG found.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged irc_ros_hardware at Robotics Stack Exchange

No version for distro rolling showing github. Known supported distros are highlighted in the buttons above.

Package Summary

Tags No category tags.
Version 0.1.0
License Apache-2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description ROS2 packages for the igus Robot Control
Checkout URI https://github.com/commonplacerobotics/irc_ros.git
VCS Type git
VCS Version humble
Last Updated 2025-05-21
Dev Status UNKNOWN
Released UNRELEASED
Tags robotics ros ros2
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

ROS package to control an igus ReBeL cobot.

Additional Links

Maintainers

  • Felix Reuter

Authors

  • Björn Schenke
  • Felix Reuter

iRC ROS Hardware interface

This package contains the drivers for interfacing with different robots. This can be done both over the CPRCANv2 protocol and the CRI protocol. The CPRCANv2 protocol is more perfomant and provides more functionality. The drawback is requiring more direct hardware access. If an EmbeddedControl unit or a igus Rebel with a base is used, the Raspberry Pi inside could be used. This could interfere with TinyCtrl and stop the robot from working with CRI unless you swap out or partition the SD Card and install a seperate sytem just for the ROS setup on it. While ROS2 and all used nodes should work on the Pi, it was not tested and the performance might be subpar, depending on your application. If you require more performance you can leave only parts of the nodes running on the Pi and e.g. start the visualisation + Nav2 nodes on a seperate device in the same network. Alternatively you could swap out the entire base and connect directly to the CAN bus cable coming out of the first robot axis. In that case you will have to take caution to provide an adequate power supply to the second cable coming out of the robot. In case you have a “ReBeL Open Source” version you are not provided with a base unit by default and need to follow this way.

While the CAN interface has few problems you still must be very careful when operating a robot!

The alternative to CAN is called CRI. Instead of directly interfacing with the bus itself, an intermediary device takes over the bus side and provides functionality such as path planning over the Network. The current CRI hardware interface only works reliable with velocity commands, as TinyCtrl can’t handle streaming joint goals. This will either be resolved by a custom ROS2 controller or an update for TinyCtrl. The CRI interface offers the advantage of working directly with existing robots otherwise controlled by iRC/CPRog.

Do not use the CRI interface for any serious work. It is not yet ready for anything besides testing, if even that.

Usage

The package is intended to be used inside the ROS2_Control ecosystem. The hardware interfaces provide state and command interfaces, which are connected to Controllers. For the movement commands the standard ROS2_Control Controllers are used. For other functionality, DIO and Module states, custom controllers are provided by the irc_ros_controllers package.

CRI

The CRI implementation is based on the TruPhysics ROS package for the igus ReBel. The protocol version should be V17 2022-08-02, although only a small subset of functions is implemented.

The CRI protocol requires a controller computer running a compatible version of TinyCtrl. It should be reachable under 192.168.3.11, otherwise the IP needs to configured accordingly.

CPRCANv2

This aims to implement a subset of the CPRCANv2 protocol. The protocol reference v1.5 released on 2022-07-18 was used, but not all functionality was deemed necessary. The EEPROM commands are not implemented here. Furthermore some undocumented functionality is implemented, notably a movement_ready bit available in more recent rebel axes firmwares.

The can hardware interface works on a per module base. They are collected in the main irc_ros_can class for combined hardware interfaces, but otherwise work independatly from each other. Each module is configured via the .ros2_control.xacro files with their can_id and module type. Control works both over position and velocity values, in theory also torque control is available but untested. The proper motion information is received by the position state, the velocity state is a simply, noisy calculation between two position states, only used for mobile platform velocity control. Module info and control is done via the dashboard found in the irc_ros_dashboard package. For debugging the CAN communication candump, cansend and ip link show can0 commands provide a good start.

Hardware Interfaces

Joint states

  • hardware_interface::HW_IF_POSITION
  • hardware_interface::HW_IF_VELOCITY (Note: very noisy)

    DIO states

  • (dio_name)_(number)

    Module states, found on all devices

  • “can_id”
  • “temperature_board”
  • “temperature_motor”
  • “hardware_ident”
  • “version_major”
  • “version_minor”
  • “error_state”
  • “motor_state”
  • “reset_state”
  • “supply_voltage”

Joint commands

  • hardware_interface::HW_IF_POSITION
  • hardware_interface::HW_IF_VELOCITY
  • hardware_interface::HW_IF_EFFORT (Note: untested)

    DIO commands

  • (dio_name)_(number)

    Module commands

  • “dashboard_command”

Movement commands

The CPRCAN V2 startup sequence combined with the desire to easily switch between position, velocity and torque control is integrated with an internal state that depends on the claimed interfaces. Only one of the interfaces may be used at the same time.

State machine

These are the current plans and/or statii of the different state machines. Once these are tested with all different hardware combinations these diagrams should be redone in a nicer design.

Motor State

stateDiagram-v2
    [*] --> disabled
    disabled --> enabling : enable_motor()
    enabling --> disabled : timeout
    enabling --> enabled : ACK
    enabled --> disabled : error state received
    enabled --> disabling : disable_motor()
    disabling --> disabled : ACK
    disabling --> enabled : timeout

The enable_motor() function is called once for a movement startup or via the dashboard interface. Currently disabling is only done manually via the dashboard. It might be an option to disable the motor after a certain delay of no movement commands, if the startup sequence is fast and stable enough.

ReadyToMove

Another state that needs to be checked for the readiness to move is the ready to move bit. On rebel axis modules this indicates for position commands if the set_pos variable can be modified from set_pos=current_pos. It is only set shortly after a successful motor enable and is unset once an error/motor disable occurs.

stateDiagram-v2
    [*] --> not_implemented : Din rail module or old firmware 
    [*] --> not_ready : Rebel axis module with recent firmware
    not_ready --> ready : Ready bit received
    ready --> not_ready : No ready bit received

ResetState

Used to track the state of error reset commands and error state.

stateDiagram-v2
    [*] --> not_reset
    not_reset --> resetting : reset_error()
    resetting --> reset : No Errors remaining
    resetting --> not_reset : timeout
    reset --> not_reset : Error received 

Note that the reset state is reached via a no error-bits set status message, as otherwise an unhandled status message send beforehand may set the state back to not_reset immediately.

SetToZeroState, ReferenceState, RotorAlignmentState

File truncated at 100 lines see the full file

CHANGELOG
No CHANGELOG found.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged irc_ros_hardware at Robotics Stack Exchange

Package Summary

Tags No category tags.
Version 0.1.0
License Apache-2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description ROS2 packages for the igus Robot Control
Checkout URI https://github.com/commonplacerobotics/irc_ros.git
VCS Type git
VCS Version humble
Last Updated 2025-05-21
Dev Status UNKNOWN
Released UNRELEASED
Tags robotics ros ros2
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

ROS package to control an igus ReBeL cobot.

Additional Links

Maintainers

  • Felix Reuter

Authors

  • Björn Schenke
  • Felix Reuter

iRC ROS Hardware interface

This package contains the drivers for interfacing with different robots. This can be done both over the CPRCANv2 protocol and the CRI protocol. The CPRCANv2 protocol is more perfomant and provides more functionality. The drawback is requiring more direct hardware access. If an EmbeddedControl unit or a igus Rebel with a base is used, the Raspberry Pi inside could be used. This could interfere with TinyCtrl and stop the robot from working with CRI unless you swap out or partition the SD Card and install a seperate sytem just for the ROS setup on it. While ROS2 and all used nodes should work on the Pi, it was not tested and the performance might be subpar, depending on your application. If you require more performance you can leave only parts of the nodes running on the Pi and e.g. start the visualisation + Nav2 nodes on a seperate device in the same network. Alternatively you could swap out the entire base and connect directly to the CAN bus cable coming out of the first robot axis. In that case you will have to take caution to provide an adequate power supply to the second cable coming out of the robot. In case you have a “ReBeL Open Source” version you are not provided with a base unit by default and need to follow this way.

While the CAN interface has few problems you still must be very careful when operating a robot!

The alternative to CAN is called CRI. Instead of directly interfacing with the bus itself, an intermediary device takes over the bus side and provides functionality such as path planning over the Network. The current CRI hardware interface only works reliable with velocity commands, as TinyCtrl can’t handle streaming joint goals. This will either be resolved by a custom ROS2 controller or an update for TinyCtrl. The CRI interface offers the advantage of working directly with existing robots otherwise controlled by iRC/CPRog.

Do not use the CRI interface for any serious work. It is not yet ready for anything besides testing, if even that.

Usage

The package is intended to be used inside the ROS2_Control ecosystem. The hardware interfaces provide state and command interfaces, which are connected to Controllers. For the movement commands the standard ROS2_Control Controllers are used. For other functionality, DIO and Module states, custom controllers are provided by the irc_ros_controllers package.

CRI

The CRI implementation is based on the TruPhysics ROS package for the igus ReBel. The protocol version should be V17 2022-08-02, although only a small subset of functions is implemented.

The CRI protocol requires a controller computer running a compatible version of TinyCtrl. It should be reachable under 192.168.3.11, otherwise the IP needs to configured accordingly.

CPRCANv2

This aims to implement a subset of the CPRCANv2 protocol. The protocol reference v1.5 released on 2022-07-18 was used, but not all functionality was deemed necessary. The EEPROM commands are not implemented here. Furthermore some undocumented functionality is implemented, notably a movement_ready bit available in more recent rebel axes firmwares.

The can hardware interface works on a per module base. They are collected in the main irc_ros_can class for combined hardware interfaces, but otherwise work independatly from each other. Each module is configured via the .ros2_control.xacro files with their can_id and module type. Control works both over position and velocity values, in theory also torque control is available but untested. The proper motion information is received by the position state, the velocity state is a simply, noisy calculation between two position states, only used for mobile platform velocity control. Module info and control is done via the dashboard found in the irc_ros_dashboard package. For debugging the CAN communication candump, cansend and ip link show can0 commands provide a good start.

Hardware Interfaces

Joint states

  • hardware_interface::HW_IF_POSITION
  • hardware_interface::HW_IF_VELOCITY (Note: very noisy)

    DIO states

  • (dio_name)_(number)

    Module states, found on all devices

  • “can_id”
  • “temperature_board”
  • “temperature_motor”
  • “hardware_ident”
  • “version_major”
  • “version_minor”
  • “error_state”
  • “motor_state”
  • “reset_state”
  • “supply_voltage”

Joint commands

  • hardware_interface::HW_IF_POSITION
  • hardware_interface::HW_IF_VELOCITY
  • hardware_interface::HW_IF_EFFORT (Note: untested)

    DIO commands

  • (dio_name)_(number)

    Module commands

  • “dashboard_command”

Movement commands

The CPRCAN V2 startup sequence combined with the desire to easily switch between position, velocity and torque control is integrated with an internal state that depends on the claimed interfaces. Only one of the interfaces may be used at the same time.

State machine

These are the current plans and/or statii of the different state machines. Once these are tested with all different hardware combinations these diagrams should be redone in a nicer design.

Motor State

stateDiagram-v2
    [*] --> disabled
    disabled --> enabling : enable_motor()
    enabling --> disabled : timeout
    enabling --> enabled : ACK
    enabled --> disabled : error state received
    enabled --> disabling : disable_motor()
    disabling --> disabled : ACK
    disabling --> enabled : timeout

The enable_motor() function is called once for a movement startup or via the dashboard interface. Currently disabling is only done manually via the dashboard. It might be an option to disable the motor after a certain delay of no movement commands, if the startup sequence is fast and stable enough.

ReadyToMove

Another state that needs to be checked for the readiness to move is the ready to move bit. On rebel axis modules this indicates for position commands if the set_pos variable can be modified from set_pos=current_pos. It is only set shortly after a successful motor enable and is unset once an error/motor disable occurs.

stateDiagram-v2
    [*] --> not_implemented : Din rail module or old firmware 
    [*] --> not_ready : Rebel axis module with recent firmware
    not_ready --> ready : Ready bit received
    ready --> not_ready : No ready bit received

ResetState

Used to track the state of error reset commands and error state.

stateDiagram-v2
    [*] --> not_reset
    not_reset --> resetting : reset_error()
    resetting --> reset : No Errors remaining
    resetting --> not_reset : timeout
    reset --> not_reset : Error received 

Note that the reset state is reached via a no error-bits set status message, as otherwise an unhandled status message send beforehand may set the state back to not_reset immediately.

SetToZeroState, ReferenceState, RotorAlignmentState

File truncated at 100 lines see the full file

CHANGELOG
No CHANGELOG found.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged irc_ros_hardware at Robotics Stack Exchange

No version for distro galactic showing github. Known supported distros are highlighted in the buttons above.

Package Summary

Tags No category tags.
Version 0.1.0
License Apache-2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description ROS2 packages for the igus Robot Control
Checkout URI https://github.com/commonplacerobotics/irc_ros.git
VCS Type git
VCS Version humble
Last Updated 2025-05-21
Dev Status UNKNOWN
Released UNRELEASED
Tags robotics ros ros2
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

ROS package to control an igus ReBeL cobot.

Additional Links

Maintainers

  • Felix Reuter

Authors

  • Björn Schenke
  • Felix Reuter

iRC ROS Hardware interface

This package contains the drivers for interfacing with different robots. This can be done both over the CPRCANv2 protocol and the CRI protocol. The CPRCANv2 protocol is more perfomant and provides more functionality. The drawback is requiring more direct hardware access. If an EmbeddedControl unit or a igus Rebel with a base is used, the Raspberry Pi inside could be used. This could interfere with TinyCtrl and stop the robot from working with CRI unless you swap out or partition the SD Card and install a seperate sytem just for the ROS setup on it. While ROS2 and all used nodes should work on the Pi, it was not tested and the performance might be subpar, depending on your application. If you require more performance you can leave only parts of the nodes running on the Pi and e.g. start the visualisation + Nav2 nodes on a seperate device in the same network. Alternatively you could swap out the entire base and connect directly to the CAN bus cable coming out of the first robot axis. In that case you will have to take caution to provide an adequate power supply to the second cable coming out of the robot. In case you have a “ReBeL Open Source” version you are not provided with a base unit by default and need to follow this way.

While the CAN interface has few problems you still must be very careful when operating a robot!

The alternative to CAN is called CRI. Instead of directly interfacing with the bus itself, an intermediary device takes over the bus side and provides functionality such as path planning over the Network. The current CRI hardware interface only works reliable with velocity commands, as TinyCtrl can’t handle streaming joint goals. This will either be resolved by a custom ROS2 controller or an update for TinyCtrl. The CRI interface offers the advantage of working directly with existing robots otherwise controlled by iRC/CPRog.

Do not use the CRI interface for any serious work. It is not yet ready for anything besides testing, if even that.

Usage

The package is intended to be used inside the ROS2_Control ecosystem. The hardware interfaces provide state and command interfaces, which are connected to Controllers. For the movement commands the standard ROS2_Control Controllers are used. For other functionality, DIO and Module states, custom controllers are provided by the irc_ros_controllers package.

CRI

The CRI implementation is based on the TruPhysics ROS package for the igus ReBel. The protocol version should be V17 2022-08-02, although only a small subset of functions is implemented.

The CRI protocol requires a controller computer running a compatible version of TinyCtrl. It should be reachable under 192.168.3.11, otherwise the IP needs to configured accordingly.

CPRCANv2

This aims to implement a subset of the CPRCANv2 protocol. The protocol reference v1.5 released on 2022-07-18 was used, but not all functionality was deemed necessary. The EEPROM commands are not implemented here. Furthermore some undocumented functionality is implemented, notably a movement_ready bit available in more recent rebel axes firmwares.

The can hardware interface works on a per module base. They are collected in the main irc_ros_can class for combined hardware interfaces, but otherwise work independatly from each other. Each module is configured via the .ros2_control.xacro files with their can_id and module type. Control works both over position and velocity values, in theory also torque control is available but untested. The proper motion information is received by the position state, the velocity state is a simply, noisy calculation between two position states, only used for mobile platform velocity control. Module info and control is done via the dashboard found in the irc_ros_dashboard package. For debugging the CAN communication candump, cansend and ip link show can0 commands provide a good start.

Hardware Interfaces

Joint states

  • hardware_interface::HW_IF_POSITION
  • hardware_interface::HW_IF_VELOCITY (Note: very noisy)

    DIO states

  • (dio_name)_(number)

    Module states, found on all devices

  • “can_id”
  • “temperature_board”
  • “temperature_motor”
  • “hardware_ident”
  • “version_major”
  • “version_minor”
  • “error_state”
  • “motor_state”
  • “reset_state”
  • “supply_voltage”

Joint commands

  • hardware_interface::HW_IF_POSITION
  • hardware_interface::HW_IF_VELOCITY
  • hardware_interface::HW_IF_EFFORT (Note: untested)

    DIO commands

  • (dio_name)_(number)

    Module commands

  • “dashboard_command”

Movement commands

The CPRCAN V2 startup sequence combined with the desire to easily switch between position, velocity and torque control is integrated with an internal state that depends on the claimed interfaces. Only one of the interfaces may be used at the same time.

State machine

These are the current plans and/or statii of the different state machines. Once these are tested with all different hardware combinations these diagrams should be redone in a nicer design.

Motor State

stateDiagram-v2
    [*] --> disabled
    disabled --> enabling : enable_motor()
    enabling --> disabled : timeout
    enabling --> enabled : ACK
    enabled --> disabled : error state received
    enabled --> disabling : disable_motor()
    disabling --> disabled : ACK
    disabling --> enabled : timeout

The enable_motor() function is called once for a movement startup or via the dashboard interface. Currently disabling is only done manually via the dashboard. It might be an option to disable the motor after a certain delay of no movement commands, if the startup sequence is fast and stable enough.

ReadyToMove

Another state that needs to be checked for the readiness to move is the ready to move bit. On rebel axis modules this indicates for position commands if the set_pos variable can be modified from set_pos=current_pos. It is only set shortly after a successful motor enable and is unset once an error/motor disable occurs.

stateDiagram-v2
    [*] --> not_implemented : Din rail module or old firmware 
    [*] --> not_ready : Rebel axis module with recent firmware
    not_ready --> ready : Ready bit received
    ready --> not_ready : No ready bit received

ResetState

Used to track the state of error reset commands and error state.

stateDiagram-v2
    [*] --> not_reset
    not_reset --> resetting : reset_error()
    resetting --> reset : No Errors remaining
    resetting --> not_reset : timeout
    reset --> not_reset : Error received 

Note that the reset state is reached via a no error-bits set status message, as otherwise an unhandled status message send beforehand may set the state back to not_reset immediately.

SetToZeroState, ReferenceState, RotorAlignmentState

File truncated at 100 lines see the full file

CHANGELOG
No CHANGELOG found.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged irc_ros_hardware at Robotics Stack Exchange

No version for distro iron showing github. Known supported distros are highlighted in the buttons above.

Package Summary

Tags No category tags.
Version 0.1.0
License Apache-2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description ROS2 packages for the igus Robot Control
Checkout URI https://github.com/commonplacerobotics/irc_ros.git
VCS Type git
VCS Version humble
Last Updated 2025-05-21
Dev Status UNKNOWN
Released UNRELEASED
Tags robotics ros ros2
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

ROS package to control an igus ReBeL cobot.

Additional Links

Maintainers

  • Felix Reuter

Authors

  • Björn Schenke
  • Felix Reuter

iRC ROS Hardware interface

This package contains the drivers for interfacing with different robots. This can be done both over the CPRCANv2 protocol and the CRI protocol. The CPRCANv2 protocol is more perfomant and provides more functionality. The drawback is requiring more direct hardware access. If an EmbeddedControl unit or a igus Rebel with a base is used, the Raspberry Pi inside could be used. This could interfere with TinyCtrl and stop the robot from working with CRI unless you swap out or partition the SD Card and install a seperate sytem just for the ROS setup on it. While ROS2 and all used nodes should work on the Pi, it was not tested and the performance might be subpar, depending on your application. If you require more performance you can leave only parts of the nodes running on the Pi and e.g. start the visualisation + Nav2 nodes on a seperate device in the same network. Alternatively you could swap out the entire base and connect directly to the CAN bus cable coming out of the first robot axis. In that case you will have to take caution to provide an adequate power supply to the second cable coming out of the robot. In case you have a “ReBeL Open Source” version you are not provided with a base unit by default and need to follow this way.

While the CAN interface has few problems you still must be very careful when operating a robot!

The alternative to CAN is called CRI. Instead of directly interfacing with the bus itself, an intermediary device takes over the bus side and provides functionality such as path planning over the Network. The current CRI hardware interface only works reliable with velocity commands, as TinyCtrl can’t handle streaming joint goals. This will either be resolved by a custom ROS2 controller or an update for TinyCtrl. The CRI interface offers the advantage of working directly with existing robots otherwise controlled by iRC/CPRog.

Do not use the CRI interface for any serious work. It is not yet ready for anything besides testing, if even that.

Usage

The package is intended to be used inside the ROS2_Control ecosystem. The hardware interfaces provide state and command interfaces, which are connected to Controllers. For the movement commands the standard ROS2_Control Controllers are used. For other functionality, DIO and Module states, custom controllers are provided by the irc_ros_controllers package.

CRI

The CRI implementation is based on the TruPhysics ROS package for the igus ReBel. The protocol version should be V17 2022-08-02, although only a small subset of functions is implemented.

The CRI protocol requires a controller computer running a compatible version of TinyCtrl. It should be reachable under 192.168.3.11, otherwise the IP needs to configured accordingly.

CPRCANv2

This aims to implement a subset of the CPRCANv2 protocol. The protocol reference v1.5 released on 2022-07-18 was used, but not all functionality was deemed necessary. The EEPROM commands are not implemented here. Furthermore some undocumented functionality is implemented, notably a movement_ready bit available in more recent rebel axes firmwares.

The can hardware interface works on a per module base. They are collected in the main irc_ros_can class for combined hardware interfaces, but otherwise work independatly from each other. Each module is configured via the .ros2_control.xacro files with their can_id and module type. Control works both over position and velocity values, in theory also torque control is available but untested. The proper motion information is received by the position state, the velocity state is a simply, noisy calculation between two position states, only used for mobile platform velocity control. Module info and control is done via the dashboard found in the irc_ros_dashboard package. For debugging the CAN communication candump, cansend and ip link show can0 commands provide a good start.

Hardware Interfaces

Joint states

  • hardware_interface::HW_IF_POSITION
  • hardware_interface::HW_IF_VELOCITY (Note: very noisy)

    DIO states

  • (dio_name)_(number)

    Module states, found on all devices

  • “can_id”
  • “temperature_board”
  • “temperature_motor”
  • “hardware_ident”
  • “version_major”
  • “version_minor”
  • “error_state”
  • “motor_state”
  • “reset_state”
  • “supply_voltage”

Joint commands

  • hardware_interface::HW_IF_POSITION
  • hardware_interface::HW_IF_VELOCITY
  • hardware_interface::HW_IF_EFFORT (Note: untested)

    DIO commands

  • (dio_name)_(number)

    Module commands

  • “dashboard_command”

Movement commands

The CPRCAN V2 startup sequence combined with the desire to easily switch between position, velocity and torque control is integrated with an internal state that depends on the claimed interfaces. Only one of the interfaces may be used at the same time.

State machine

These are the current plans and/or statii of the different state machines. Once these are tested with all different hardware combinations these diagrams should be redone in a nicer design.

Motor State

stateDiagram-v2
    [*] --> disabled
    disabled --> enabling : enable_motor()
    enabling --> disabled : timeout
    enabling --> enabled : ACK
    enabled --> disabled : error state received
    enabled --> disabling : disable_motor()
    disabling --> disabled : ACK
    disabling --> enabled : timeout

The enable_motor() function is called once for a movement startup or via the dashboard interface. Currently disabling is only done manually via the dashboard. It might be an option to disable the motor after a certain delay of no movement commands, if the startup sequence is fast and stable enough.

ReadyToMove

Another state that needs to be checked for the readiness to move is the ready to move bit. On rebel axis modules this indicates for position commands if the set_pos variable can be modified from set_pos=current_pos. It is only set shortly after a successful motor enable and is unset once an error/motor disable occurs.

stateDiagram-v2
    [*] --> not_implemented : Din rail module or old firmware 
    [*] --> not_ready : Rebel axis module with recent firmware
    not_ready --> ready : Ready bit received
    ready --> not_ready : No ready bit received

ResetState

Used to track the state of error reset commands and error state.

stateDiagram-v2
    [*] --> not_reset
    not_reset --> resetting : reset_error()
    resetting --> reset : No Errors remaining
    resetting --> not_reset : timeout
    reset --> not_reset : Error received 

Note that the reset state is reached via a no error-bits set status message, as otherwise an unhandled status message send beforehand may set the state back to not_reset immediately.

SetToZeroState, ReferenceState, RotorAlignmentState

File truncated at 100 lines see the full file

CHANGELOG
No CHANGELOG found.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged irc_ros_hardware at Robotics Stack Exchange

No version for distro melodic showing github. Known supported distros are highlighted in the buttons above.

Package Summary

Tags No category tags.
Version 0.1.0
License Apache-2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description ROS2 packages for the igus Robot Control
Checkout URI https://github.com/commonplacerobotics/irc_ros.git
VCS Type git
VCS Version humble
Last Updated 2025-05-21
Dev Status UNKNOWN
Released UNRELEASED
Tags robotics ros ros2
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

ROS package to control an igus ReBeL cobot.

Additional Links

Maintainers

  • Felix Reuter

Authors

  • Björn Schenke
  • Felix Reuter

iRC ROS Hardware interface

This package contains the drivers for interfacing with different robots. This can be done both over the CPRCANv2 protocol and the CRI protocol. The CPRCANv2 protocol is more perfomant and provides more functionality. The drawback is requiring more direct hardware access. If an EmbeddedControl unit or a igus Rebel with a base is used, the Raspberry Pi inside could be used. This could interfere with TinyCtrl and stop the robot from working with CRI unless you swap out or partition the SD Card and install a seperate sytem just for the ROS setup on it. While ROS2 and all used nodes should work on the Pi, it was not tested and the performance might be subpar, depending on your application. If you require more performance you can leave only parts of the nodes running on the Pi and e.g. start the visualisation + Nav2 nodes on a seperate device in the same network. Alternatively you could swap out the entire base and connect directly to the CAN bus cable coming out of the first robot axis. In that case you will have to take caution to provide an adequate power supply to the second cable coming out of the robot. In case you have a “ReBeL Open Source” version you are not provided with a base unit by default and need to follow this way.

While the CAN interface has few problems you still must be very careful when operating a robot!

The alternative to CAN is called CRI. Instead of directly interfacing with the bus itself, an intermediary device takes over the bus side and provides functionality such as path planning over the Network. The current CRI hardware interface only works reliable with velocity commands, as TinyCtrl can’t handle streaming joint goals. This will either be resolved by a custom ROS2 controller or an update for TinyCtrl. The CRI interface offers the advantage of working directly with existing robots otherwise controlled by iRC/CPRog.

Do not use the CRI interface for any serious work. It is not yet ready for anything besides testing, if even that.

Usage

The package is intended to be used inside the ROS2_Control ecosystem. The hardware interfaces provide state and command interfaces, which are connected to Controllers. For the movement commands the standard ROS2_Control Controllers are used. For other functionality, DIO and Module states, custom controllers are provided by the irc_ros_controllers package.

CRI

The CRI implementation is based on the TruPhysics ROS package for the igus ReBel. The protocol version should be V17 2022-08-02, although only a small subset of functions is implemented.

The CRI protocol requires a controller computer running a compatible version of TinyCtrl. It should be reachable under 192.168.3.11, otherwise the IP needs to configured accordingly.

CPRCANv2

This aims to implement a subset of the CPRCANv2 protocol. The protocol reference v1.5 released on 2022-07-18 was used, but not all functionality was deemed necessary. The EEPROM commands are not implemented here. Furthermore some undocumented functionality is implemented, notably a movement_ready bit available in more recent rebel axes firmwares.

The can hardware interface works on a per module base. They are collected in the main irc_ros_can class for combined hardware interfaces, but otherwise work independatly from each other. Each module is configured via the .ros2_control.xacro files with their can_id and module type. Control works both over position and velocity values, in theory also torque control is available but untested. The proper motion information is received by the position state, the velocity state is a simply, noisy calculation between two position states, only used for mobile platform velocity control. Module info and control is done via the dashboard found in the irc_ros_dashboard package. For debugging the CAN communication candump, cansend and ip link show can0 commands provide a good start.

Hardware Interfaces

Joint states

  • hardware_interface::HW_IF_POSITION
  • hardware_interface::HW_IF_VELOCITY (Note: very noisy)

    DIO states

  • (dio_name)_(number)

    Module states, found on all devices

  • “can_id”
  • “temperature_board”
  • “temperature_motor”
  • “hardware_ident”
  • “version_major”
  • “version_minor”
  • “error_state”
  • “motor_state”
  • “reset_state”
  • “supply_voltage”

Joint commands

  • hardware_interface::HW_IF_POSITION
  • hardware_interface::HW_IF_VELOCITY
  • hardware_interface::HW_IF_EFFORT (Note: untested)

    DIO commands

  • (dio_name)_(number)

    Module commands

  • “dashboard_command”

Movement commands

The CPRCAN V2 startup sequence combined with the desire to easily switch between position, velocity and torque control is integrated with an internal state that depends on the claimed interfaces. Only one of the interfaces may be used at the same time.

State machine

These are the current plans and/or statii of the different state machines. Once these are tested with all different hardware combinations these diagrams should be redone in a nicer design.

Motor State

stateDiagram-v2
    [*] --> disabled
    disabled --> enabling : enable_motor()
    enabling --> disabled : timeout
    enabling --> enabled : ACK
    enabled --> disabled : error state received
    enabled --> disabling : disable_motor()
    disabling --> disabled : ACK
    disabling --> enabled : timeout

The enable_motor() function is called once for a movement startup or via the dashboard interface. Currently disabling is only done manually via the dashboard. It might be an option to disable the motor after a certain delay of no movement commands, if the startup sequence is fast and stable enough.

ReadyToMove

Another state that needs to be checked for the readiness to move is the ready to move bit. On rebel axis modules this indicates for position commands if the set_pos variable can be modified from set_pos=current_pos. It is only set shortly after a successful motor enable and is unset once an error/motor disable occurs.

stateDiagram-v2
    [*] --> not_implemented : Din rail module or old firmware 
    [*] --> not_ready : Rebel axis module with recent firmware
    not_ready --> ready : Ready bit received
    ready --> not_ready : No ready bit received

ResetState

Used to track the state of error reset commands and error state.

stateDiagram-v2
    [*] --> not_reset
    not_reset --> resetting : reset_error()
    resetting --> reset : No Errors remaining
    resetting --> not_reset : timeout
    reset --> not_reset : Error received 

Note that the reset state is reached via a no error-bits set status message, as otherwise an unhandled status message send beforehand may set the state back to not_reset immediately.

SetToZeroState, ReferenceState, RotorAlignmentState

File truncated at 100 lines see the full file

CHANGELOG
No CHANGELOG found.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged irc_ros_hardware at Robotics Stack Exchange

No version for distro noetic showing github. Known supported distros are highlighted in the buttons above.

Package Summary

Tags No category tags.
Version 0.1.0
License Apache-2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description ROS2 packages for the igus Robot Control
Checkout URI https://github.com/commonplacerobotics/irc_ros.git
VCS Type git
VCS Version humble
Last Updated 2025-05-21
Dev Status UNKNOWN
Released UNRELEASED
Tags robotics ros ros2
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

ROS package to control an igus ReBeL cobot.

Additional Links

Maintainers

  • Felix Reuter

Authors

  • Björn Schenke
  • Felix Reuter

iRC ROS Hardware interface

This package contains the drivers for interfacing with different robots. This can be done both over the CPRCANv2 protocol and the CRI protocol. The CPRCANv2 protocol is more perfomant and provides more functionality. The drawback is requiring more direct hardware access. If an EmbeddedControl unit or a igus Rebel with a base is used, the Raspberry Pi inside could be used. This could interfere with TinyCtrl and stop the robot from working with CRI unless you swap out or partition the SD Card and install a seperate sytem just for the ROS setup on it. While ROS2 and all used nodes should work on the Pi, it was not tested and the performance might be subpar, depending on your application. If you require more performance you can leave only parts of the nodes running on the Pi and e.g. start the visualisation + Nav2 nodes on a seperate device in the same network. Alternatively you could swap out the entire base and connect directly to the CAN bus cable coming out of the first robot axis. In that case you will have to take caution to provide an adequate power supply to the second cable coming out of the robot. In case you have a “ReBeL Open Source” version you are not provided with a base unit by default and need to follow this way.

While the CAN interface has few problems you still must be very careful when operating a robot!

The alternative to CAN is called CRI. Instead of directly interfacing with the bus itself, an intermediary device takes over the bus side and provides functionality such as path planning over the Network. The current CRI hardware interface only works reliable with velocity commands, as TinyCtrl can’t handle streaming joint goals. This will either be resolved by a custom ROS2 controller or an update for TinyCtrl. The CRI interface offers the advantage of working directly with existing robots otherwise controlled by iRC/CPRog.

Do not use the CRI interface for any serious work. It is not yet ready for anything besides testing, if even that.

Usage

The package is intended to be used inside the ROS2_Control ecosystem. The hardware interfaces provide state and command interfaces, which are connected to Controllers. For the movement commands the standard ROS2_Control Controllers are used. For other functionality, DIO and Module states, custom controllers are provided by the irc_ros_controllers package.

CRI

The CRI implementation is based on the TruPhysics ROS package for the igus ReBel. The protocol version should be V17 2022-08-02, although only a small subset of functions is implemented.

The CRI protocol requires a controller computer running a compatible version of TinyCtrl. It should be reachable under 192.168.3.11, otherwise the IP needs to configured accordingly.

CPRCANv2

This aims to implement a subset of the CPRCANv2 protocol. The protocol reference v1.5 released on 2022-07-18 was used, but not all functionality was deemed necessary. The EEPROM commands are not implemented here. Furthermore some undocumented functionality is implemented, notably a movement_ready bit available in more recent rebel axes firmwares.

The can hardware interface works on a per module base. They are collected in the main irc_ros_can class for combined hardware interfaces, but otherwise work independatly from each other. Each module is configured via the .ros2_control.xacro files with their can_id and module type. Control works both over position and velocity values, in theory also torque control is available but untested. The proper motion information is received by the position state, the velocity state is a simply, noisy calculation between two position states, only used for mobile platform velocity control. Module info and control is done via the dashboard found in the irc_ros_dashboard package. For debugging the CAN communication candump, cansend and ip link show can0 commands provide a good start.

Hardware Interfaces

Joint states

  • hardware_interface::HW_IF_POSITION
  • hardware_interface::HW_IF_VELOCITY (Note: very noisy)

    DIO states

  • (dio_name)_(number)

    Module states, found on all devices

  • “can_id”
  • “temperature_board”
  • “temperature_motor”
  • “hardware_ident”
  • “version_major”
  • “version_minor”
  • “error_state”
  • “motor_state”
  • “reset_state”
  • “supply_voltage”

Joint commands

  • hardware_interface::HW_IF_POSITION
  • hardware_interface::HW_IF_VELOCITY
  • hardware_interface::HW_IF_EFFORT (Note: untested)

    DIO commands

  • (dio_name)_(number)

    Module commands

  • “dashboard_command”

Movement commands

The CPRCAN V2 startup sequence combined with the desire to easily switch between position, velocity and torque control is integrated with an internal state that depends on the claimed interfaces. Only one of the interfaces may be used at the same time.

State machine

These are the current plans and/or statii of the different state machines. Once these are tested with all different hardware combinations these diagrams should be redone in a nicer design.

Motor State

stateDiagram-v2
    [*] --> disabled
    disabled --> enabling : enable_motor()
    enabling --> disabled : timeout
    enabling --> enabled : ACK
    enabled --> disabled : error state received
    enabled --> disabling : disable_motor()
    disabling --> disabled : ACK
    disabling --> enabled : timeout

The enable_motor() function is called once for a movement startup or via the dashboard interface. Currently disabling is only done manually via the dashboard. It might be an option to disable the motor after a certain delay of no movement commands, if the startup sequence is fast and stable enough.

ReadyToMove

Another state that needs to be checked for the readiness to move is the ready to move bit. On rebel axis modules this indicates for position commands if the set_pos variable can be modified from set_pos=current_pos. It is only set shortly after a successful motor enable and is unset once an error/motor disable occurs.

stateDiagram-v2
    [*] --> not_implemented : Din rail module or old firmware 
    [*] --> not_ready : Rebel axis module with recent firmware
    not_ready --> ready : Ready bit received
    ready --> not_ready : No ready bit received

ResetState

Used to track the state of error reset commands and error state.

stateDiagram-v2
    [*] --> not_reset
    not_reset --> resetting : reset_error()
    resetting --> reset : No Errors remaining
    resetting --> not_reset : timeout
    reset --> not_reset : Error received 

Note that the reset state is reached via a no error-bits set status message, as otherwise an unhandled status message send beforehand may set the state back to not_reset immediately.

SetToZeroState, ReferenceState, RotorAlignmentState

File truncated at 100 lines see the full file

CHANGELOG
No CHANGELOG found.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged irc_ros_hardware at Robotics Stack Exchange