ROS笔记(32) MoveIt!关节控制器

ROS笔记(32) MoveIt!关节控制器


1. 上层规划和关节控制器接口

虽然在 ROS笔记(31) ArbotiX关节控制器 为机器模型配置了ArbotiX关节控制器
可以通过FollowJointTrajectoryAction类型的action消息控制模型运动
它是一个接收消息并执行的装置

但是,在控制中是给一个特定的目标弧度,而不是 Movelt! 规划求解的弧度
如果能够通过Movelt!实现运动规划,并且将规划结果通过FollowJointTrajectoryAction发送给机器的Arbotix关节控制器,整个系统才能完整

所以在Movelt!上层规划和ArbotiX关节控制器之间需要一个将两者结合的接口
这个接口在Movelt!中同样以插件的形式提供,称为moveit_simple_controller_manager

manager 管理器可以提供FollowJointTrajectoryAction接口,将规划轨迹以action的形式发布
这就是目前最需要的

除此之外, HHArm还有一个两指夹爪,通过ArbotiX的gripper_controller驱动
使用的action类型是GripperCommandAction
moveit_simple_controller_manager中同样有相应的接口

配置方法与配置ArbotiX控制器的类似:
首先添加一个YAML配置文件,然后使用launch文件启动插件并加载配置参数


2. 配置文件

关于Movelt!的配置文件都放置在hharm_moveit_config功能包的config文件夹下
在 Setup Assistant 设置ROS控制器插件的配置文件为ros_controllers.yaml
其中gripper_controller在 Setup Assistant 设置时action类型默认为FollowJointTrajectory

而在ArbotiX关节控制器中gripper_controller对应的action类型为GripperCommand
所以创建一个arbotix_controllers.yaml配置文件

ros_controllers.yaml类似
但对于gripper_controller需修改成GripperCommand,对应消息的命名空间action_ns也得修改

controller_list:
  - name: arm_controller
    action_ns: follow_joint_trajectory
    default: True
    type: FollowJointTrajectory
    joints:
      - joint1
      - joint2
      - joint3
      - joint4
      - joint5
      - joint6
  - name: gripper_controller
    action_ns: gripper_action
    default: True
    type: GripperCommand
    joints:
      - finger_joint1

列出了机器每个规划组所需配置的控制器插件,以及这些插件的具体配置参数

  • name:控制器插件的名称
  • action_ns:控制器发布action消息的命名空间
  • default:是否为该规划组的默认控制器插件
  • type:实现action的类型
  • joints:该规划组所包含的关节

name 和 action_ns 组成控制器action接口的消息名
例如 arm_controller 插件的action接口:arm_controller/follow_joint_trajectory
ROS笔记(31) ArbotiX关节控制器 配置的ArbotixX控制器插件一致,整个通讯才可以正常


3. 启动插件

现在可以启动moveit_simple_controller_manager插件了
同时需要加载arbotix_controllers.yaml配置文件

在 Setup Assistant 生成的配置文件中,已经生成启动Movelt!控制器插件的 launch 文件
在配置功能包的launch文件夹下命名为RobotName_moveit_controller_manager.launch.xml
HHArm所生成的配置文件为hharm_moveit_controller_manager.launch.xml
该文件在move_group.launch启动时也会启动

但是该文件默认是启动 ros_controllers
在使用ArbotiX时,修改了一下控制器:

<launch>

  <!-- loads moveit_controller_manager on the parameter server which is taken as argument 
    if no argument is passed, moveit_simple_controller_manager will be set -->
  <arg name="moveit_controller_manager" default="moveit_simple_controller_manager/MoveItSimpleControllerManager" />
  <param name="moveit_controller_manager" value="$(arg moveit_controller_manager)"/>

  <!-- loads ros_controllers to the param server -->
  <!-- <rosparam file="$(find hharm_moveit_config)/config/ros_controllers.yaml"/> -->

  <!-- loads arbotix_controllers to the param server -->
  <rosparam file="$(find hharm_moveit_config)/config/arbotix_controllers.yaml"/>

</launch>

这个文件启动了Movelt!中的MoveltSimpleControllerManager插件
并且加载了 arbotix_controllers.yaml 配置文件

到目前为止,自底向上创建了机械臂模型,完成了模型在Movelt!中的配置,添加了控制器插件
为Movelt!关键角色——核心节点move_group的运行做足了准备


参考:

ROS官方wiki
古月居


相关推荐:

ROS笔记(31) ArbotiX关节控制器
ROS笔记(30) Movelt!配置文件
ROS笔记(29) 启动Movelt!
ROS笔记(28) Setup Assistant
ROS笔记(27) 机械臂的组装


谢谢!

上一篇:机器人ROS系统学习随笔->6《ROS机器人系统设之机器人Moveit!机械臂控制》


下一篇:ros平台下python脚本控制机械臂运动