zoukankan      html  css  js  c++  java
  • 使用solidworks导出URDF模型,转换成xacro模型,并在rviz 和 gazebo中显示并控制

    版本:

    ros:Kinetic

    solidworks:2016

    一    使用solidworks2016导出URDF模型

               使用sw2urdfSetup插件将机器人模型导出为URDF文件,插件下载地址:https://github.com/ros/solidworks_urdf_exporter/releases

       导出教程:https://www.bilibili.com/video/av56651666?from=search&seid=2948765959330396238

               导出的是轮椅模型可以参考经典的差速模型,前面两个驱动轮,后面两个随动轮,以及一个激光雷达,需要手动设置坐标系和参考轴,joint模式选择continues.

    导出之后生成的再rviz中显示的display.launch和gazebo.launch文件.

    display.launch

    <launch>
      <arg
        name="model" />
      <arg
        name="gui"
        default="False" />    <!--若要打开gui插件需要把Flase修改为True-->
      <param
        name="robot_description"
        textfile="$(find smartwheelchair_model)/urdf/smartwheelchair_model.urdf" />
      <param
        name="use_gui"
        value="$(arg gui)" />
      <node
        name="joint_state_publisher"
        pkg="joint_state_publisher"
        type="joint_state_publisher" />    
      <node
        name="robot_state_publisher"
        pkg="robot_state_publisher"
        type="state_publisher" />
      <node
        name="rviz"
        pkg="rviz"
        type="rviz"
        args="-d $(find smartwheelchair_model)/urdf.rviz" />
    </launch>

    gazebo.launch

    <launch>
      <include
        file="$(find gazebo_ros)/launch/empty_world.launch" />
      <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="spawn_model"
        pkg="gazebo_ros"
        type="spawn_model"
        args="-file $(find smartwheelchair_model)/urdf/smartwheelchair_model.urdf -urdf -model smartwheelchair_model"
        output="screen" />
      <node
        name="fake_joint_calibration"
        pkg="rostopic"
        type="rostopic"
        args="pub /calibrated std_msgs/Bool true" />
    </launch>

    运行gazebo.launch会出现轮椅从空中掉下来的现象,原因有两种可能: 1   base_footprint(base_link在地面的投影)并没有设置,不知道为什么这里的gazebo.launch直接使用了;  2 没有添加controller;

    个人感觉第二种可能性比较大.

    urdf文件

    <?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.5.1-0-g916b5db  Build Version: 1.5.7152.31018
         For more information, please see http://wiki.ros.org/sw_urdf_exporter -->
    <robot
      name="smartwheelchair_model">
      <link
        name="base_link">
        <inertial>
          <origin
            xyz="0.071793651840574 -0.0111022819034436 -0.165475510614961"
            rpy="0 0 0" />
          <mass
            value="26.2736382176516" />
          <inertia
            ixx="2.53902638074258"
            ixy="0.105926700574816"
            ixz="0.672576086778549"
            iyy="2.61400293250425"
            iyz="0.117880225409204"
            izz="2.26655952469972" />
        </inertial>
        <visual>
          <origin
            xyz="0 0 0"
            rpy="0 0 0" />
          <geometry>
            <mesh
              filename="package://smartwheelchair_model/meshes/base_link.STL" />
          </geometry>
          <material
            name="">
            <color
              rgba="0.666666666666667 0.698039215686274 0.768627450980392 1" />
          </material>
        </visual>
        <collision>
          <origin
            xyz="0 0 0"
            rpy="0 0 0" />
          <geometry>
            <mesh
              filename="package://smartwheelchair_model/meshes/base_link.STL" />
          </geometry>
        </collision>
      </link>
      <link
        name="front_left_link">
        <inertial>
          <origin
            xyz="-5.98826543907194E-14 -0.0294979270265525 -1.73416836446449E-13"
            rpy="0 0 0" />
          <mass
            value="2.73380732959739" />
          <inertia
            ixx="0.0540175535224848"
            ixy="-9.37490464830404E-14"
            ixz="5.70463674728184E-14"
            iyy="0.105827632352094"
            iyz="-2.91387363698334E-14"
            izz="0.0540175535219555" />
        </inertial>
        <visual>
          <origin
            xyz="0 0 0"
            rpy="0 0 0" />
          <geometry>
            <mesh
              filename="package://smartwheelchair_model/meshes/front_left_link.STL" />
          </geometry>
          <material
            name="">
            <color
              rgba="0.294117647058824 0.294117647058824 0.294117647058824 1" />
          </material>
        </visual>
        <collision>
          <origin
            xyz="0 0 0"
            rpy="0 0 0" />
          <geometry>
            <mesh
              filename="package://smartwheelchair_model/meshes/front_left_link.STL" />
          </geometry>
        </collision>
      </link>
      <joint
        name="front_left_joint"
        type="continuous">
        <origin
          xyz="0.125 0.32744 -0.32024"
          rpy="0 0 0" />
        <parent
          link="base_link" />
        <child
          link="front_left_link" />
        <axis
          xyz="0 1 0" />
        <limit
          lower="-180"
          upper="180"
          effort="0"
          velocity="0" />
      </joint>
      <link
        name="rear_left_link">
        <inertial>
          <origin
            xyz="0.00443883274698265 -0.159000141701653 -0.0610820964989148"
            rpy="0 0 0" />
          <mass
            value="0.218543419099177" />
          <inertia
            ixx="0.00138257528279561"
            ixy="4.94760179596061E-05"
            ixz="3.77546054156748E-05"
            iyy="0.000561948581245053"
            iyz="-0.000582727419998246"
            izz="0.00107345266613901" />
        </inertial>
        <visual>
          <origin
            xyz="0 0 0"
            rpy="0 0 0" />
          <geometry>
            <mesh
              filename="package://smartwheelchair_model/meshes/rear_left_link.STL" />
          </geometry>
          <material
            name="">
            <color
              rgba="0.250980392156863 0.250980392156863 0.250980392156863 1" />
          </material>
        </visual>
        <collision>
          <origin
            xyz="0 0 0"
            rpy="0 0 0" />
          <geometry>
            <mesh
              filename="package://smartwheelchair_model/meshes/rear_left_link.STL" />
          </geometry>
        </collision>
      </link>
      <joint
        name="rear_left_joint"
        type="continuous">
        <origin
          xyz="-0.40155 0.26744 -0.20624"
          rpy="1.5708 0 1.7371" />
        <parent
          link="base_link" />
        <child
          link="rear_left_link" />
        <axis
          xyz="0 1 0" />
      </joint>
      <link
        name="wheel_rear_left_link">
        <inertial>
          <origin
            xyz="0.00653640490648077 -0.0389351446936917 6.97854693476607E-09"
            rpy="0 0 0" />
          <mass
            value="2.05874206334677" />
          <inertia
            ixx="0.0145592695258203"
            ixy="-0.00225630762393329"
            ixz="-2.72157388421748E-09"
            iyy="0.0276205421886138"
            iyz="-4.71240874480446E-10"
            izz="0.014180480200489" />
        </inertial>
        <visual>
          <origin
            xyz="0 0 0"
            rpy="0 0 0" />
          <geometry>
            <mesh
              filename="package://smartwheelchair_model/meshes/wheel_rear_left_link.STL" />
          </geometry>
          <material
            name="">
            <color
              rgba="0.294117647058824 0.294117647058824 0.294117647058824 1" />
          </material>
        </visual>
        <collision>
          <origin
            xyz="0 0 0"
            rpy="0 0 0" />
          <geometry>
            <mesh
              filename="package://smartwheelchair_model/meshes/wheel_rear_left_link.STL" />
          </geometry>
        </collision>
      </link>
      <joint
        name="wheel_rear_left_joint"
        type="continuous">
        <origin
          xyz="0.03948 -0.21 -0.1"
          rpy="1.5708 -1.4045 3.1416" />
        <parent
          link="rear_left_link" />
        <child
          link="wheel_rear_left_link" />
        <axis
          xyz="-0.16556 0.9862 0" />
        <limit
          lower="-180"
          upper="180"
          effort="0"
          velocity="0" />
      </joint>
      <link
        name="front_right_link">
        <inertial>
          <origin
            xyz="1.32630018079283E-13 0.0294979270265526 -1.26731958260962E-13"
            rpy="0 0 0" />
          <mass
            value="2.73380732959733" />
          <inertia
            ixx="0.0540175535224209"
            ixy="-9.67321655236162E-14"
            ixz="1.8160422674322E-13"
            iyy="0.105827632352093"
            iyz="-1.67393860339268E-14"
            izz="0.0540175535220183" />
        </inertial>
        <visual>
          <origin
            xyz="0 0 0"
            rpy="0 0 0" />
          <geometry>
            <mesh
              filename="package://smartwheelchair_model/meshes/front_right_link.STL" />
          </geometry>
          <material
            name="">
            <color
              rgba="0.866666666666667 0.909803921568627 1 1" />
          </material>
        </visual>
        <collision>
          <origin
            xyz="0 0 0"
            rpy="0 0 0" />
          <geometry>
            <mesh
              filename="package://smartwheelchair_model/meshes/front_right_link.STL" />
          </geometry>
        </collision>
      </link>
      <joint
        name="front_right_joint"
        type="continuous">
        <origin
          xyz="0.125 -0.32154 -0.32024"
          rpy="0 0 0" />
        <parent
          link="base_link" />
        <child
          link="front_right_link" />
        <axis
          xyz="0 -1 0" />
        <limit
          lower="-180"
          upper="180"
          effort="0"
          velocity="0" />
      </joint>
      <link
        name="rear_right_link">
        <inertial>
          <origin
            xyz="-0.00443895322170662 -0.159000141931278 -0.0610820981859959"
            rpy="0 0 0" />
          <mass
            value="0.218543419196504" />
          <inertia
            ixx="0.00138257531626846"
            ixy="-4.94729909470212E-05"
            ixz="-3.77531936561614E-05"
            iyy="0.000561950359239888"
            iyz="-0.000582722657630795"
            izz="0.00107345045383076" />
        </inertial>
        <visual>
          <origin
            xyz="0 0 0"
            rpy="0 0 0" />
          <geometry>
            <mesh
              filename="package://smartwheelchair_model/meshes/rear_right_link.STL" />
          </geometry>
          <material
            name="">
            <color
              rgba="0.250980392156863 0.250980392156863 0.250980392156863 1" />
          </material>
        </visual>
        <collision>
          <origin
            xyz="0 0 0"
            rpy="0 0 0" />
          <geometry>
            <mesh
              filename="package://smartwheelchair_model/meshes/rear_right_link.STL" />
          </geometry>
        </collision>
      </link>
      <joint
        name="rear_right_joint"
        type="continuous">
        <origin
          xyz="-0.40155 -0.26154 -0.20624"
          rpy="1.5708 0 1.7371" />
        <parent
          link="base_link" />
        <child
          link="rear_right_link" />
        <axis
          xyz="0 -1 0" />
        <limit
          lower="-180"
          upper="180"
          effort="0"
          velocity="0" />
      </joint>
      <link
        name="wheel_rear_right_link">
        <inertial>
          <origin
            xyz="-0.00653640348729612 0.0389351469670967 9.15520717570395E-09"
            rpy="0 0 0" />
          <mass
            value="2.05874178462337" />
          <inertia
            ixx="0.0145592650917787"
            ixy="-0.00225630804394482"
            ixz="-9.8275687204457E-10"
            iyy="0.02762054030789"
            iyz="-9.60855468748932E-11"
            izz="0.0141804828642344" />
        </inertial>
        <visual>
          <origin
            xyz="0 0 0"
            rpy="0 0 0" />
          <geometry>
            <mesh
              filename="package://smartwheelchair_model/meshes/wheel_rear_right_link.STL" />
          </geometry>
          <material
            name="">
            <color
              rgba="0.294117647058824 0.294117647058824 0.294117647058824 1" />
          </material>
        </visual>
        <collision>
          <origin
            xyz="0 0 0"
            rpy="0 0 0" />
          <geometry>
            <mesh
              filename="package://smartwheelchair_model/meshes/wheel_rear_right_link.STL" />
          </geometry>
        </collision>
      </link>
      <joint
        name="wheel_rear_right_joint"
        type="revolute">
        <origin
          xyz="-0.03948 -0.21 -0.1"
          rpy="1.5708 -1.4045 3.1416" />
        <parent
          link="rear_right_link" />
        <child
          link="wheel_rear_right_link" />
        <axis
          xyz="0.16556 -0.9862 0" />
        <limit
          lower="-180"
          upper="180"
          effort="0"
          velocity="0" />
      </joint>
      <link
        name="laser_Link">
        <inertial>
          <origin
            xyz="0.065791191331278 -9.1747807187873E-10 -0.0926765202077648"
            rpy="0 0 0" />
          <mass
            value="6.86176515805913" />
          <inertia
            ixx="0.0631299703695162"
            ixy="-2.88721826247212E-10"
            ixz="-0.000562191972859836"
            iyy="0.03676014992034"
            iyz="-4.08726766416169E-10"
            izz="0.046630206646977" />
        </inertial>
        <visual>
          <origin
            xyz="0 0 0"
            rpy="0 0 0" />
          <geometry>
            <mesh
              filename="package://smartwheelchair_model/meshes/laser_Link.STL" />
          </geometry>
          <material
            name="">
            <color
              rgba="0.250980392156863 0.250980392156863 0.250980392156863 1" />
          </material>
        </visual>
        <collision>
          <origin
            xyz="0 0 0"
            rpy="0 0 0" />
          <geometry>
            <mesh
              filename="package://smartwheelchair_model/meshes/laser_Link.STL" />
          </geometry>
        </collision>
      </link>
      <joint
        name="laser_joint"
        type="fixed">
        <origin
          xyz="-0.42295 0.0029489 -0.030238"
          rpy="0 0 0" />
        <parent
          link="base_link" />
        <child
          link="laser_Link" />
        <axis
          xyz="0 0 0" />
      </joint>
    </robot>

    二  修改为xacro文件

        修改思路: 添加 base_footprint 作为base_link的parent link, 在gazebo运行的xacro文件中加入gazebo_ros_controller,将轮椅本体和激光雷达进行宏定义.

        修改后的轮椅结构:

    1. 在rviz 中试用的xacro文件 

    轮椅主体:smartwheelchair_base.xacro,跟之前没有太大变化,加入了base_footprint和宏定义.

    <?xml version="1.0" encoding="utf-8"?>
    <robot name="smartwheelchair_model" xmlns:xacro="http://www.ros.org/wiki/xacro" >
        <!-- PROPERTY LIST -->
        <xacro:property name="M_PI" value="3.1415926"/>
        <xacro:property name="wheel_radius" value="0.2838162"/>
        <xacro:property name="wheel_distance" value="0.64899"/>
    
    <xacro:macro name="mbot_base">
     <!-- smartwheelchair's link and joint -->
        <link
        name="base_link">
        <inertial>
          <origin
            xyz="0 0 0.53122"
            rpy="0 0 0" />
          <mass
            value="26.2736382176516" />
          <inertia
            ixx="2.53902638074258"
            ixy="0.105926700574816"
            ixz="0.672576086778549"
            iyy="2.61400293250425"
            iyz="0.117880225409204"
            izz="2.26655952469972" />
        </inertial>
        <visual>
          <origin
            xyz="0 0 0"
            rpy="0 0 0" />
          <geometry>
            <mesh
              filename="package://smartwheelchair_model/meshes/base_link.STL" />
          </geometry>
          <material
            name="">
            <color
              rgba="0.666666666666667 0.698039215686274 0.768627450980392 1" />
          </material>
        </visual>
        <collision>
          <origin
            xyz="0 0 0"
            rpy="0 0 0" />
          <geometry>
            <mesh
              filename="package://smartwheelchair_model/meshes/base_link.STL" />
          </geometry>
        </collision>
      </link>
      <link
        name="front_left_link">
        <inertial>
          <origin
            xyz="-5.98826543907194E-14 -0.0294979270265525 -1.73416836446449E-13"
            rpy="0 0 0" />
          <mass
            value="2.73380732959739" />
          <inertia
            ixx="0.0540175535224848"
            ixy="-9.37490464830404E-14"
            ixz="5.70463674728184E-14"
            iyy="0.105827632352094"
            iyz="-2.91387363698334E-14"
            izz="0.0540175535219555" />
        </inertial>
        <visual>
          <origin
            xyz="0 0 0"
            rpy="0 0 0" />
          <geometry>
            <mesh
              filename="package://smartwheelchair_model/meshes/front_left_link.STL" />
          </geometry>
          <material
            name="">
            <color
              rgba="0.294117647058824 0.294117647058824 0.294117647058824 1" />
          </material>
        </visual>
        <collision>
          <origin
            xyz="0 0 0"
            rpy="0 0 0" />
          <geometry>
            <mesh
              filename="package://smartwheelchair_model/meshes/front_left_link.STL" />
          </geometry>
        </collision>
      </link>
      <joint
        name="front_left_joint"
        type="continuous">
        <origin
          xyz="0.125 0.32744 -0.32024"
          rpy="0 0 0" />
        <parent
          link="base_link" />
        <child
          link="front_left_link" />
        <axis
          xyz="0 1 0" />
        <limit
          lower="-180"
          upper="180"
          effort="0"
          velocity="0" />
      </joint>
      <link
        name="rear_left_link">
        <inertial>
          <origin
            xyz="0.00443883274698265 -0.159000141701653 -0.0610820964989148"
            rpy="0 0 0" />
          <mass
            value="0.218543419099177" />
          <inertia
            ixx="0.00138257528279561"
            ixy="4.94760179596061E-05"
            ixz="3.77546054156748E-05"
            iyy="0.000561948581245053"
            iyz="-0.000582727419998246"
            izz="0.00107345266613901" />
        </inertial>
        <visual>
          <origin
            xyz="0 0 0"
            rpy="0 0 0" />
          <geometry>
            <mesh
              filename="package://smartwheelchair_model/meshes/rear_left_link.STL" />
          </geometry>
          <material
            name="">
            <color
              rgba="0.250980392156863 0.250980392156863 0.250980392156863 1" />
          </material>
        </visual>
        <collision>
          <origin
            xyz="0 0 0"
            rpy="0 0 0" />
          <geometry>
            <mesh
              filename="package://smartwheelchair_model/meshes/rear_left_link.STL" />
          </geometry>
        </collision>
      </link>
      <joint
        name="rear_left_joint"
        type="continuous">
        <origin
          xyz="-0.40155 0.26744 -0.20624"
          rpy="1.5708 0 1.7371" />
        <parent
          link="base_link" />
        <child
          link="rear_left_link" />
        <axis
          xyz="0 1 0" />
      </joint>
      <link
        name="wheel_rear_left_link">
        <inertial>
          <origin
            xyz="0.00653640490648077 -0.0389351446936917 6.97854693476607E-09"
            rpy="0 0 0" />
          <mass
            value="2.05874206334677" />
          <inertia
            ixx="0.0145592695258203"
            ixy="-0.00225630762393329"
            ixz="-2.72157388421748E-09"
            iyy="0.0276205421886138"
            iyz="-4.71240874480446E-10"
            izz="0.014180480200489" />
        </inertial>
        <visual>
          <origin
            xyz="0 0 0"
            rpy="0 0 0" />
          <geometry>
            <mesh
              filename="package://smartwheelchair_model/meshes/wheel_rear_left_link.STL" />
          </geometry>
          <material
            name="">
            <color
              rgba="0.294117647058824 0.294117647058824 0.294117647058824 1" />
          </material>
        </visual>
        <collision>
          <origin
            xyz="0 0 0"
            rpy="0 0 0" />
          <geometry>
            <mesh
              filename="package://smartwheelchair_model/meshes/wheel_rear_left_link.STL" />
          </geometry>
        </collision>
      </link>
      <joint
        name="wheel_rear_left_joint"
        type="continuous">
        <origin
          xyz="0.03948 -0.21 -0.1"
          rpy="1.5708 -1.4045 3.1416" />
        <parent
          link="rear_left_link" />
        <child
          link="wheel_rear_left_link" />
        <axis
          xyz="-0.16556 0.9862 0" />
        <limit
          lower="-180"
          upper="180"
          effort="0"
          velocity="0" />
      </joint>
      <link
        name="front_right_link">
        <inertial>
          <origin
            xyz="1.32630018079283E-13 0.0294979270265526 -1.26731958260962E-13"
            rpy="0 0 0" />
          <mass
            value="2.73380732959733" />
          <inertia
            ixx="0.0540175535224209"
            ixy="-9.67321655236162E-14"
            ixz="1.8160422674322E-13"
            iyy="0.105827632352093"
            iyz="-1.67393860339268E-14"
            izz="0.0540175535220183" />
        </inertial>
        <visual>
          <origin
            xyz="0 0 0"
            rpy="0 0 0" />
          <geometry>
            <mesh
              filename="package://smartwheelchair_model/meshes/front_right_link.STL" />
          </geometry>
          <material
            name="">
            <color
              rgba="0.294117647058824 0.294117647058824 0.294117647058824 1" />
          </material>
        </visual>
        <collision>
          <origin
            xyz="0 0 0"
            rpy="0 0 0" />
          <geometry>
            <mesh
              filename="package://smartwheelchair_model/meshes/front_right_link.STL" />
          </geometry>
        </collision>
      </link>
      <joint
        name="front_right_joint"
        type="continuous">
        <origin
          xyz="0.125 -0.32154 -0.32024"
          rpy="0 0 0" />
        <parent
          link="base_link" />
        <child
          link="front_right_link" />
        <axis
          xyz="0 -1 0" />
        <limit
          lower="-180"
          upper="180"
          effort="0"
          velocity="0" />
      </joint>
      <link
        name="rear_right_link">
        <inertial>
          <origin
            xyz="-0.00443895322170662 -0.159000141931278 -0.0610820981859959"
            rpy="0 0 0" />
          <mass
            value="0.218543419196504" />
          <inertia
            ixx="0.00138257531626846"
            ixy="-4.94729909470212E-05"
            ixz="-3.77531936561614E-05"
            iyy="0.000561950359239888"
            iyz="-0.000582722657630795"
            izz="0.00107345045383076" />
        </inertial>
        <visual>
          <origin
            xyz="0 0 0"
            rpy="0 0 0" />
          <geometry>
            <mesh
              filename="package://smartwheelchair_model/meshes/rear_right_link.STL" />
          </geometry>
          <material
            name="">
            <color
              rgba="0.250980392156863 0.250980392156863 0.250980392156863 1" />
          </material>
        </visual>
        <collision>
          <origin
            xyz="0 0 0"
            rpy="0 0 0" />
          <geometry>
            <mesh
              filename="package://smartwheelchair_model/meshes/rear_right_link.STL" />
          </geometry>
        </collision>
      </link>
      <joint
        name="rear_right_joint"
        type="continuous">
        <origin
          xyz="-0.40155 -0.26154 -0.20624"
          rpy="1.5708 0 1.7371" />
        <parent
          link="base_link" />
        <child
          link="rear_right_link" />
        <axis
          xyz="0 -1 0" />
        <limit
          lower="-180"
          upper="180"
          effort="0"
          velocity="0" />
      </joint>
      <link
        name="wheel_rear_right_link">
        <inertial>
          <origin
            xyz="-0.00653640348729612 0.0389351469670967 9.15520717570395E-09"
            rpy="0 0 0" />
          <mass
            value="2.05874178462337" />
          <inertia
            ixx="0.0145592650917787"
            ixy="-0.00225630804394482"
            ixz="-9.8275687204457E-10"
            iyy="0.02762054030789"
            iyz="-9.60855468748932E-11"
            izz="0.0141804828642344" />
        </inertial>
        <visual>
          <origin
            xyz="0 0 0"
            rpy="0 0 0" />
          <geometry>
            <mesh
              filename="package://smartwheelchair_model/meshes/wheel_rear_right_link.STL" />
          </geometry>
          <material
            name="">
            <color
              rgba="0.294117647058824 0.294117647058824 0.294117647058824 1" />
          </material>
        </visual>
        <collision>
          <origin
            xyz="0 0 0"
            rpy="0 0 0" />
          <geometry>
            <mesh
              filename="package://smartwheelchair_model/meshes/wheel_rear_right_link.STL" />
          </geometry>
        </collision>
      </link>
      <joint
        name="wheel_rear_right_joint"
        type="revolute">
        <origin
          xyz="-0.03948 -0.21 -0.1"
          rpy="1.5708 -1.4045 3.1416" />
        <parent
          link="rear_right_link" />
        <child
          link="wheel_rear_right_link" />
        <axis
          xyz="0.16556 -0.9862 0" />
        <limit
          lower="-180"
          upper="180"
          effort="0"
          velocity="0" />
      </joint>
    
               <link name="base_footprint">
                <visual>
                    <origin xyz="0 0 0" rpy="0 0 0" />
                    <geometry>
                        <box size="0.001 0.001 0.001" />
                    </geometry>
                </visual>
            </link>
    
            <joint name="base_footprint_joint" type="fixed">
                <origin xyz="0 0 0.53122" rpy="0 0 0" />        
                <parent link="base_footprint"/>
                <child link="base_link" />
            </joint>
     </xacro:macro>
      
    </robot>

    雷达 lidar.xacro

    <?xml version="1.0"?>
    <robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="laser">
       
        <xacro:macro name="rplidar" params="prefix:=laser">
            <!-- Create laser reference frame -->
    <link
        name="${prefix}_Link">
        <inertial>
          <origin
            xyz="0.065791191331278 -9.1747807187873E-10 -0.0926765202077648"
            rpy="0 0 0" />
          <mass
            value="0.686176515805913" />
          <inertia
            ixx="0.0631299703695162"
            ixy="-2.88721826247212E-10"
            ixz="-0.000562191972859836"
            iyy="0.03676014992034"
            iyz="-4.08726766416169E-10"
            izz="0.046630206646977" />
        </inertial>
        <visual>
          <origin
            xyz="0 0 0"
            rpy="0 0 0" />
          <geometry>
            <mesh
              filename="package://smartwheelchair_model/meshes/laser_Link.STL" />
          </geometry>
          <material
            name="">
            <color
              rgba="0.250980392156863 0.250980392156863 0.250980392156863 1" />
          </material>
        </visual>
        <collision>
          <origin
            xyz="0 0 0"
            rpy="0 0 0" />
          <geometry>
            <mesh
              filename="package://smartwheelchair_model/meshes/laser_Link.STL" />
          </geometry>
        </collision>
      </link>
        </xacro:macro>
    </robot>

    轮椅总体:smartwheelchair_base_with_laser.xacro

    <?xml version="1.0"?>
    <robot name="arm" xmlns:xacro="http://www.ros.org/wiki/xacro">
    
        <xacro:include filename="$(find smartwheelchair_model)/urdf/xacro/smartwheelchair_base.xacro" />
        <xacro:include filename="$(find smartwheelchair_model)/urdf/xacro/sensors/lidar.xacro" />
    
        <!-- lidar -->
     <joint
        name="laser_joint"
        type="fixed">
        <origin
          xyz="-0.42295 0.0029489 -0.030238"
          rpy="0 0 0" />
        <parent
          link="base_link" />
        <child
          link="laser_Link" />
        <axis
          xyz="0 0 0" />
      </joint>
    
        <xacro:rplidar prefix="laser"/>
    
        <mbot_base/>
    
    </robot>

    2. 在gazebo中使用的xacro文件

    在轮椅主体的smartwheelchair_base.xacro的基础上添加,形成smartwheelchair_base_gazebo.xacro

     <!-- link_color -->
       <gazebo reference="base_link">
            <material>Gazebo/Gray</material>
      </gazebo>
    
       <gazebo reference="front_left_link">
            <material>Gazebo/Black</material>
      </gazebo>
    
       <gazebo reference="front_right_link">
            <material>Gazebo/Black</material>
      </gazebo>
    
       <gazebo reference="rear_left_link">
            <material>Gazebo/Gray</material>
      </gazebo>
    
       <gazebo reference="wheel_rear_left_link">
            <material>Gazebo/Black</material>
      </gazebo>
    
       <gazebo reference="wheel_rear_right_link">
            <material>Gazebo/Black</material>
      </gazebo>
    
       <gazebo reference="base_footprint">
            <turnGravityOff>false</turnGravityOff>
      </gazebo>
    
        <!-- transmission -->
           <transmission name="front_left_joint_trans">
                <type>transmission_interface/SimpleTransmission</type>
                <joint name="front_left_joint" >
                    <hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>
                </joint>
                <actuator name="front_left_joint_motor">
                    <hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>
                    <mechanicalReduction>1</mechanicalReduction>
                </actuator>
            </transmission>
    
          <transmission name="front_right_joint_trans">
                <type>transmission_interface/SimpleTransmission</type>
                <joint name="front_right_joint" >
                    <hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>
                </joint>
                <actuator name="front_right_joint_motor">
                    <hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>
                    <mechanicalReduction>1</mechanicalReduction>
                </actuator>
            </transmission>
    
     <!-- controller -->
            <gazebo>
                <plugin name="differential_drive_controller" 
                        filename="libgazebo_ros_diff_drive.so">
                    <rosDebugLevel>Debug</rosDebugLevel>
                    <publishWheelTF>true</publishWheelTF>
                    <robotNamespace>/</robotNamespace>
                    <publishTf>1</publishTf>
                    <publishWheelJointState>true</publishWheelJointState>
                    <alwaysOn>true</alwaysOn>
                    <updateRate>100.0</updateRate>
                    <legacyMode>true</legacyMode>
                    <leftJoint>front_left_joint</leftJoint>
                    <rightJoint>front_right_joint</rightJoint>
                    <wheelSeparation>${wheel_distance*1}</wheelSeparation>
                    <wheelDiameter>${2*wheel_radius}</wheelDiameter>
                    <broadcastTF>1</broadcastTF>
                    <wheelTorque>30</wheelTorque>
                    <wheelAcceleration>1.8</wheelAcceleration>
                    <commandTopic>cmd_vel</commandTopic>
                    <odometryFrame>odom</odometryFrame> 
                    <odometryTopic>odom</odometryTopic> 
                    <robotBaseFrame>base_footprint</robotBaseFrame>
                </plugin>
            </gazebo> 

    在lidar.xacro的基础上添加,形成lidar_gazebo.xacro

       <gazebo reference="${prefix}_Link">
            <material>Gazebo/Blue</material>
      </gazebo>
    
            <gazebo reference="${prefix}_link">
                <sensor type="ray" name="rplidar">
                    <pose>0 0 0 0 0 0</pose>
                    <visualize>false</visualize>
                    <update_rate>5.5</update_rate>
                    <ray>
                        <scan>
                          <horizontal>
                            <samples>360</samples>
                            <resolution>1</resolution>
                            <min_angle>-3</min_angle>
                            <max_angle>3</max_angle>
                          </horizontal>
                        </scan>
                        <range>
                          <min>0.10</min>
                          <max>6.0</max>
                          <resolution>0.01</resolution>
                        </range>
                        <noise>
                          <type>gaussian</type>
                          <mean>0.0</mean>
                          <stddev>0.01</stddev>
                        </noise>
                    </ray>
                    <plugin name="gazebo_rplidar" filename="libgazebo_ros_laser.so">
                        <topicName>/scan</topicName>
                        <frameName>laser_link</frameName>
                    </plugin>
                </sensor>
            </gazebo>

    在gazebo中使用的轮椅文件:smartwheelchair_model_with_laser_gazebo.xacro

    <?xml version="1.0"?>
    <robot name="arm" xmlns:xacro="http://www.ros.org/wiki/xacro">
    
        <xacro:include filename="$(find smartwheelchair_model)/urdf/xacro/gazebo/smartwheelchair_base_gazebo.xacro" />
        <xacro:include filename="$(find smartwheelchair_model)/urdf/xacro/sensors/lidar_gazebo.xacro" />
    
        <!-- lidar -->
     <joint
        name="laser_joint"
        type="fixed">
        <origin
          xyz="-0.42295 0.0029489 -0.030238"
          rpy="0 0 0" />
        <parent
          link="base_link" />
        <child
          link="laser_Link" />
        <axis
          xyz="0 0 0" />
      </joint>
    
        <xacro:rplidar prefix="laser"/>
    
        <mbot_base_gazebo/>
    
    </robot>

    三 修改launch文件

    在rviz中显示并控制 (arbotix 需要下载放在工作空间下)

    <launch>
      <arg name="model" default="$(find xacro)/xacro --inorder '$(find smartwheelchair_model)/urdf/xacro/smartwheelchair_model_with_laser.xacro'" />
      <arg
        name="gui"
        default="true" />
      <param name="robot_description" command="$(arg model)" />
      <param
        name="use_gui"
        value="$(arg gui)" />
    
        <node name="arbotix" pkg="arbotix_python" type="arbotix_driver" output="screen">
            <rosparam file="$(find smartwheelchair_model)/config/fake_mbot_arbotix.yaml" command="load" />
            <param name="sim" value="true"/>
        </node>
    
      <node
        name="joint_state_publisher"
        pkg="joint_state_publisher"
        type="joint_state_publisher" />
      <node
        name="robot_state_publisher"
        pkg="robot_state_publisher"
        type="state_publisher" />
      <node
        name="rviz"
        pkg="rviz"
        type="rviz"
        args="-d $(find smartwheelchair_model)/config/display_arbotix.rviz" 
        required="true" />
    </launch>

    在gazebo中显示并控制

    <launch>
    
        <!-- 设置launch文件的参数 home_2,world是另外创建的功能包里面的.world文件-->
        <arg name="world_name" value="$(find smartwheelchair_gazebo)/worlds/home_2.world"/>
        <arg name="paused" default="false"/>
        <arg name="use_sim_time" default="true"/>
        <arg name="gui" default="true"/>
        <arg name="headless" default="false"/>
        <arg name="debug" default="false"/>
    
        <!-- 运行gazebo仿真环境 -->
        <include file="$(find gazebo_ros)/launch/empty_world.launch">
            <arg name="world_name" value="$(arg world_name)" />
            <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>
    
        <!-- 加载机器人模型描述参数 -->
        <param name="robot_description" command="$(find xacro)/xacro --inorder '$(find smartwheelchair_model)/urdf/xacro/gazebo/smartwheelchair_model_with_laser_gazebo.xacro'" /> 
    
        <!-- 运行joint_state_publisher节点,发布机器人的关节状态  -->
        <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" ></node> 
    
        <!-- 运行robot_state_publisher节点,发布tf  -->
        <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher"  output="screen" >
            <param name="publish_frequency" type="double" value="50.0" />
        </node>
    
        <!-- 在gazebo中加载机器人模型-->
        <node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen"
              args="-urdf -model arm -param robot_description"/> 
    
    </launch>

    分别运行以上launch文件在加上cmd_vel控制节点就可以显示并控制其运动了.

    四 问题和解决办法

    1 运行gazebo.launch文件,机器人从天而降并歪倒在地上

      <node
        name="tf_footprint_base"
        pkg="tf"
        type="static_transform_publisher"
        args="0 0 0 0 0 0 base_link base_footprint 40" />   

    这句话好像是用于tf坐标变换的,我后面手动添加了base_footprint ,所以就把这句话删掉了,并在新的xacro文件中加入了gazebo_ros_controller ,之后轮椅机器人导入在gazebo中显示就正常了.

    2 使用键盘控制节点在gazebo控制轮椅运动时发现轮椅前进和左转错乱,问题在于solidworks导出的时候  

    左边的轮子是

       <axis
          xyz="0 1 0" />
    这句话右边轮椅是
       <axis
          xyz="0 -1 0" />
    这就导致发出向前的指令左边正转右边倒转,解决办法将-1改为1.

    3  world创建的时候一定不要带上机器人保存,要不然引用的时候会出现两个机器人.

  • 相关阅读:
    3.5缺少动态连接库.so--cannot open shared object file: No such file or directory
    PHP中的变量详解
    Python类的实例属性详解
    Docker中的镜像分层技术详解
    如何编写优雅的代码?
    Node.js在不同平台的安装方法步骤详解
    Python3.X新特性之print和exec
    Django中如何配置Database缓存?
    Ajax中eval的使用详解
    如何创建和使用XMLHttpRequest对象?
  • 原文地址:https://www.cnblogs.com/vtas-Yao/p/12521612.html
Copyright © 2011-2022 走看看