Rviz和Gazebo联合仿真运动(一)

Moveit运动规划功能包导出详细步骤

在经过之前的一系列修改之后,我相信大家的机械臂已经差不多可以使用了。我想后面应该会像我一样使用Moveit进行路径规划,或者是添加深度相机等模型进行一个仿真的抓取。

这篇博客的目的在于详细说明Moveit功能包的导出,篇幅有点长。后面会再写一篇联合Gazebo+Rviz使用,用于在后面路径规划使用。废话不多说,且看后面!


前提:安装一些依赖,我的环境是Ubuntu18.04加melodic版本的,先在这里说明哈!

sudo apt-get install ros-melodic-ros-control ros-melodic-ros-controllers ros-melodic-gazebo-ros ros-melodic-gazebo-ros-control ros-melodic-hector-gazebo-plugins 
sudo apt-get install ros-melodic-joint-trajectory-controller
sudo apt-get install ros-melodic-moveit*

在这里,我先指出一点错误,就是有的小伙伴会出现无法定位安装包的错误,你知道你小子错在哪里吗?你频繁更换软件源,操作又不规范,所以软件源出现问题了。至于如何重新更换软件源这里不好展开,你可以直接搜索其它更换软件源的方法,应该是有的!如果不会的话,可以评论跟我说!


首先:我们启动一下MoveIt Setup Assistant,输入如下代码:启动不起来可以先roscore一下

roslaunch moveit_setup_assistant setup_assistant.launch

出现两个按钮,第一个是创建一个新的Moveit规划包,第二个是修改已经存在的Moveit规划包,大家如果没有的话,直接点击第一个

其次:点击Browse,选择你的.xacro文件地址,或者urdf文件

 点击右下角的Load file后,你的机械臂就能出现在右边啦!下面的图,我拿了一个已经创建好的moveit讲解的,

 再次:点击self-collisions,这个是产生自我碰撞检测,点击Generate Collision Matrix就行,因为碰撞检测花费的时间是很长的,这里创建碰撞矩阵的目的就是通过采样的方式判断一些关节是永远不会发生碰撞的,节省了碰撞检测的时间,大大提高效率。

 再再次:点击Virtual joints,这个大家肯定能看懂,就是产生虚拟关节,其作用就是将某一个关节和世界坐标系固定起来。如果看过我上一篇将URDF文件修改为XACRO文件这篇博客的朋友应该有印象,我在修改的时候是不是添加过如下代码:

<link name="world"/>

<joint name="fixed_base_joint" type="fixed">

    <parent link="world"/>

    <child link="base_link"/>

</joint>

这个Virtual joints就是这个作用,固定了base_link,如果说小伙伴们在第一步加载的.xacro文件中就有这段代码的话,大家可以忽略Virtual joints。如果没有的话,也可以忽略!嘿嘿,意外不?因为后面可以修改,哈哈!惊喜吧!


再再再次:点击Planning Groups,意思就是添加运动规划组,因为在运动规划的时候是以规划组为单位进行规划的。小伙伴们如果是机械臂的话,一般两个组,一个机械臂arm组,一个夹爪gripper组,如果没有夹爪的话就只需要添加机械臂arm组就行啦!没事的。

举个栗子:添加arm组如下,点击Add Group

Group Name:就是这个组的名字,我取的是robot2600_arm

kinematic Solver就是运动学解算器,可以选择kdl_kinematics_plugin这个,适合链式规划组。

OMPL Planning选择RRT,其他参数默认。

注意注意!这里有个大坑“不是所有的规划组解算器都选这个”,大家肯定看了很多其它的文章,发现他们也选择这个,所以就把自己的所有规划组的运动学解算器都选择这个,ok那后面肯定有报错。

像我这种,另一个规划组是夹爪gripper这种,单纯的直线运动,kinematic Solver就应该选择None,惊不惊喜?

kdl_kinematics_plugin这种解算器只适合链式的规划组,比如说机械臂本体,所以说,一定要注意!

 还没完呢!点击Add Kin Chain,添加属于这个robot2600_arm规划组的关节,然后保存,如下:

点击下三角可以展开所有的关节,我这里因为拿了一个已经创建好的包,所以关节有点多。如果是大家创建的机械臂的话,你应该没有这个d435_bottom_screw_frame,这个是相机

添加robot2600_arm规划组的关节,那么你的Base_link要选择base_link,Tip_link端部要选grasping_frame这个关节,这就相当于一串链条

我知道你想问什么问题,嘿嘿!你是不是想问这个虚拟关节grasping_frame是什么东西是吧?这就是一个简单的虚拟关节,不包含实体。且看下面的代码:

  <link name="grasping_frame"/>

  <joint name="grasping_frame_joint" type="fixed">

    <parent link="link6"/>

    <child link="grasping_frame"/>

    <origin xyz="0 -0.04149 0.36965" rpy="0 -1.5708 -3.14"/>

  </joint>

简不简单?它就是以Link6为父坐标系的一个虚拟关节坐标系,不包含实体,仅仅是作为抓取的一个参考坐标系。为什么要设置这个?问的好,为了抓取。抓取过程其实可以理解为一个求解坐标系之间的变换的过程。


我们添加第二个组,gripper组,我是有夹爪的哈!小伙伴们没有的话就可以自己画一个自己喜欢的,重复上述步骤的时候注意这里:看到了吗?kinematic Solver选择的是None,千万别乱选哈!会报错的。其他的到是没什么!gripper这里点击的分别是Add joints和Add Links

 两个运动规划组如下:


再再再再次:点击Robot Poses,意思是添加机械臂的位姿,我们可以为每一个规划组都添加两个位姿,大家想添加多少个都行。以下图片的夹爪和我上面的不一样,因为这篇博客修改过多次,但主要就是给大家展示一下添加的位姿用

我的如下:


 再再再再再次:点击End Effectors这里的意思就是添加末端执行器,我有夹爪,所以可以设置末端执行器,哈哈!。见下图:

 名字可以写成gripper随意,Group选择我们之前设置好的robot2600_gripper组,且注意这个Parent Link,我们选择的是上一个组robot2600_arm组的最后一个关节grasping_frame,这是一个以Link6为父参考坐标系的虚拟关节


再再再再再再次:passive Joint可以不用选,跳过。


再再再再再再再次:ROS Control这里一定要设置,谁不设置谁倒霉!真的。当然你不设置,当然有办法解决,但又会多出很多麻烦。建议设置

首先点击Auto这个按钮:

 会出现两个Controller Type 是FollowJointTrajectory的两个关节控制,名字应该叫做xxx_controller,这个FollowJointTrajectory是什么意思呢?就是Moveit将关节规划信息封装好成为话题或者服务等通讯信息,然后发给Gazebo------意思就是发送规划信息

然后点击,Add Controller,给机械臂和夹爪分别添加控制。

比如该机械臂添加的时候,Name:可以填写arm_position

Type:一定要写:position_controllers/JointTrajectoryController

夹爪添加的时候,Name:可以填写gripper_position

Type:一定要写:position_controllers/JointTrajectoryController

注意:下面这张图后面两条,也就是Controller Type 是FollowJointTrajectory的这两条本来名字不叫arm_position和gripper_position,你们的应该叫做xxx_controller,这是因为我后面修改了。不要慌。在这个界面修改不了,因为不能同名,必须在最后生成的文件中修改。


再再再再再再再再次:点击simulation再点击Generate URDF

到这里就已经生成了另一个URDF文件,这个文件我们可以全部复制,点击左下角Copy to clipboard添加到剪切板,然后在原来urdf文件目录中在重新建一个名字为robot2600_20_text.urdf的文件,并全部黏贴进去,如下:这里生成的URDF内容其实和你自己的是一样的,你也可以跳过这个步骤也没有关系,这里主要是告诉大家,这个插件可以自动根据你的模型生成URDF文件。

 


再再再再再再再再再次: 3D Perception是3D传感器,我们没有,跳过。然后在Author information中添加自己的邮箱就行


最后了,伙伴们。点击Configuration Files生成最后的规划包,点击Browse重新选择路径,我们在src中创建一个robot2600_20_moveit_config文件夹,然后点击保存。

这个警告直接不要管,点击OK,因为我们自己在代码中添加过固定虚拟坐标了。

到此,大功告成了,泪目啊! 

导出了功能包之后就可以直接进行运动规划了,由于篇幅的原因,如何使用这个导出的Moveit功能包会在  “下一篇博客中介绍”,因为也很长~~~写太多怕你们看了厌烦。


猜你喜欢

转载自blog.csdn.net/shdhckcjc/article/details/129375190
今日推荐