ROS学习七、机器人控制ros_contrl 前言1.ros_control框架2.ros_control组件controller_manager&msgros_controllershardware_interfacetransmission_interfacejoint_limits_interfacecontroller_manager controller_manager命令controller_managerspawner于unspawner controllers可视化工具
前言ROS提供了用于控制机器人的组件ros_control,能够控制仿真和实际的机器人运动。
1.ros_control框架ROS中的Controller manager接收load_controller、unload_controller等命令来加载和运行不同类型的controller(例如joint_position),这些controller通过Hardware Resource接口向硬件抽象层RobotHW读取和发布控制命令,这些命令再输入到机器人上的嵌入控制器上,然后有执行器执行。
2.ros_control组件controller_manager&msg
controller_manager提供了一个近乎实时的controller管理器,用于管理(加载、卸载、启停)controllers。
controller_manager_msg定义了controller的状态消息类型msg,以及调用controller_manager的服务类型srv。
ros_controllers
ros_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_interface
transmission用于描述相邻link之间的Joint与actuator之间的关系。
transmission_interface能够根据URDF中的transmission标签将该关系载入到硬件层中。
joint_limits_interface
每个joint都有其状态限制,比如某个关节不可能能够无限施加力或者速度,joint_limits_interface负责限制这些状态。
joint_limits_interface能够根据URDF中的limit标签,将joint limit载入到硬件层中。
controller_manager
controller_manager命令controller_manager
# 用于加载、卸载、启动、停止controllers
rosrun controller_manager controller_manager <command> <controller name>
- load
- unload
- start
- stop
- spawn(load and start)
- kill(stop and unload)
# 用于获取controllers的状态
rosrun controller_manager controller_manager <command>
- list
- list-types
- reload-libraries
- reload-libraries --restore
spawner于unspawner
用于立刻加载和启动许多controllers:
rosrun controller_manager spawner <controller name>
# 当kill spawner时,controllers将自动停止并卸载
用于停止controllers但不卸载:
rosrun controller_manager unspawner <conotroller name>
controllers可视化工具
ros_control额外提供了rqt_controller_manager包作为controller的可视化工具,不过这个包是额外的,可以通过apt安装:
sudo apt install ros-melodic-rqt-controller-manager
使用方法:
rosrun rqt_controller_manager rqt_controller_manager