zoukankan      html  css  js  c++  java
  • 【kinetic】操作系统探索总结(六)使用smartcar进行仿真

      之前的博客中,我们使用rviz进行了TurtleBot的仿真,而且使用urdf文件建立了自己的机器人smartcar,本篇博客是将两者进行结合,使用smartcar机器人在rviz中进行仿真。

      一、模型完善

      之前我们使用的都是urdf文件格式的模型,在很多情况下,ROSurdf文件的支持并不是很好,使用宏定义的.xacro文件兼容性更好,扩展性也更好。所以我们把之前的urdf文件重新整理编写成.xacro文件。

      .xacro文件主要分为三部分(以下文件均创建在urdf文件夹下,上一章节创建的文件可以删除):

      1、机器人主体(smartcar_body.urdf.xacro)

      

    <?xml version="1.0"?>  
    <robot name="smartcar" xmlns:xacro="http://ros.org/wiki/xacro">  
      <xacro:property name="M_PI" value="3.14159"/>    
      
      <!-- Macro for SmartCar body. Including Gazebo extensions, but does not include Kinect -->  
      <xacro:include filename="$(find smartcar_description)/urdf/gazebo.urdf.xacro"/>  
      
      <xacro:property name="base_x" value="0.33" />  
      <xacro:property name="base_y" value="0.33" />  
      
      <xacro:macro name="smartcar_body">  
        
        <link name="base_link">  
        <inertial>  
          <origin xyz="0 0 0.055"/>  
          <mass value="1.0" />  
          <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>  
        </inertial>  
        <visual>  
          <geometry>  
            <box size="0.25 .16 .05"/>  
          </geometry>  
          <origin rpy="0 0 0" xyz="0 0 0.055"/> 
          <material name="blue">  
          <color rgba="0 0 .8 1"/>  
          </material>  
       </visual>  
       <collision>  
          <origin rpy="0 0 0" xyz="0 0 0.055"/>  
          <geometry>  
            <box size="0.25 .16 .05" />  
          </geometry>  
        </collision>  
      </link>  
    
     <link name="left_front_wheel">  
        <inertial>  
          <origin  xyz="0.08 0.08 0.025"/>  
          <mass value="0.1" />  
           <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>  
        </inertial>  
    
        <visual>  
          <geometry>  
            <cylinder length=".02" radius="0.025"/>  
          </geometry>  
          <material name="black">  
            <color rgba="0 0 0 1"/>  
          </material>  
        </visual>  
        <collision>  
          <origin rpy="0 1.57075 1.57075" xyz="0.08 0.08 0.025"/>  
          <geometry>  
             <cylinder length=".02" radius="0.025"/>  
          </geometry>  
        </collision>  
      </link>  
    
      <joint name="left_front_wheel_joint" type="continuous">  
        <axis xyz="0 0 1"/>  
        <parent link="base_link"/>  
        <child link="left_front_wheel"/>  
        <origin rpy="0 1.57075 1.57075" xyz="0.08 0.08 0.025"/>  
        <limit effort="100" velocity="100"/>  
        <joint_properties damping="0.0" friction="0.0"/>  
      </joint>  
    
      <link name="right_front_wheel">  
        <inertial>  
          <origin xyz="0.08 -0.08 0.025"/>  
          <mass value="0.1" />  
           <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>  
        </inertial>  
    
        <visual>  
          <geometry>  
            <cylinder length=".02" radius="0.025"/>  
          </geometry>  
    
          <material name="black">  
            <color rgba="0 0 0 1"/>  
          </material>  
        </visual>  
    
        <collision>  
          <origin rpy="0 1.57075 1.57075" xyz="0.08 -0.08 0.025"/>  
          <geometry>  
             <cylinder length=".02" radius="0.025"/>  
          </geometry>  
        </collision>  
      </link>  
    
      <joint name="right_front_wheel_joint" type="continuous">  
        <axis xyz="0 0 1"/>  
        <parent link="base_link"/>  
        <child link="right_front_wheel"/>  
        <origin rpy="0 1.57075 1.57075" xyz="0.08 -0.08 0.025"/>  
        <limit effort="100" velocity="100"/>  
        <joint_properties damping="0.0" friction="0.0"/>  
     </joint>  
    
     <link name="left_back_wheel">  
        <inertial>  
          <origin xyz="-0.08 0.08 0.025"/>  
          <mass value="0.1" />  
           <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>  
        </inertial>  
    
        <visual>  
          <geometry>  
            <cylinder length=".02" radius="0.025"/>  
          </geometry>  
          <material name="black">  
            <color rgba="0 0 0 1"/>  
          </material>  
       </visual>  
    
       <collision>  
           <origin rpy="0 1.57075 1.57075" xyz="-0.08 0.08 0.025"/>  
          <geometry>  
             <cylinder length=".02" radius="0.025"/>  
          </geometry>  
        </collision>  
      </link>  
    
      <joint name="left_back_wheel_joint" type="continuous">  
        <axis xyz="0 0 1"/>  
        <parent link="base_link"/>  
        <child link="left_back_wheel"/>  
        <origin rpy="0 1.57075 1.57075" xyz="-0.08 0.08 0.025"/>  
        <limit effort="100" velocity="100"/>  
        <joint_properties damping="0.0" friction="0.0"/>  
      </joint>  
    
      <link name="right_back_wheel">  
    
        <inertial>  
           <origin xyz="-0.08 -0.08 0.025"/>  
           <mass value="0.1" />  
           <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>  
        </inertial>  
    
        <visual>  
          <geometry>  
            <cylinder length=".02" radius="0.025"/>  
          </geometry>  
          <material name="black">  
            <color rgba="0 0 0 1"/>  
          </material>  
       </visual>  
       <collision>  
          <origin rpy="0 1.57075 1.57075" xyz="-0.08 -0.08 0.025"/>  
          <geometry>  
             <cylinder length=".02" radius="0.025"/>  
          </geometry>  
        </collision>  
      </link>  
      <joint name="right_back_wheel_joint" type="continuous">  
    
        <axis xyz="0 0 1"/>  
    
        <parent link="base_link"/>  
    
        <child link="right_back_wheel"/>  
    
        <origin rpy="0 1.57075 1.57075" xyz="-0.08 -0.08 0.025"/>  
    
        <limit effort="100" velocity="100"/>  
    
        <joint_properties damping="0.0" friction="0.0"/>  
    
      </joint>  
    
      <link name="head">  
    
        <inertial>  
    
          <origin xyz="0.08 0 0.08"/>  
    
          <mass value="0.1" />  
    
          <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>  
    
        </inertial>  
    
        <visual>  
          <geometry>  
            <box size=".02 .03 .03"/>  
          </geometry>  
    
          <material name="white">  
            <color rgba="1 1 1 1.5"/>  
          </material>  
         </visual>  
         <collision>  
          <origin xyz="0.08 0 0.08"/>  
          <geometry>  
             <cylinder length=".02" radius="0.025"/>  
          </geometry>  
        </collision>  
      </link>  
      <joint name="tobox" type="fixed">  
        <parent link="base_link"/>  
        <child link="head"/>  
        <origin xyz="0.08 0 0.08"/>  
      </joint>  
      </xacro:macro>  
    </robot>

     

     

      2gazebo属性部分(gazebo.urdf.xacro)  

    <?xml version="1.0"?>  
    <robot xmlns:controller="http://playerstage.sourceforge.net/gazebo/xmlschema/#controller"   
        xmlns:interface="http://playerstage.sourceforge.net/gazebo/xmlschema/#interface"   
        xmlns:sensor="http://playerstage.sourceforge.net/gazebo/xmlschema/#sensor"   
        xmlns:xacro="http://ros.org/wiki/xacro" 
        name="smartcar_gazebo">  
    
    <!-- ASUS Xtion PRO camera for simulation -->  
    <!-- gazebo_ros_wge100 plugin is in kt2_gazebo_plugins package -->  
    
    <xacro:macro name="smartcar_sim">  
        <gazebo reference="base_link">  
            <material>Gazebo/Blue</material>  
        </gazebo>  
    
        <gazebo reference="right_front_wheel">  
            <material>Gazebo/FlatBlack</material>  
        </gazebo>  
     
        <gazebo reference="right_back_wheel">  
            <material>Gazebo/FlatBlack</material>  
        </gazebo>  
    
        <gazebo reference="left_front_wheel">  
            <material>Gazebo/FlatBlack</material>  
        </gazebo>  
    
        <gazebo reference="left_back_wheel">  
            <material>Gazebo/FlatBlack</material>  
        </gazebo>  
    
        <gazebo reference="head">  
            <material>Gazebo/White</material>  
        </gazebo>  
    
    </xacro:macro>  
    
    </robot>

     

      3、主文件(smartcar.urdf.xacro)

      

    <?xml version="1.0"?>  
    <robot name="smartcar"    
    
        xmlns:xi="http://www.w3.org/2001/XInclude"  
        xmlns:gazebo="http://playerstage.sourceforge.net/gazebo/xmlschema/#gz"  
        xmlns:model="http://playerstage.sourceforge.net/gazebo/xmlschema/#model"  
        xmlns:sensor="http://playerstage.sourceforge.net/gazebo/xmlschema/#sensor"  
        xmlns:body="http://playerstage.sourceforge.net/gazebo/xmlschema/#body"  
        xmlns:geom="http://playerstage.sourceforge.net/gazebo/xmlschema/#geom"  
        xmlns:joint="http://playerstage.sourceforge.net/gazebo/xmlschema/#joint"  
        xmlns:controller="http://playerstage.sourceforge.net/gazebo/xmlschema/#controller"  
        xmlns:interface="http://playerstage.sourceforge.net/gazebo/xmlschema/#interface"  
        xmlns:rendering="http://playerstage.sourceforge.net/gazebo/xmlschema/#rendering"  
        xmlns:renderable="http://playerstage.sourceforge.net/gazebo/xmlschema/#renderable"  
        xmlns:physics="http://playerstage.sourceforge.net/gazebo/xmlschema/#physics"  
        xmlns:xacro="http://ros.org/wiki/xacro">  
    
      <include filename="$(find smartcar_description)/urdf/smartcar_body.urdf.xacro" />  
    
      <!-- Body of SmartCar, with plates, standoffs and Create (including sim sensors) -->  
      <smartcar_body/>  
      <smartcar_sim/>  
    </robot>

     

     

    二、lanuch文件(smartcar_display.rviz.launch)

      在launch文件中要启动节点和模拟器。  

    <launch>
       <param name="/use_sim_time" value="false" />
       <!-- Load the URDF/Xacro model of our robot -->
       <arg name="urdf_file" default="$(find xacro)/xacro '$(find smartcar_description)/urdf/smartcar.urdf.xacro' --inorder" />
       <arg name="gui" default="false" />
       <param name="robot_description" command="$(arg urdf_file)" />
       <param name="use_gui" value="$(arg gui)"/>
    
       <node name="arbotix" pkg="arbotix_python" type="arbotix_driver" output="screen">
           <param name="sim" value="true"/>
       </node>
    
        <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" >
        </node>
    
        <node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher">
            <param name="publish_frequency" type="double" value="20.0" />
        </node>
    
         <!-- We need a static transforms for the wheels -->
        <node pkg="tf" type="static_transform_publisher" name="odom_left_wheel_broadcaster" args="0 0 0 0 0 0 /base_link /left_front_link 100" />
        <node pkg="tf" type="static_transform_publisher" name="odom_right_wheel_broadcaster" args="0 0 0 0 0 0 /base_link /right_front_link 100" />
    
       <node name="rviz" pkg="rviz" type="rviz" args="-d $(find smartcar_description)/urdf.rviz" />  
    
    </launch>

     

     再在smartcar_description文件夹下的config文件夹中建立下面的文件

      (如果不想进行这一步,把launch文件中的

        <rosparam file="$(find smartcar_description)/config/smartcar_arbotix.yaml" command="load" /> 

      这行代码注释即可。):

    $ cd ~/catkin_ws/src/config
    $ touch smartcar_arbotix.yaml

    把下面的代码粘进去。

    
    
    port: /dev/ttyUSB0
    baud: 115200
    rate: 20
    sync_write: True
    sync_read: True
    read_rate: 20
    write_rate: 20
    
    controllers: {
       #  Pololu motors: 1856 cpr = 0.3888105m travel = 4773 ticks per meter (empirical: 4100)
       base_controller: {type: diff_controller, base_frame_id: base_link, base_ 0.26, ticks_meter: 4100, Kp: 12, Kd: 12, Ki: 0, Ko: 50, accel_limit: 1.0 }
    }
     
    复制使用cp指令将/opt/ros/kinetic/share/urdf_tutorial 目录下的 urdf.rviz拷贝到项目目录 ~/catkin_ws/src/smartcar_description 下

    三、仿真测试

      首先运行lanuch,既可以看到rviz中的机器人:

    roslaunch smartcar_description smartcar_display.rviz.launch 
    rostopic pub -1 /cmd_vel geometry_msgs/Twist '{}'  《停止运动》

     

    发布一条动作的消息。

        01.rostopic pub -r 10 /cmd_vel geometry_msgs/Twist '{linear: {x: 0.5, y: 0, z: 0}, angular: {x: 0, y: 0, z: 0.5}}'

     却发现是一个坐标轴在运动。这明显和我们想要的结果不同。

    这里,我们需要对rviz客户端进行设置。

    将Global Options下的Fixed Frame更改为odom,这样我们的小车就能正常的运行了。

    但是,我们之前的历程中有指示小车的方向,这里要怎么设置呢?我们需要在窗口的左下角的Add按钮中添加 Odometry模块,并选中话题odom。

    下面我们选中rviz窗口,按下Ctrl+S,将会把当前的设置保存到urdf.rviz文件中。

    保存后的urdf.rviz的内容如下:

    Panels:
      - Class: rviz/Displays
        Help Height: 78
        Name: Displays
        Property Tree Widget:
          Expanded:
            - /Global Options1
            - /Status1
            - /RobotModel1
            - /RobotModel1/Links1
            - /TF1
            - /TF1/Tree1/odom1
            - /TF1/Tree1/odom1/base_link1
          Splitter Ratio: 0.5
        Tree Height: 561
      - Class: rviz/Selection
        Name: Selection
      - Class: rviz/Tool Properties
        Expanded:
          - /2D Pose Estimate1
          - /2D Nav Goal1
          - /Publish Point1
        Name: Tool Properties
        Splitter Ratio: 0.588679016
      - Class: rviz/Views
        Expanded:
          - /Current View1
        Name: Views
        Splitter Ratio: 0.5
      - Class: rviz/Time
        Experimental: false
        Name: Time
        SyncMode: 0
        SyncSource: ""
    Visualization Manager:
      Class: ""
      Displays:
        - Alpha: 0.5
          Cell Size: 1
          Class: rviz/Grid
          Color: 160; 160; 164
          Enabled: true
          Line Style:
            Line Width: 0.0299999993
            Value: Lines
          Name: Grid
          Normal Cell Count: 0
          Offset:
            X: 0
            Y: 0
            Z: 0
          Plane: XY
          Plane Cell Count: 10
          Reference Frame: <Fixed Frame>
          Value: true
        - Alpha: 0.5
          Class: rviz/RobotModel
          Collision Enabled: false
          Enabled: true
          Links:
            All Links Enabled: true
            Expand Joint Details: false
            Expand Link Details: false
            Expand Tree: false
            Link Tree Style: Links in Alphabetic Order
            base_link:
              Alpha: 1
              Show Axes: false
              Show Trail: false
              Value: true
            head:
              Alpha: 1
              Show Axes: false
              Show Trail: false
              Value: true
            left_back_wheel:
              Alpha: 1
              Show Axes: false
              Show Trail: false
              Value: true
            left_front_wheel:
              Alpha: 1
              Show Axes: false
              Show Trail: false
              Value: true
            right_back_wheel:
              Alpha: 1
              Show Axes: false
              Show Trail: false
              Value: true
            right_front_wheel:
              Alpha: 1
              Show Axes: false
              Show Trail: false
              Value: true
          Name: RobotModel
          Robot Description: robot_description
          TF Prefix: ""
          Update Interval: 0
          Value: true
          Visual Enabled: true
        - Class: rviz/TF
          Enabled: true
          Frame Timeout: 15
          Frames:
            All Enabled: true
            base_link:
              Value: true
            head:
              Value: true
            left_back_wheel:
              Value: true
            left_front_link:
              Value: true
            left_front_wheel:
              Value: true
            odom:
              Value: true
            right_back_wheel:
              Value: true
            right_front_link:
              Value: true
            right_front_wheel:
              Value: true
          Marker Scale: 0.5
          Name: TF
          Show Arrows: true
          Show Axes: true
          Show Names: true
          Tree:
            odom:
              base_link:
                head:
                  {}
                left_back_wheel:
                  {}
                left_front_link:
                  {}
                left_front_wheel:
                  {}
                right_back_wheel:
                  {}
                right_front_link:
                  {}
                right_front_wheel:
                  {}
          Update Interval: 0
          Value: true
        - Angle Tolerance: 0.100000001
          Class: rviz/Odometry
          Covariance:
            Orientation:
              Alpha: 0.5
              Color: 255; 255; 127
              Color Style: Unique
              Frame: Local
              Offset: 1
              Scale: 1
              Value: true
            Position:
              Alpha: 0.300000012
              Color: 204; 51; 204
              Scale: 1
              Value: true
            Value: true
          Enabled: true
          Keep: 100
          Name: Odometry
          Position Tolerance: 0.100000001
          Shape:
            Alpha: 1
            Axes Length: 1
            Axes Radius: 0.100000001
            Color: 255; 25; 0
            Head Length: 0.300000012
            Head Radius: 0.100000001
            Shaft Length: 1
            Shaft Radius: 0.0500000007
            Value: Arrow
          Topic: /odom
          Unreliable: false
          Value: true
      Enabled: true
      Global Options:
        Background Color: 48; 48; 48
        Default Light: true
        Fixed Frame: odom
        Frame Rate: 30
      Name: root
      Tools:
        - Class: rviz/Interact
          Hide Inactive Objects: true
        - Class: rviz/MoveCamera
        - Class: rviz/Select
        - Class: rviz/FocusCamera
        - Class: rviz/Measure
        - Class: rviz/SetInitialPose
          Topic: /initialpose
        - Class: rviz/SetGoal
          Topic: /move_base_simple/goal
        - Class: rviz/PublishPoint
          Single click: true
          Topic: /clicked_point
      Value: true
      Views:
        Current:
          Class: rviz/Orbit
          Distance: 6.47174978
          Enable Stereo Rendering:
            Stereo Eye Separation: 0.0599999987
            Stereo Focal Distance: 1
            Swap Stereo Eyes: false
            Value: false
          Focal Point:
            X: 0
            Y: 0
            Z: 0
          Focal Shape Fixed Size: true
          Focal Shape Size: 0.0500000007
          Invert Z Axis: false
          Name: Current View
          Near Clip Distance: 0.00999999978
          Pitch: 0.695397019
          Target Frame: <Fixed Frame>
          Value: Orbit (rviz)
          Yaw: 0.513581991
        Saved: ~
    Window Geometry:
      Displays:
        collapsed: false
      Height: 848
      Hide Left Dock: false
      Hide Right Dock: false
      QMainWindow State: 000000ff00000000fd00000004000000000000016a000002c0fc0200000008fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000006400fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c0061007900730100000028000002c0000000dd00fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261000000010000010f000002c0fc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a005600690065007700730100000028000002c0000000b000fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000004c000000044fc0100000002fb0000000800540069006d00650100000000000004c00000030000fffffffb0000000800540069006d006501000000000000045000000000000000000000023b000002c000000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000
      Selection:
        collapsed: false
      Time:
        collapsed: false
      Tool Properties:
        collapsed: false
      Views:
        collapsed: false
      Width: 1216
      X: 65
      Y: 24

     

     

     

  • 相关阅读:
    【linux之web服务器apache】
    【linux工具之sed实例】
    【linux工具之strace】
    【linux工具之iptables 脚本】
    【linux工具之iptables】
    【Linux抓包工具之tcpdump】
    【抓包工具之wireshark】
    【Linux 基础服务之DNS】
    c语言
    sf
  • 原文地址:https://www.cnblogs.com/ynxf/p/9553305.html
Copyright © 2011-2022 走看看