zoukankan      html  css  js  c++  java
  • ROS学习记录(二)————使用smartcar进行仿真(用.xacro文件来运行rviz)

    我发现一个学习ROS系统的好网站:

    创客智造
    http://www.ncnynl.com/ 

    这里面关于ROS的各个方面都有很详细的介绍。

    这周,不,上周我对整个ROS是绝望的,我用一个一个下午的时间在敲代码进行这个例程的学习,可以说是费劲磨难,怎么也弄不出来,网上的各种帖子都找遍了,但没有有个有详细的介绍到底该怎么运行出来的,这之间,我有时以为是版本的原因,就把Ubuntu的版本从12.04换到14.04还是不行;有时以为是vim编辑器的缘故,然后,找帖子千辛万苦的装上,当然,还是不行++;又觉得是gazebo模拟器没装的原因,当然,结果和前两个一样,又是一场空,关键是生气,“到底也要死个明白啊!”我一星期都不知道哪里出了问题!所幸的是,偶然的机会找到这么一个网站,试试的感觉去尝试一下,发现,竟然还不错哟!竟然能运行出来。天呐,当看到小车在转圈的时候,我都激动的想哭

    下面是过程:

    再插一句,我虽然还不太确定,但有种隐约的感觉,那就是跟版本有关系,我换了好几个版本,之前用的易科的开发版,直接给弃了,老是出毛病,我是直接装的华东师范大学智能机器人运动与视觉实验室主办2015中国ROS Summer School中制作的Ubuntu for ROS,下面是地址:

    http://www.ncnynl.com/archives/201608/497.html 

    切入正题:

    首先,安装urdf_tutorial,可以使用其中的例子

    $ sudo apt-get install ros-indigo-urdf-tutorial

    这里面需要输入密码:aicrobo

    接着,安装liburdfdom-tools,提供对urdf文件的检查

    $ sudo apt-get install liburdfdom-tools

    可能是我网速的事儿,我感觉有点慢。因为这个过程是需要是从网上下载的,所有要保证联网状态才行。

    接下来的步骤,就是很多帖子里面没有提到的了,也不知道是我太笨,还是人家太聪明,我都不知道该咋弄,结果人家的帖子一下子就跳到了下一个过程了。

    $ cd ~/catkin_ws/src
    $catkin_create_pkg  smartcar_description  std_msgs rospy roscpp urdf

    这两个的命令的意思是找到catkin_ws下的src文件,并在这个文件夹里面进行下面的操作(第一句);在这个文件夹(src)里面建立一个名为“smartcar_description”的文件夹(正式的叫创建硬件描述包),我们这个例程的所有的内容都要放到这个文件夹里面,并且生成一下配套的一下文件

    会在home里面生成配套的文件:

    smartcar_description里面就是这个样子:

    然后,就是在smartcar_description中建立urdf,launch,config三个文件夹,并在里面存放一些文件:

    $cd smartcar_description //定位到这个文件夹下
    $mkdir urdf
    $cd urdf //生成一个叫urdf的文件夹
    $mkdir launch
    $cd launch //生成一个叫launch的文件夹
    $cd urdf //生成一个叫config的文件夹
    $mkdir config
    $cd urdf
    $cd ~/catkin_ws/src/urdf //选中urdf文件夹

    $touch smartcar_body.urdf.xacro //在urdf文件夹下创建一个叫smartcar_body.urdf.xacro的文件
    
    

    然后呢,就是没有什么技术含量的复制,粘贴了。

    把下面的这些代码,复制下来,然后,打开新建的smartcar_body.urdf.xacro文件,像粘贴word的一样,粘上去,保存一下。

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

    
    

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

     

    然后,接着把下面的几个也按这样的方法,创建起来。

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

    touch 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

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

    这三个文件建立好了:

    同样,再在smartcar_description文件夹下的luanch文件夹中建立下面的文件:

    $ cd ~/catkin_ws/src/launch
    $ touch smartcar_display.rviz.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.py '$(find smartcar_description)/urdf/smartcar.urdf.xacro'" />  
    
        <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">  
            <rosparam file="$(find smartcar_description)/config/smartcar_arbotix.yaml" command="load" /> 
            <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文件夹中建立下面的文件:

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

    在smartcar_description文件夹下,直接建立一个文件urdf.rviz

    把代码粘进去

    Panels:
      - Class: rviz/Displays
        Help Height: 78
        Name: Displays
        Property Tree Widget:
          Expanded:
            - /Global Options1
            - /Status1
          Splitter Ratio: 0.5
        Tree Height: 565
      - Class: rviz/Selection
        Name: Selection
      - Class: rviz/Tool Properties
        Expanded:
          - /2D Pose Estimate1
          - /2D Nav Goal1
          - /Publish Point1
        Name: Tool Properties
        Splitter Ratio: 0.588679
      - 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.03
            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: 1
          Class: rviz/RobotModel
          Collision Enabled: false
          Enabled: true
          Links:
            {}
          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
          Marker Scale: 1
          Name: TF
          Show Arrows: true
          Show Axes: true
          Show Names: true
          Tree:
            {}
          Update Interval: 0
          Value: true
      Enabled: true
      Global Options:
        Background Color: 48; 48; 48
        Fixed Frame: /base_link
      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: 10
          Focal Point:
            X: 0
            Y: 0
            Z: 0
          Name: Current View
          Near Clip Distance: 0.01
          Pitch: 0.465398
          Target Frame: <Fixed Frame>
          Value: Orbit (rviz)
          Yaw: 0.885398
        Saved: ~
    Window Geometry:
      Displays:
        collapsed: false
      Height: 882
      Hide Left Dock: false
      Hide Right Dock: false
      QMainWindow State: 000000ff00000000fd00000004000000000000013c000002c4fc0200000008fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000006400fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c0061007900730100000028000002c4000000dd00fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261000000010000010f000002c4fc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a005600690065007700730100000028000002c4000000b000fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000004b00000003efc0100000002fb0000000800540069006d00650100000000000004b0000002f600fffffffb0000000800540069006d0065010000000000000450000000000000000000000259000002c400000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000
      Selection:
        collapsed: false
      Time:
        collapsed: false
      Tool Properties:
        collapsed: false
      Views:
        collapsed: false
      Width: 1216
      X: 53
      Y: 60

    最后应该是这样子的:

    然后,运行下面的指令,应该就可以了

    roslaunch smartcar_description smartcar_display.rviz.launch

    注:以上的所有代码都是在一个终端里面完成的,要是不小心退出了,你可能要先找到对应的路径才可以执行。

    $ cd ~/catkin_ws/src  //寻找到src文件夹,找其他文件夹的话,以此类推。

    本次参考的是:

    ROS探索总结-6.使用smartcar进行仿真 - 创客智造
    http://www.ncnynl.com/archives/201609/843.html

    下面这个里面有弄好的文件夹,可以直接下载下来运行。

    ROS探索总结-7.smartcar源码上传 - 创客智造
    http://www.ncnynl.com/archives/201609/845.html

    相信坚持的力量!
  • 相关阅读:
    pytest文档29-allure-pytest(最新最全,保证能搞成功!)
    使用 JMeter 进行压力测试
    web自动化针对PO模式进行二次封装之basepage
    关于面试总结-http协议相关面试题 -----转载
    移动APP测试基础分享
    基于python+requests+unittest框架接口自动化测试设计开发
    jmeter断言接口响应字段大小
    csv文件转换为xlsx文件
    钉钉机器人发群消息笔记
    docker学习笔记
  • 原文地址:https://www.cnblogs.com/duijinglianxinduijingxiuxing/p/6757978.html
Copyright © 2011-2022 走看看