随着机器人技术的快速发展,机械臂的仿真与控制成为机器人研究和应用中的重要环节。Moveit作为ROS生态中功能强大的运动规划框架,结合Gazebo仿真环境,可以实现机械臂的高效仿真与调试。

本文将详细介绍如何在Ubuntu 20.04和ROS Noetic环境下,完成Moveit与Gazebo的联合仿真配置,包括环境搭建、URDF模型修改、Moveit配置更新以及相机插件的集成,帮助读者快速掌握机械臂仿真控制的关键步骤。

摘要

Moveit与Gazebo联合仿真

标签

ROS1、moveit、机械臂

仓库
  • 导航仓库: https://github.com/agilexrobotics/Agilex-College

  • 项目仓库: https://github.com/agilexrobotics/piper/piper_moveit.git

使用环境

系统:ubuntu 20.04

ROS版本:noetic

一、Moveit与Gazebo联合仿真

1.环境安装

这些是使用到Gazebo时使用到的一些库

sudo apt-get install ros-noetic-gazebo-ros ros-noetic-gazebo-ros-control ros-noetic-gazebo-ros-pkgs ros-noetic-control-* ros-noetic-velodyne* ros-noetic-roboticsgroup-upatras-gazebo-plugins ros-noetic-robotis-manipulator ros-noetic-effort-controllers ros-noetic-joint-trajectory-action ros-noetic-joint-state-controller ros-noetic-position-controllers ros-noetic-effort-controllers ros-noetic-gripper-action-controller ros-noetic-joint-trajectory-controller

2.增加底座

上一篇我们导出了Moveit的功能包,接下来我们需要根据Gazebo修改一下URDF;给机械臂增加一个底座,以免模型在仿真时出现高频的震动

打开piper_x_description.xacro;在base_link前增加以下代码

piper_x_description.xacro所在路径为/home/zsq/piper_sim_ws/src/piper_urdf/robot_description/piper_x_description/urdf/piper_x_description.xacro;根据实际路径打开

<link name="base_footprint">
    <inertial>
        <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
        <mass value="100.0"/>
        <inertia ixx="0.0016667" ixy="0.0" ixz="0.0" 
                 iyy="0.0016667" iyz="0.0" 
                 izz="0.0016667"/>
    </inertial>
    <visual name="cube_visual">
        <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
        <geometry>
            <box size="0.1 0.1 0.1"/>
        </geometry>
        <material name="red_material">
            <color rgba="1.0 0.0 0.0 1.0"/>
        </material>
    </visual>
    <collision>
        <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
        <geometry>
            <box size="0.1 0.1 0.1"/>
        </geometry>
    </collision>
</link>

<joint name="base_joint" type="fixed">
  <origin xyz="0.0 0.0 0.05" rpy="0.0 0.0 0.0"/>
  <parent link="base_footprint"/>
  <child link="base_link"/>
  <axis xyz="0.0 0.0 0.0"/>
  <limit lower="0.0" upper="0.0" effort="0.0" velocity="0.0"/>
</joint>

3.更新Moveit包

增加代码之后我们需要更新以下Moveit包,使用以下命令启动

roslaunch piper_x_moveit_config setup_assistant.launch

点击Load Files

重新计算以下碰撞模型即可

然后输出Moveit功能包

因为Moveit已经帮我们配置完关于contrllers的部分,可以直接使用

roslaunch piper_x_moveit_config demo_gazebo.launch

如果运行失败,可能是缺少某些库,可以根据报错自行下载安装即可

4.增加相机插件

机械臂是有携带相机模型的,想在gazebo中查看图像,需要在URDF中添加相机的相关插件;demo_gazebo.launch中使用的是piper_x_moveit_config/config/gazebo_piper_x_camera.urdf;

打开gazebo_piper_x_camera.urdf,在末尾增加以下代码

    <gazebo reference="camera_link">
          <sensor name="sensor_camera" type="depth">
            <pose>0.0 0.0 0.0 0.0 0.0 0.0</pose>
            <always_on>true</always_on>
            <visualize>true</visualize>
            <update_rate>10.0</update_rate>
            <camera name="head">
              <horizontal_fov>1.3962634</horizontal_fov>
              <image>
                  <width>1280</width>
                  <height>720</height>
                  <format>R8G8B8</format>
              </image>
              <clip>
                  <near>0.02</near>
                  <far>300</far>
              </clip>
            </camera>

            <plugin name="gazebo_ros_depth_camera_sensor" filename="libgazebo_ros_openni_kinect.so">
              <baseline>0.2</baseline>
              <alwaysOn>true</alwaysOn>

              <updateRate>0.0</updateRate>
              <cameraName>camera_link/camera_ir</cameraName>
              <imageTopicName>/camera_link/color/image_raw</imageTopicName>
              <cameraInfoTopicName>/camera_link/color/camera_info</cameraInfoTopicName>
              <depthImageTopicName>/camera_link/depth/image_raw</depthImageTopicName>
              <depthImageCameraInfoTopicName>/camera_link/depth/camera_info</depthImageCameraInfoTopicName>
              <pointCloudTopicName>/camera_link/depth/points</pointCloudTopicName>
              <frameName>camera_depth</frameName>
              <cameraname>camera_link</cameraname>
              
              <pointCloudCutoff>0.5</pointCloudCutoff>
              <pointCloudCutoffMax>3.0</pointCloudCutoffMax>
              <distortionK1>0</distortionK1>
              <distortionK2>0</distortionK2>
              <distortionK3>0</distortionK3>
              <distortionT1>0</distortionT1>
              <distortionT2>0</distortionT2>
              <CxPrime>0</CxPrime>
              <Cx>0</Cx>
              <Cy>0</Cy>
              <focalLength>0</focalLength>
              <hackBaseline>0</hackBaseline>
            </plugin>
        </sensor>
    </gazebo>

成功添加之后,再次启动Gazebo仿真,然后在Rviz中添加图像

roslaunch piper_x_moveit_config demo_gazebo.launch

通过本文的讲解,读者可以掌握如何搭建基于Moveit和Gazebo的机械臂仿真环境,解决模型震动问题,更新运动规划配置,并成功集成机械臂上的相机传感器,实现图像数据的仿真采集。

该流程不仅提升了机械臂仿真的真实感和稳定性,也为后续的运动规划和视觉感知应用奠定了坚实基础。希望本文能帮助大家更好地理解和应用Moveit与Gazebo联合仿真技术,加速机械臂开发与调试效率。

二、往期推荐

从零到玩转Moveit机械臂控制(一)

第一弹:机械臂固定点位录制与播放功能实现
第二弹:机械臂连续轨迹录制与播放功能实现
第三弹:用颜色说话,机械臂如何“看懂”方块与曲线并自动执行?
第四弹:如何用一部手机就能做到!不用遥控器也能控机械臂
第五弹:松灵PIPER机械臂手势识别与位置映射
第六弹:PiPER移植lerobot运动控制优化
第七弹:松灵PIPER机械臂实现Eigen线代库解算正逆运动学
第八弹:松灵Pika数采夹爪遥操任意机械臂的方法
第九弹:从零入门遥操作(UR篇)
第十弹:手柄遥操机械臂直观的机械臂控制新体验
第十一弹:松灵LIMO PRO的实例分割与点云提取实现
第十二弹:基于yolo算法识别的物体抓取
第十三弹:教你使用PiPER RL训练一个简单的任务
第十四弹:手把手教你完成 PiPER 机械臂的手眼标定(附完整命令)
第十五弹:在genesis上完成松灵PIPER单臂仿真与控制
第十六弹:Isaac_Sim 导入松灵PiPER URDF

第十七弹:用LIMO复现一篇IEEE论文

Logo

立足具身智能前沿赛道,致力于搭建全球化、开源化、全栈式技术交流与实践共创平台。

更多推荐