ROS学习七、ros_control控制(1)

前言

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&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用于加载、卸载、启动和停止controllers,如下图所示:
在这里插入图片描述
当载入controllers后,controller_manager将为每个controller发布一个话题,并在参数服务器中为每个controller设置参数。

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
  • 7
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值