ros_control介绍


仿真模型究竟是怎么样控制的呢?这一节我们来谈一谈用ros_control来控制gazebo中的仿真模型吧。

本篇内容主要转自古月居ROS探索总结(三十一)——ros_control

1.ros_control概述

ROS中提供了丰富的机器人应用:SLAM、导航、MoveIt……但是你可能一直有一个疑问,这些功能包到底应该怎么样用到我们的机器人上,也就是说在应用和实际机器人或者机器人仿真器之间,缺少一个连接两者的东西。这个可以形象地用上图中的!!!部分描述。

ros_control就是ROS为用户提供的应用与机器人之间的中间件,包含一系列控制器接口、传动装置接口、硬件接口、控制器工具箱等等,可以帮助机器人应用快速落地,提高开发效率。我们将上图填充完整后,是如下效果:
01

从上图中可以看出,ros确实是一个框架。ros_control可以提供多种类型的控制器(底盘、机械臂等),但是这些控制器的接口各不相同,为了提高代码的复用率,ros_control还提供一个硬件的抽象层(Robot hardware abstraction)。硬件抽象层负责机器人硬件资源的管理;而controller从抽象层请求资源即可,并不直接接触硬件。
03

上图是ros_control的数据流图,可以更加清晰的看到每个层次包含的功能:

  • Controller Manager:每个机器人可能有多个controller,所以这里有一个控制器管理器的概念,提供一种通用的接口来管理不同的controller。controller manager的输入就是ROS上层应用的输出。
  • Controller:controller可以完成每个joint的控制,请求下层的硬件资源,并且提供了PID控制器,读取硬件资源接口中的状态,在发布控制命令。
  • Hardware Rescource:为上下两层提供硬件资源的接口。
  • RobotHW:硬件抽象层和硬件直接打交道,通过write和read方法来完成硬件的操作,这一层也包含关节限位、力矩转换、状态转换等功能。
  • Real Robot:实际的机器人上也需要有自己的嵌入式控制器,接收到命令后需要反映到执行器上,比如接收到位置1的命令后,那就需要让执行器快速、稳定的到达位置1。

2. Controllers:

ros_controllers这个功能包提供了已有的一些controllers:

  1. effort_controllers - Command a desired force/torque to joints.
    • joint_effort_controller
    • joint_position_controller
    • joint_velocity_controller
  2. joint_state_controller - Read all joint positions.
    • joint_state_controller
  3. position_controllers - Set one or multiple joint positions at once.
    • joint_position_controller
    • joint_group_position_controller
  4. velocity_controllers - Set one or multiple joint velocities at once.
    • joint_velocity_controller
    • joint_group_velocity_controller
  5. joint_trajectory_controllers - Extra functionality for splining an entire trajectory.
    • position_controller
    • velocity_controller
    • effort_controller
    • position_velocity_controller
    • position_velocity_acceleration_controller

当然,我们也可以根据自己的需求,创建需要的controller,然后通过controller来管理自己创建的controller,可以参考https://github.com/ros-controls/ros_control/wiki/controller_interface.

3.Hardware Interface

Hardware Interface是controller和RobotHw沟通的接口,基本上和controllers的种类是对应的,同样可以自己创建需要的接口,可以参考:https://github.com/ros-controls/ros_control/wiki/hardware_interface.

  1. Joint Command Interfaces
    • Effort Joint Interface
    • Velocity Joint Interface
    • Position Joint Interface
  2. Joint State Interfaces
  3. Actuator State Interfaces
  4. Actuator Command Interfaces
    • Effort Actuator Interface
    • Velocity Actuator Interface
    • Position Actuator Interface
  5. Force-torque sensor Interface
  6. IMU sensor Interface

4. Transmissions

Transmissions就是机器人的传动系统,机器人每个需要运动的关节都需要配置相应的Transmission,可以通过代码完成https://github.com/ros-controls/ros_control/wiki/transmission_interface,但大部分情况下,都会在URDF文件中直接添加http://ros.org/wiki/urdf/XML/Transmission。关于Transmissions的更多介绍可以参考ROS Control之Transmission

参考链接

  1. 古月居ROS探索总结(三十一)——ros_control
  2. ros_control官网
  3. Gazebo: ros_control官网
------ 本文结束感谢您的阅读------
Donate a cup of cola?