openvmp / remote_hardware_interface

Hardware interface plugin for ros2_control which proxies requests to compatible nodes that actually implement the hardware control

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

remote_hardware_interface

License

This package implements a hardware interface plugin for ros2_control and proxies requests to compatible nodes that actually implement the hardware control.

This is useful to access remote hardware (over the network) or to access heavy hardware modules that are not designed for an exclusive use by the ros2_control_node (e.g. for independent power consumption control, troubleshooting/introspection, audit log recording, or other non-motion-control related operations). Examples of such hardware modules include:

How to

Configuration

Here is an example of how it could look like in your URDF files:

  <ros2_control name="HardwareSystem" type="system">
    <hardware>
      <plugin>remote_hardware_interface/RemoteSystemInterface</plugin>
      <param name="namespace">/robot1</param>
    </hardware>
  </ros2_control>
  • namespace: the prefix to all ROS2 interfaces
    • there will be a node created in this namespace to facilitate messaging with actuators and encoders
    • actuators will be expected to be at <namespace>/actuator/<joint-name>
    • encoders will be expected to be at <namespace>/encoder/<joint-name>

Implementation details

flowchart TB
    urdf[URDF]

    subgraph ros2_control_node[Process: ros2_control_node]
      controller_manager
      subgraph remote_hardware_interface[Controller: remote_hardware_interface]
        subgraph joint1[ActuatorInterface: right_shoulder_joint]
          subgraph state_interface[state_interface]
            absolute_encoder_intf[Absolute encoder]
          end
          subgraph command_interface[command_interface]
            stepper_driver_intf[Stepper driver]
            brake_intf[Electromagnetic brake]
          end
        end
      end
      controller_manager --> remote_hardware_interface
    end
    
    subgraph stepper_driver_node[Example stepper driver node]
      stepper_driver_impl[//actuator/joint1/] -->
      stepper_logic[Stepper driver's driver] -->
      stepper_driver_topic[//modbus/line1/02/]
    end
    
    subgraph absolute_encoder_node[Example stepper driver node]
      absolute_encoder_impl[//encoder/joint1/] -->
      absolute_encoder_logic[Absolute encoder driver] -->
      absolute_encoder_topic[//modbus/line1/01/]
    end
    
    subgraph switch_node[Example switch node]
      switch_impl[//brake/joint1/] -->
      switch_driver[Switch driver] -->
      gpio_intf[GPIO driver]
    end

    subgraph modbus_rtu_node[Modbus RTU]
      modbus[//modbus/line1/] -->
      serial_driver["Serial port driver"]
    end

    absolute_encoder_intf --> absolute_encoder_impl
    stepper_driver_intf --> stepper_driver_impl

    absolute_encoder_topic --> modbus
    stepper_driver_topic --> modbus
    brake_intf --> switch_impl

    pmu[Power management driver,\nas an example of alternative consumer\nof hardware interfaces]
    pmu -->stepper_driver_impl
    pmu -->switch_impl

    gpio_intf ----> gpio{{GPIO interface}} --> relay

    urdf --> controller_manager
    subgraph robot_hardware[Example robot hardware]
      rs485[RS485]
      rs485 --> encoder[Absolute encoder]
      rs485 --> stepper_driver[Stepper driver]
      relay[Relay] --> brake[Elecromagnetic brake]
    end

    serial_driver --> file{{Character device: /dev/ttyS0}} --> rs485

    style ros2_control_node fill:#0000
    style stepper_driver_node fill:#0000
    style absolute_encoder_node fill:#0000
    style switch_node fill:#0000
    style modbus_rtu_node fill:#0000
    style robot_hardware fill:#0000

About

Hardware interface plugin for ros2_control which proxies requests to compatible nodes that actually implement the hardware control

License:Apache License 2.0


Languages

Language:C++ 90.3%Language:CMake 9.7%