ROS机械臂——rviz+gazebo仿真环境搭建

纲要

在这里插入图片描述

ROS的控制插件

在这里插入图片描述
在这里插入图片描述

常用控制器

在这里插入图片描述

完善机器人模型

为link添加惯性参数和碰撞属性

在这里插入图片描述

为joint添加传动装置

在这里插入图片描述

添加gazebo控制插件

在这里插入图片描述

加载机器人模型

在这里插入图片描述

启动仿真环境

在这里插入图片描述

问题:gazebo加载的模型只有一层阴影

  • 解决方案:关闭虚拟机,设置虚拟机属性,显示器:关闭3D图形加速
  • 给虚拟机开启图形化加速: echo “export SVGA_VGPU10=0” >> ~/.bashrc

目录架构

在这里插入图片描述

gazebo.launch

<launch>
     <arg name ="debug" default="false" />
     <arg name ="gui" default="true" />
     <arg name ="paused" default="false" />
     <arg name ="use_sim_time" default="true" />
     <arg name ="headless" default="false" />

  <include file="$(find gazebo_ros)/launch/empty_world.launch" >
     <arg name ="debug" value="$(arg debug)" />
     <arg name ="gui" value="$(arg gui)" />
     <arg name ="paused" value="$(arg paused)" />
     <arg name ="use_sim_time" value="$(arg use_sim_time)" />
     <arg name ="headless" value="$(arg headless)" />
  </include>
  
  <node
    name="tf_footprint_base"
    pkg="tf"
    type="static_transform_publisher"
    args="0 0 0 0 0 0 base_link base_footprint 40" />
  

  <node
    name="fake_joint_calibration"
    pkg="rostopic"
    type="rostopic"
    args="pub /calibrated std_msgs/Bool true" />
   
   
   <!-- Load the URDF into the ROS Parameter Server -->
  <param
    name="robot_description"
    command="$(find xacro)/xacro --inorder '$(find ur3)/urdf/ur3.xacro'" />

    <!-- Run a python script to the send a service call to gazebo_ros to spawn a URDF robot -->
     <node
    name="urdf_spawner"
    pkg="gazebo_ros"
    type="spawn_model"
    respawn="false"
    output="screen"
    args=" -urdf -model ur3 -param robot_description" />
 
</launch>

ur3.xacro

<?xml version="1.0" encoding="utf-8"?>

<!-- This URDF was automatically created by SolidWorks to URDF Exporter! Originally created by Stephen Brawner (brawner@gmail.com) 
     Commit Version: 1.6.0-4-g7f85cfe  Build Version: 1.6.7995.38578
     For more information, please see http://wiki.ros.org/sw_urdf_exporter -->
<robot
  name="ur3" xmlns:xacro="http://ros.org/wiki/xacro" >
  
  <!-- Transmissions for ros_control -->
  <xacro:macro name="transmission_block" params="joint_name">
    <transmission name="trans1">
      <type>transmission_interface/SimpleTransmission</type>
      <joint name="${joint_name}">
        <hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
      </joint>
      <actuator name="motor1">
        <hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
        <mechanicalReduction>1</mechanicalReduction>
      </actuator>
    </transmission>
  </xacro:macro>

  <xacro:transmission_block joint_name="joint1"/>
  <xacro:transmission_block joint_name="joint2"/>
  <xacro:transmission_block joint_name="joint3"/>
  <xacro:transmission_block joint_name="joint4"/>
  <xacro:transmission_block joint_name="joint5"/>
  <xacro:transmission_block joint_name="joint6"/>
  
  <!-- ros_control plugin -->
  <gazebo>
     <plugin name="gazebo_ros_control" filename="libgazebo_ros_control.so">
        <robotNamespace>/probot_anno</robotNamespace>
        <robotSimType>gazebo_ros_control/DefaultRobotHWSim</robotSimType>
        <legacyModeNS>true</legacyModeNS>
     </plugin>
  </gazebo>

  
  <link
    name="base_link">
    <inertial>
      <origin
        xyz="2.105E-05 0.098059 -0.0036545"
        rpy="0 0 0" />
      <mass
        value="1.371" />
      <inertia
        ixx="0.0018288"
        ixy="4.4582E-07"
        ixz="-2.0556E-07"
        iyy="0.0019082"
        iyz="0.00013405"
        izz="0.0017646" />
    </inertial>
    <visual>
      <origin
        xyz="0 0 25"
        rpy="20 10 10" />
      <geometry>
        <mesh
          filename="package://ur3/meshes/base_link.STL" />    
      </geometry>
      <material
        name="">
        <color
          rgba="0.89804 0.91765 0.92941 1" />
      </material>
    </visual>
    <collision>
      <origin
        xyz="0 0 0"
        rpy="0 0 0" />
      <geometry>
        <mesh
          filename="package://ur3/meshes/base_link.STL" />
      </geometry>
    </collision>
  </link>
  <link
    name="link1">
    <inertial>
      <origin
        xyz="-6.5885E-06 0.055927 0.0072937"
        rpy="0 0 0" />
      <mass
        value="0.75521" />
      <inertia
        ixx="0.0010675"
        ixy="-9.4953E-08"
        ixz="1.0255E-07"
        iyy="0.00090525"
        iyz="-0.00013058"
        izz="0.00099003" />
    </inertial>
    <visual>
      <origin
        xyz="0 0 3"
        rpy="0 0 0" />
      <geometry>
        <mesh
          filename="package://ur3/meshes/link1.STL" />
      </geometry>
      <material
        name="">
        <color
          rgba="0.79216 0.81961 0.93333 1" />
      </material>
    </visual>
    <collision>
      <origin
        xyz="0 0 0"
        rpy="0 0 0" />
      <geometry>
        <mesh
          filename="package://ur3/meshes/link1.STL" />
      </geometry>
    </collision>
  </link>
  <joint
    name="joint1"
    type="revolute">
    <origin
      xyz="0 0 0.0844"
      rpy="1.5708 0 -3.1416" />
    <parent
      link="base_link" />
    <child
      link="link1" />
    <axis
      xyz="1 0 0" />
    <limit
      lower="-3.14"
      upper="3.14"
      effort="100"
      velocity="1" />
  </joint>
  <link
    name="link2">
    <inertial>
      <origin
        xyz="-2.6778E-06 0.060634 0.09327"
        rpy="0 0 0" />
      <mass
        value="1.6559" />
      <inertia
        ixx="0.0025822"
        ixy="-8.909E-08"
        ixz="1.019E-07"
        iyy="0.002419"
        iyz="-9.301E-05"
        izz="0.0016021" />
    </inertial>
    <visual>
      <origin
        xyz="0 0 5"
        rpy="0 10 0" />
      <geometry>
        <mesh
          filename="package://ur3/meshes/link2.STL" />
      </geometry>
      <material
        name="">
        <color
          rgba="0.79216 0.81961 0.93333 1" />
      </material>
    </visual>
    <collision>
      <origin
        xyz="0 0 0"
        rpy="0 0 0" />
      <geometry>
        <mesh
          filename="package://ur3/meshes/link2.STL" />
      </geometry>
    </collision>
  </link>
  <joint
    name="joint2"
    type="revolute">
    <origin
      xyz="0 0.0675 0.05235"
      rpy="1.5708 0 -3.1416" />
    <parent
      link="link1" />
    <child
      link="link2" />
    <axis
      xyz="1 0 0" />
    <limit
      lower="-3.14"
      upper="3.14"
      effort="100"
      velocity="1" />
  </joint>
  <link
    name="link3">
    <inertial>
      <origin
        xyz="-0.0050453 -0.11121 3.4154E-06"
        rpy="0 0 0" />
      <mass
        value="0.96204" />
      <inertia
        ixx="0.0010146"
        ixy="4.5981E-05"
        ixz="6.2628E-08"
        iyy="0.00054242"
        iyz="-4.3697E-08"
        izz="0.0010724" />
    </inertial>
    <visual>
      <origin
        xyz="0 16 10"
        rpy="30 10 0" />
      <geometry>
        <mesh
          filename="package://ur3/meshes/link3.STL" />
      </geometry>
      <material
        name="">
        <color
          rgba="1 10 13 1" />
      </material>
    </visual>
    <collision>
      <origin
        xyz="0 0 0"
        rpy="0 0 0" />
      <geometry>
        <mesh
          filename="package://ur3/meshes/link3.STL" />
      </geometry>
    </collision>
  </link>
  <joint
    name="joint3"
    type="revolute">
    <origin
      xyz="0 -0.02535 0.24365"
      rpy="-1.5708 0 -1.5708" />
    <parent
      link="link2" />
    <child
      link="link3" />
    <axis
      xyz="1 0 0" />
    <limit
      lower="-3.14"
      upper="3.14"
      effort="100"
      velocity="1" />
  </joint>
  <link
    name="link4">
    <inertial>
      <origin
        xyz="0.0059208 -0.0007977 2.6694E-07"
        rpy="0 0 0" />
      <mass
        value="0.32519" />
      <inertia
        ixx="0.00019459"
        ixy="1.8337E-05"
        ixz="1.3898E-10"
        iyy="0.00019909"
        iyz="1.2329E-09"
        izz="0.00022621" />
    </inertial>
    <visual>
      <origin
        xyz="0 0 0"
        rpy="0 0 0" />
      <geometry>
        <mesh
          filename="package://ur3/meshes/link4.STL" />
      </geometry>
      <material
        name="">
        <color
          rgba="1 1 1 1" />
      </material>
    </visual>
    <collision>
      <origin
        xyz="0 0 0"
        rpy="0 0 0" />
      <geometry>
        <mesh
          filename="package://ur3/meshes/link4.STL" />
      </geometry>
    </collision>
  </link>
  <joint
    name="joint4"
    type="revolute">
    <origin
      xyz="-0.0834 -0.213 0"
      rpy="-3.1416 0 0" />
    <parent
      link="link3" />
    <child
      link="link4" />
    <axis
      xyz="1 0 0" />
    <limit
      lower="-3.14"
      upper="3.14"
      effort="100"
      velocity="1" />
  </joint>
  <link
    name="link5">
    <inertial>
      <origin
        xyz="0.0059208 0.00079771 -2.3761E-07"
        rpy="0 0 0" />
      <mass
        value="0.32519" />
      <inertia
        ixx="0.00019459"
        ixy="-1.8338E-05"
        ixz="-2.0382E-10"
        iyy="0.00019909"
        iyz="1.211E-09"
        izz="0.00022621" />
    </inertial>
    <visual>
      <origin
        xyz="0 0 0"
        rpy="0 0 0" />
      <geometry>
        <mesh
          filename="package://ur3/meshes/link5.STL" />
      </geometry>
      <material
        name="">
        <color
          rgba="1 1 1 1" />
      </material>
    </visual>
    <collision>
      <origin
        xyz="0 0 0"
        rpy="0 0 0" />
      <geometry>
        <mesh
          filename="package://ur3/meshes/link5.STL" />
      </geometry>
    </collision>
  </link>
  <joint
    name="joint5"
    type="revolute">
    <origin
      xyz="0 0.0834 0"
      rpy="0 0 -1.5708" />
    <parent
      link="link4" />
    <child
      link="link5" />
    <axis
      xyz="1 0 0" />
    <limit
      lower="-3.14"
      upper="3.14"
      effort="100"
      velocity="1" />
  </joint>
  <link
    name="link6">
    <inertial>
      <origin
        xyz="4.7334E-10 0.00010334 -0.021073"
        rpy="0 0 0" />
      <mass
        value="0.11536" />
      <inertia
        ixx="4.2469E-05"
        ixy="1.5688E-12"
        ixz="1.7329E-12"
        iyy="4.2681E-05"
        iyz="1.0324E-07"
        izz="5.9067E-05" />
    </inertial>
    <visual>
      <origin
        xyz="0 0 0"
        rpy="0 0 0" />
      <geometry>
        <mesh
          filename="package://ur3/meshes/link6.STL" />
      </geometry>
      <material
        name="">
        <color
          rgba="1 1 1 1" />
      </material>
    </visual>
    <collision>
      <origin
        xyz="0 0 0"
        rpy="0 0 0" />
      <geometry>
        <mesh
          filename="package://ur3/meshes/link6.STL" />
      </geometry>
    </collision>
  </link>
  <joint
    name="joint6"
    type="revolute">
    <origin
      xyz="0 -0.0409 0"
      rpy="1.5708 0.2207 3.1416" />
    <parent
      link="link5" />
    <child
      link="link6" />
    <axis
      xyz="1 0 0" />
    <limit
      lower="-3.14"
      upper="3.14"
      effort="100"
      velocity="1" />
  </joint>
</robot>

MoveIt + Gazebo 仿真

在这里插入图片描述

框架

在这里插入图片描述

Trajectory

在物理学中,“trajectory” 主要指:

射体在空中飞行的路径,例如子弹、导弹、行星或卫星的轨道。
运动物体在受力作用下的运动路径,比如抛体运动的曲线。
在数学领域,尤其是几何学中,“trajectory” 可以指:

一个点随时间变化而形成的曲线,这条曲线可以由一个或多个参数方程来描述。
在更广泛的科学和工程领域,“trajectory” 也可以用来描述:

任何系统或过程的发展路径,例如一个项目、职业生涯或经济趋势的历程。
在机器人学和自动化中,“trajectory” 指的是机器人或机械臂在执行任务时所遵循的预定路径。
在航空和航天工程中,它描述飞机或航天器的飞行路径。
在社会学和心理学中,“trajectory” 可能指的是一个人或群体在一段时间内的发展路径或变迁趋势。

总之,“trajectory” 是一个跨学科的概念,用于描述任何种类的动态路径或过程的发展方向。

Joint Trajectory Controller

在这里插入图片描述

Joint State Controller

在这里插入图片描述

Follow Joint Trajectory

在这里插入图片描述

顶层launch文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

数据示例

在这里插入图片描述

可视化显示各轴运动状态

在这里插入图片描述

小结

在这里插入图片描述

框架图

在这里插入图片描述

相关概念

fake_execution_type

在机器人技术和ROS(Robot Operating System)的上下文中,fake_execution_type 通常是指一种控制器的执行模式,这种模式不会向实际的硬件发送命令,而是模拟硬件的响应。这种类型的执行通常用于仿真环境,以便在不使用实际机器人的情况下测试和调试控制逻辑。

当使用fake_execution_type时,控制器的行为就像是在控制真实的硬件,但实际上它只是在内存中模拟硬件的状态变化。这意味着所有的关节运动、抓取动作或其他硬件操作都会被虚拟执行,而不影响现实世界中的机器人。

这种模式对于开发和验证控制算法非常有用,因为它允许工程师在安全的环境中进行测试,避免对昂贵的硬件造成潜在损害,同时还可以在物理机器人不可用时进行持续开发。

您好!对于在ROS中进行机械臂Gazebo仿真环境中的抓取任务,您可以按照以下步骤进行操作: 1. 安装相关软件包:首先,您需要安装ROSGazebo仿真环境。确保您的系统中已经正确安装了ROSGazebo,并且能够正常工作。 2. 配置机械臂模型:在Gazebo中进行机械臂仿真之前,您需要加载机械臂的模型。可以使用URDF或SDF格式的文件来描述机械臂的模型,并将其放置在相应的文件夹中。 3. 编写控制程序:您需要编写控制程序来控制机械臂的运动和抓取动作。可以使用ROS中的MoveIt等库来简化控制和规划操作。 4. 设置仿真场景:在Gazebo中创建一个仿真场景,包括放置物体和设定物体的属性。您可以使用Gazebo提供的插件来实现物体的抓取和放置动作。 5. 启动仿真环境:使用ROS命令启动Gazebo仿真环境,并加载机械臂模型和仿真场景。确保机械臂和传感器的连接正确,并且能够接收和发送数据。 6. 进行抓取任务:通过发送控制指令来控制机械臂进行抓取任务。您可以使用ROS提供的相关工具和库来实现机械臂的运动规划和控制。 以上是一个大致的步骤,具体的实现细节会根据您使用的机械臂仿真环境有所不同。您可以参考ROSGazebo的官方文档以及相关的教程和示例代码来更详细地了解和实践机械臂Gazebo仿真中的抓取任务。希望对您有所帮助!如果您有任何问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值