使用 MoveIt 控制自己的真实机械臂【1】——配置 action client 端
1、demo.launch
中的参数 fake_execution
值设置为 false
在默认生成的 MoveIt 配置文件中,所使用的部分参数是针对虚拟机械臂而言的,这可以使其在 Rviz 环境中观察到模型的运动,但是,这种用于控制虚拟机械臂的方式不会将真正的控制信号发送出来,因此,为了在控制真实机械臂时得到控制 MoveIt 输出的控制信号,需要对 demo.launch
文件作出以下修改:
<arg name="fake_execution" value="false"/>
顾名思义,将 fake_execution
设置为 false
,即是启用真实机械臂执行。
同时,注释以下代码,使其不再发布虚拟的 joint_states
,因为驱动真实机械臂时,我们要同步的是真实机械臂的joint_states
,拿到真实机械臂的关节状态然后通过 joint_states
发布出来也是后续我们应该处理的工作。
<!-- We do not have a robot connected, so publish fake joint states -->
<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" unless="$(arg use_gui)">
<rosparam param="source_list">[move_group/fake_controller_joint_states]</rosparam>
</node>
<node name="joint_state_publisher" pkg="joint_state_publisher_gui" type="joint_state_publisher_gui" if="$(arg use_gui)">
<rosparam param="source_list">[move_group/fake_controller_joint_states]</rosparam>
</node>
2、设置moveit_controller_manager
参数值为自己机器人名称
设置完参数之后,跟随 demo.launch
的脚步,进入 move_group.launch
文件,moveit_controller_manager
参数,在选择参数值的时候,unless
前的 value
值要修改成自己的机器人名称作为前前缀(这里由于我机械臂的 urdf 模型文件中机器人名称是 xmate7_description
)。
<!-- Trajectory Execution Functionality -->
<include ns="move_group" file="$(find xmate7_moveit_config_new)/launch/trajectory_execution.launch.xml" if="$(arg allow_trajectory_execution)">
<arg name="moveit_manage_controllers" value="true" />
<arg name="moveit_controller_manager" value="xmate7_description" unless="$(arg fake_execution)"/>
<arg name="moveit_controller_manager" value="fake" if="$(arg fake_execution)"/>
</include>
此处由于我们在第一步将 fake_execution
设置为了 false
,所以 moveit_controller_manager
这一参数选择的必然就是我们修改的自己的机器人名称,即 xmate7_description
。
3、进入 trajectory_execution.launch.xml
文件
接下来 moveit_controller_manager
参数传入 trajectory_execution.launch.xml
文件中,这里为了统一,顺便把 default
值也改为 xmate7_description
吧。
<arg name="moveit_controller_manager" default="xmate7_description" />
<include file="$(find xmate7_moveit_config_new)/launch/$(arg moveit_controller_manager)_moveit_controller_manager.launch.xml" />
可以发现,在 fake_execution
为 true
的时候,此处加载的文件应该是 fake_moveit_controller_manager.launch.xml
(该文件存在于 moveit 生成的配置文件中);
而现在我们设置了 fake_execution
为 false
, 那么此时此处加载的文件应该是 xmate7_description_moveit_controller_manager.launch.xml
(这个文件应该也由 moveit 预留好了【当使用之前的 moveit 向导加载机器人模型时,机器人模型中写明的机器人名称(name属性),就会作为前缀写入这个文件的文件名,所以,“xmate7_description”这个名称源自于模型文件里写明的机器人名称】)
4、进入 xmate7_description_moveit_controller_manager.launch.xml
文件
配置如下:
<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 xmate7_moveit_config_new)/config/ros_controllers.yaml"/>
</launch>
5、创建 ros_controllers.yaml
文件
上一步代码最后一句指向了 ros_controllers.yaml
这个配置文件决定了所使用 moveit 控制器的基本参数,该文件配置如下:
controller_list:
- name: xmate_arm_controller
action_ns: follow_joint_trajectory
default: True
type: FollowJointTrajectory
joints:
- joint1
- joint2
- joint3
- joint4
- joint5
- joint6
- joint7
name
:自定义名称,方便使用;
action_ns: follow_joint_trajectory
:follow_joint_trajectory 是后续 action 名称的一部分,有关 action 的内容在下面,将来需要填一个 action 名称,这个名称就在这个配置文件里确定了,就是 name/action_ns 所代表的对应字符串的组合;
type: FollowJointTrajectory
:moveit 输出轨迹的一种数据存储结构;
joints
:机器人关节名称,模型文件中定义的关节名称;
到此,MoveIt 端文件已经配置完毕, MoveIt 已经准备好将规划的轨迹已 action 形式发送出来;后续需要利用这个 action 携带的轨迹信息,来进一步的建立 MoveIt 和真实机械臂之间的连接。
参考文章:
CSDN_合工大机器人实验室:通过ROS控制真实机械臂(5)—Moveit!真实机械臂(move_group和demo.launch修改)
CSDN_爱学习的草莓熊:使用moveit!控制真实机械臂(3)——修改moveit配置文件来控制真实机械臂(9月27日更新))
CSDN_鱼香ROS:机器人学习必看系列:如何使用moveit控制真实机械臂?