【kinetic】操作系统探索总结(六)使用smartcar进行仿真
阅读原文时间:2023年07月09日阅读:2

p { margin-bottom: 0.1in; direction: ltr; line-height: 120%; text-align: justify }
a:link { color: rgba(0, 0, 255, 1) }

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

一、模型完善

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

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

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





<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>  
  <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>  


<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>  


<visual>  
  <geometry>  
    <cylinder length=".02" radius="0.025"/>  
  </geometry>  
  <material name="black">  
    <color rgba="0 0 0 1"/>  
  </material>  


<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>  




<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"/>  

<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>  




p { margin-bottom: 0.1in; direction: ltr; line-height: 120%; text-align: justify }
a:link { color: rgba(0, 0, 255, 1) }

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



Gazebo/Blue

<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>  

p { margin-bottom: 0.1in; direction: ltr; line-height: 120%; text-align: justify }
a:link { color: rgba(0, 0, 255, 1) }

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


<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">  




p { margin-bottom: 0.1in; direction: ltr; line-height: 120%; text-align: justify }
a:link { color: rgba(0, 0, 255, 1) }

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

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


  
  
  
  
  
  

            

       

               

    
   
   

   

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

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

    

  这行代码注释即可。):

$ 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_width: 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 下

p { margin-bottom: 0.1in; direction: ltr; line-height: 120%; text-align: justify }
a:link { color: rgba(0, 0, 255, 1) }

三、仿真测试

  首先运行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:
      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:
      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

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章