使用MoveIt!配置软件包在RViz中进行机器人运动规划

     MoveIt!为RViz提供了一个插件,可以建立新的规划场景(在该场景中,机器人运作、生成运动规划、添加新物体),

显示规划的输出结果,还可以直接与可视化机器人进行交互。

MoveIt!配置软件包由配置文件和启动文件组成,用于在RViz中启动运动规划,在软件包中有一个演示的启动文件,用于进一步了解该软件包的所有功能。

下面是运行演示启动文件的命令:

$ roslaunch seven_dof_arm_config demo.launch

我们将看到RViz加载了MoveIt!提供的MotionPlaning插件,如图所示:

                                             MoveIt!-RViz插件

使用RViz运动规划插件

上图中,在屏幕的左边,我们可以看到RViz运动规划插件被加载了。在MotionPlanning窗口中有多个选项卡,例如Context、Planning等,默认的选项卡是Context。

扫描二维码关注公众号,回复: 9221684 查看本文章

我们看到默认的Planning Library为OMPL。这表明MoveIt!成功地加载了运动规划库,如果未加载的话,我们则无法执行运动规划。

如下图是Planning选项卡,这是一个经常使用的选项卡,在这个选项卡中可以设定起始状态(Start State)、目标状态(Goal State)、路径规划(Plan)和执行(Execute)规划的路径。

                                  如图是MoveIt!-RViz的Planning选项卡

  我们就可以在Ouery面板下指定机械臂的开始状态和目标状态,点击Plan按钮后,我们就可以规划从起始状态到目标状态的路径,

如果规划成功的话,我们就可以执行规划的路径,一般默认情况下,执行都是在伪控制器上完成的。我们可以将这些控制器更改为轨迹

控制器,以便在Gazebo或真实机器人中执行规划的轨迹。

我们可以使用机械臂夹爪的交互式标记来设置机器人末端执行器的起始位置和目标位置,我们可以拖动和旋转标记的姿态,并且如果

规划有解,我们将看到一个橙色的机械臂,在某些情况下,即使末端执行器的标记姿态移动了,机械臂也不移动,如果机械臂没有到

达标记位置,我们就可以假设该姿态中没有IK解,我们可能需要更多的自由度来到达哪里或者连杆之间可能存在一些碰撞。

  我们也可以在起始状态和目标状态中使用random valid(随机有效)选项进行快速的运动规划,如果我们选择目标状态为random valid(即随机有效状态)

并按下Update按钮,那么将会生成随机有效的目标姿态,点击Plan按钮后,我们可以观察到运动规划的过程。

我们使用MoveIt!Planning插件中的多个选项自定义RViz的显示结果,如图所示:

 第一个标记的区域是Scene Robot,它将显示机器人的模型:如果未选中,我们就看不到任何机器人模型。

第二个标记的区域是Trajectory Topic,RViz在这里获取可视化的轨迹,如果我们想要为运动规划设置动画并想要显示运动轨迹,那么我们就应该启用此选项。

 在上图中,我们可以看到Query Start State和Query Goal State选项,这些选项可以显示机械臂的起始状态和目标姿态,

就如我们在图上看到的那样。Show Workspace将机器人周围的方形工作空间(所处世界的几何空间)可视化,可视化

可以帮助我们调试运动规划算法,并详细了解机器人运动行为的细节。

MoveIt!配置软件包与Gazebo的接口我们已经使用Gazebo仿真了机械臂及其控制器,如我们在MoveIt!架构中提到的那样,为了将MoveIt!中的机械臂连接到Gazebo,

我们还需要一个具有FollowJointTrajectory-Action接口的轨迹控制器。

下面是将MoveIt!连接到Gazebo的过程:

第一步:为MoveIt!编写控制器配置文件第一步是创建一个配置文件,用来与Gazebo中来自MoveIt!的轨迹控制器进行通信。

我们需要在seven_dof_arm_config软件包的config文件中创建名为controllers.yaml的控制器配置文件。

下面是controllers.yaml定义的一个示例:

 1 controller_manager_ns: controller_manager                                          
 2 controller_list:
 3   - name: seven_dof_arm/seven_dof_arm_joint_controller
 4     action_ns: follow_joint_trajectory
 5     type: FollowJointTrajectory
 6     default: true
 7     joints:
 8       - shoulder_pan_joint
 9       - shoulder_pitch_joint
10       - elbow_roll_joint
11       - elbow_pitch_joint
12       - wrist_roll_joint
13       - wrist_pitch_joint
14       - gripper_roll_joint
15   - name: seven_dof_arm/gripper_controller
16     action_ns: follow_joint_trajectory
17     type: FollowJointTrajectory
18     default: true
19     joints:
20       - finger_joint1
21       - finger_joint2

   控制器配置文件包含两个控制器接口的定义,一个用于机械臂,另一个用于夹爪。控制器使用的动作类型为FollowJointTrajectory,

动作命名空间为follow_joint_trajectory。我们必须列出每组下的关节。default:ture表明它将使用默认控制器,它是MoveIt!中用来与

一组关节进行通信的主要控制器。

第二步:创建控制器启动文件接下来我们必须创建一个名为seven_dof_arm_moveit_controller_manager.launch的新启动文件,

它可以启动轨迹控制器,该文件名称是以机器人的名称开头,后面跟上_moveit_controller_manager结尾。

下面是启动文件:

1 <launch>                                                                           
 2     <!-- Set the param that trajectory_execution_manager needs to find the controll   er plugin -->
 3     <arg name="moveit_controller_manager" default="moveit_simple_controller_manager   /MoveItSimpleControllerManager" />
 4     <param name="moveit_controller_manager" value="$(arg moveit_controller_manager)   "/>
 5 
 6     <!-- load controller_list -->
 7     <arg name="use_controller_manager" default="true" />
 8     <param name="use_controller_manager" value="$(arg use_controller_manager)" />
 9 
10     <!-- Load joint controller configurations from YAML file to parameter server --   >
11     <rosparam file="$(find seven_dof_arm_config)/config/controllers.yaml"/>
12 </launch>

 该启动文件启动了MoveItSimpleControllerManager并加载了controller.yaml中定义的关节轨迹控制器。

猜你喜欢

转载自www.cnblogs.com/tanshengjiang/p/12322756.html