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笔记(31) ArbotiX关节控制器
ROS笔记(30) Movelt!配置文件
ROS笔记(29) 启动Movelt!
ROS笔记(28) Setup Assistant
ROS笔记(27) 机械臂的组装
谢谢!