Moveit +Gazebo:搭建单臂机械臂仿真平台

本文档详细介绍了如何在Ubuntu 20.04和ROS Noetic环境下配置MoveIt! 用于Franka Panda机械臂的仿真。首先,安装ROS和MoveIt!,然后通过MoveIt Setup Assistant配置机械臂模型,包括自碰撞矩阵、规划组和末端执行器。接着,配置了joint_state_controller和trajectory_controller,并编写了launch文件以启动Gazebo仿真、MoveIt! 和控制器。最终,通过roslaunch命令启动整个系统并在rviz中进行规划演示。

环境:Ubuntu20.04 ros-noetic

先放上效果展示:

 

 首先要先安装ROS 和 Moveit,ROS的安装就不说了,Moeit的安装参看官网教程

Getting Started — moveit_tutorials Noetic documentation

安装过程中,用到了命令:

rosdep update

最好在安装的时候能够科学上网

搭建单臂仿真平台主要分为4大步

        1.准备urdf/xacro文件

        2.通过moveit setup assistant进行配置

        3.controller的配置

        4.launch文件的编写

准备urdf/xacro文件

这里我采用了 panda机械臂的功能包,首先进行该功能包的安装,通过命令:

sudo apt install ros-noetic-franka-description

        安装好之后呢就可以在目录/opt/ros/noetic/share/franka_description下找到要用的panda机械臂模型的xacro相关文件,这里在进行第二步之前呢,还需要对panda机械臂的xacro文件进行一点点修改,修改的目的主要是使模型具有gazebo仿真的相关标签和数据,这里可以直接使用我修改完成的。(需要安装franka-description包)

建议在moveit的工作空间下,新建一个功能包放置相关文件,比如

我在 moveit_ws/src下新建了panda_dual_arms的功能包,在panda_dual_arms/robot_description下放置了下面的模型文件left_arm.urdf

<?xml version="1.0" ?>
<robot name="left_arm">
  <link name="world"/>
  <joint name="left_base_to_world" type="fixed">
    <parent link="world"/>
    <child link="left_base"/>
    <origin rpy="0 0 0" xyz="0 0 0"/>
  </joint>
  <link name="left_base"/>
  <joint name="left_arm_joint_base" type="fixed">
    <parent link="left_base"/>
    <child link="left_arm_link0"/>
    <origin rpy="0 0 0" xyz="0 0 0"/>
  </joint>
  <!-- sub-link defining detailed meshes for collision with environment -->
  <link name="left_arm_link0">
    <visual>
      <geometry>
        <mesh filename="package://franka_description/meshes/visual/link0.dae"/>
      </geometry>
    </visual>
    <collision>
      <geometry>
        <mesh filename="package://franka_description/meshes/collision/link0.stl"/>
      </geometry>
    </collision>
    <inertial>
      <origin rpy="0 0 0" xyz="-0.041018 -0.00014 0.049974"/>
      <mass value="0.629769"/>
      <inertia ixx="0.00315" ixy="8.2904e-07" ixz="0.00015" iyy="0.00388" iyz="8.2299e-06" izz="0.004285"/>
    </inertial>
  </link>
  <!-- sub-link defining coarse geometries of real robot's internal self-collision -->
  <link name="left_arm_link0_sc">
  </link>
  <!-- fixed joint between both sub-links -->
  <joint name="left_arm_link0_sc_joint" type="fixed">
    <origin rpy="0 0 0"/>
    <parent link="left_arm_link0"/>
    <child link="left_arm_link0_sc"/>
  </joint>
  <!-- sub-link defining detailed meshes for collision with environment -->
  <link name="left_arm_link1">
    <visual>
      <geometry>
        <mesh filename="package://franka_description/meshes/visual/link1.dae"/>
      </geometry>
    </visual>
    <collision>
      <geometry>
        <mesh filename="package://franka_description/meshes/collision/link1.stl"/>
      </geometry>
    </collision>
    <inertial>
      <origin rpy="0 0 0" xyz="0.003875 0.002081 -0.04762"/>
      <mass value="4.970684"/>
      <inertia ixx="0.70337" ixy="-0.000139" ixz="0.006772" iyy="0.70661" iyz="0.019169" izz="0.009117"/>
    </inertial>
  </link>
  <!-- sub-link defining coarse geometries of real robot's internal self-collision -->
  <link name="left_arm_link1_sc">
  </link>
  <!-- fixed joint between both sub-links -->
  <joint name="left_arm_link1_sc_joint" type="fixed">
    <origin rpy="0 0 0"/>
    <parent link="left_arm_link1"/>
    <child link="left_arm_link1_sc"/>
  </joint>
  <joint name="left_arm_joint1" type="revolute">
    <origin rpy="0 0 0" xyz="0 0 0.333"/>
    <parent link="left_arm_link0"/>
    <child link="left_arm_link1"/>
    <axis xyz="0 0 1"/>
    <limit effort="87.0" lower="-2.8973" upper="2.8973" velocity="2.175"/>
    <safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-2.8973" soft_upper_limit="2.8973"/>
    <dynamics D="1" K="7000" damping="0.003" friction="0.0" mu_coulomb="0" mu_viscous="16"/>
  </joint>
  <!-- sub-link defining detailed meshes for collision with environment -->
  <link name="left_arm_link2">
    <visual>
      <geometry>
        <mesh filename="package://franka_description/meshes/visual/link2.dae"/>
      </geometry>
    </visual>
    <collision>
      <geometry>
        <mesh filename="package://franka_description/meshes/collision/link2.stl"/>
      </geometry>
    </collision>
    <inertial>
      <origin rpy="0 0 0" xyz="-0.003141 -0.02872  0.003495"/>
      <mass value="0.646926"/>
      <inertia ixx="0.007962" ixy="-0.003925" ixz="0.010254" iyy="0.02811" iyz="0.000704" izz="0.025995"/>
    </inertial>
  </link>
  <!-- sub-link defining coarse geometries of real robot's internal self-collision -->
  <link name="left_arm_link2_sc">
  </link>
  <!-- fixed joint between both sub-links -->
  <joint name="left_arm_link2_sc_joint" type="fixed">
    <origin rpy="0 0 0"/>
    <parent link="left_arm_link2"/>
    <child link="left_arm_link2_sc"/>
  </joint>
  <joint name="left_arm_joint2" type="revolute">
    <origin rpy="-1.5707963267948966 0 0" xyz="0 0 0"/>
    <parent link="left_arm_link1"/>
    <child link="left_arm_link2"/>
    <axis xyz="0 0 1"/>
    <limit effort="87.0" lower="-1.7628" upper="1.7628" velocity="2.175"/>
    <safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-1.7628" soft_upper_limit="1.7628"/>
    <dynamics D="1" K="7000" damping="0.003" friction="0.0" mu_coulomb="0" mu_viscous="16"/>
  </joint>
  <!-- sub-lin
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值