- 前言
- 1.ros_control框架
- 2.ros_control组件
- controller_manager&msg
- ros_controllers
- hardware_interface
- transmission_interface
- joint_limits_interface
- controller_manager
- controller_manager命令
- controller_manager
- spawner于unspawner
- controllers可视化工具
ROS提供了用于控制机器人的组件ros_control,能够控制仿真和实际的机器人运动。
1.ros_control框架ros_control包由combined_robot_hw(硬件包),controller_interface(controller接口),controller_manager(controller管理器),controller_manager_msg(controller管理器的消息类型),hardware_interface(硬件底层的接口),joint_limits_interface(joints限制接口),transmission_interface(传动接口),realtime_tools(实时控制工具) 从上面这个框架图可以看出,ROS控制流是这样的:
ROS中的Controller manager接收load_controller、unload_controller等命令来加载和运行不同类型的controller(例如joint_position),这些controller通过Hardware Resource接口向硬件抽象层RobotHW读取和发布控制命令,这些命令再输入到机器人上的嵌入控制器上,然后有执行器执行。
2.ros_control组件 controller_manager&msgcontroller_manager提供了一个近乎实时的controller管理器,用于管理(加载、卸载、启停)controllers。
controller_manager_msg定义了controller的状态消息类型msg,以及调用controller_manager的服务类型srv。
ros_controllersros_controllers提供了ros_control中需要的controllers插件,包括:
effort_controllers # 控制joints的力和扭矩的controller
- joint_effort_controller # 直接输入力/扭矩
- joint_position_controller # 通过输入joint的位置,根据PID转换为力/扭矩
- joint_velocity_controller # 通过输入joint的速度,根据PID转换为力/扭矩
joint_state_controller # 发布joints的状态(position,velocity等),消息类型为sensor_msgs/JointState
- joint_state_controller
position_controllers # 直接控制joints的位置
- joint_position_controller
- joint_group_position_controller
velocity_controllers # 直接控制joint的速度
- joint_velocity_controller
- joint_group_velocity_controller
joint_trajectory_controllers # 控制joint的轨迹
hardware_interface
hardware_interface在硬件层面上与ros_controllers中的插件相对应,包含了以下硬件接口类:
JointCommandInterface类
- EffortJointInterface类
- PositionJointInterface类
- VelocityJointInterface类
JointStateInterface类
ActuatorStateInterface类
以及其它各种类
可以看出,hardware_interface是从硬件层面上为ros controller插件提供支持。
transmission_interfacetransmission用于描述相邻link之间的Joint与actuator之间的关系。
transmission_interface能够根据URDF中的transmission标签将该关系载入到硬件层中。
joint_limits_interface每个joint都有其状态限制,比如某个关节不可能能够无限施加力或者速度,joint_limits_interface负责限制这些状态。
joint_limits_interface能够根据URDF中的limit标签,将joint limit载入到硬件层中。
controller_managercontroller_manager用于加载、卸载、启动和停止controllers,如下图所示: 当载入controllers后,controller_manager将为每个controller发布一个话题,并在参数服务器中为每个controller设置参数。
# 用于加载、卸载、启动、停止controllers
rosrun controller_manager controller_manager
- load
- unload
- start
- stop
- spawn(load and start)
- kill(stop and unload)
# 用于获取controllers的状态
rosrun controller_manager controller_manager
- list
- list-types
- reload-libraries
- reload-libraries --restore
spawner于unspawner
用于立刻加载和启动许多controllers:
rosrun controller_manager spawner
# 当kill spawner时,controllers将自动停止并卸载
用于停止controllers但不卸载:
rosrun controller_manager unspawner
controllers可视化工具
ros_control额外提供了rqt_controller_manager包作为controller的可视化工具,不过这个包是额外的,可以通过apt安装:
sudo apt install ros-melodic-rqt-controller-manager
使用方法:
rosrun rqt_controller_manager rqt_controller_manager