您当前的位置: 首页 > 

RuiH.AI

暂无认证

  • 0浏览

    0关注

    274博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

ROS学习七、ros_control控制(1)

RuiH.AI 发布时间:2021-10-04 17:38:01 ,浏览量:0

ROS学习七、机器人控制ros_contrl
  • 前言
  • 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&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  
- 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
关注
打赏
1658651101
查看更多评论
立即登录/注册

微信扫码登录

0.0361s