在gazebo中加载多台机器人

8月25号从杭州回到学校了,前一天晚上喝多了,夜里果然吐了。早上实在是不想动,索性改签到了下午。到学校已经7点1刻了。真是艰难的一天 = =
最近一直在做仿真,做的有点腻了。赶紧弄完做视觉吧,我想早点深入到算法

工作时间: 2019.08.26-2019.08.29
工作内容

一. urdf模型
之前建立的URDF一直会有漂移的毛病,周一重新建立了一遍,有所改善,但是问题仍然存在。猜测与各个link的质量以及转动惯量相关,但是苦于找不到一个刚刚好合适的值,不知道该怎么弄了。
待解决!!!

二. 地图搭建
在gazebo中如何建立一个有特殊图案的地面?
之前尝试用model edit这个选项卡自己画,但是总是遇到无法改变颜色的BUG,好在网上有大佬给出了教程:
如何用一张特定的图片搭建world?
这里总结如下:

  1. 建立文件夹
mkdir ~/.gazebo/models/my_ground_plane 
mdkir -p ~/.gazebo/models/my_ground_plane/materials/textures
mdkir -p ~/.gazebo/models/my_ground_plane/materials/scripts
  1. 建立material文件
gedit ~/.gazebo/models/my_ground_plane/materials/scripts/my_ground_plane.material 

内容:


    material MyGroundPlane/Image
            {
              technique
              {
                pass
                {
                  ambient 1 1 1 1.000000
                  diffuse 1 1 1 1.000000
                  specular 0.03 0.03 0.03 1.000000 

                  texture_unit
                  {
                    texture MyImage.png
                  }
                }
              }
            }
  1. 复制图片至~/.gazebo/models/my_ground_plane/materials/textures/MyImage.png
    也可以是其他格式,例如 .jepg
  2. Create a
    ~/.gazebo/models/my_ground_plane/model.sdf
    file with the following contents
    注意: 图片的大小可以由下面的size属性修改,单位为m
<?xml version="1.0" encoding="UTF-8"?>
<sdf version="1.4">
   <model name="my_ground_plane">
      <static>true</static>
      <link name="link">
         <collision name="collision">
            <geometry>
               <plane>
                  <normal>0 0 1</normal>
                  <size>100 100</size>
               </plane>
            </geometry>
            <surface>
               <friction>
                  <ode>
                     <mu>100</mu>
                     <mu2>50</mu2>
                  </ode>
               </friction>
            </surface>
         </collision>
         <visual name="visual">
            <cast_shadows>false</cast_shadows>
            <geometry>
               <plane>
                  <normal>0 0 1</normal>
                  <size>100 100</size>
               </plane>
            </geometry>
            <material>
               <script>
                  <uri>model://my_ground_plane/materials/scripts</uri>
                  <uri>model://my_ground_plane/materials/textures/</uri>
                  <name>MyGroundPlane/Image</name>
               </script>
            </material>
         </visual>
      </link>
   </model>
</sdf>
  1. Create a
    ~/.gazebo/models/my_ground_plane/model.config
    file with the following contents
<?xml version="1.0" encoding="UTF-8"?>
<model>
   <name>My Ground Plane</name>
   <version>1.0</version>
   <sdf version="1.4">model.sdf</sdf>
   <description>My textured ground plane.</description>
</model>
  1. 打开gazebo将my_ground_plane加上去。如果发现一直晃动,将原来的ground_plane delete即可

我做出来的效果如图所示,是一个棋盘:
在这里插入图片描述
这么做出后每次都需要加载一次,并且无法指定位置,有点麻烦。我们将它加进launch中:
先保存为world文件,然后在launch 文件中添加:

  <include file="$(find gazebo_ros)/launch/empty_world.launch">
    <arg name="world_name" value="$(find your_packge)/worlds/qipan.world"/>
    <arg name="gui" value="$(arg gui)"/>
    <arg name="debug" value="$(arg debug)"/>
  </include>

三. 在gazebo中加入多个机器人模型
好困~先睡了,明天再弄
并且思考一个问题: 每台机器人都要打开一个slam节点吗?(例如gamapping cartographer等)

步骤如下:

  1. 将urdf改写为xacro。加上xacro声明即可。如:
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="caot">
  1. 改写launch文件
<group ns="shuai">
    <param name="robot_description"
        command="$(find xacro)/xacro
        $(find caot)/urdf/shuai.urdf.xacro ns:=shuai"
    />
    <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="urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen" 
        args="-urdf -model shuai -param robot_description -x 0"/>
</group>

被group标签包围的节点,话题,参数,服务,都会在前面加入<命名空间>的前缀
如: /shuai/joint_state_publisher

我的launch最终如下,可以在一个棋盘地面上加载两个机器人:

<?xml version="1.0"?>
<launch>

  <!-- these are the arguments you can pass this launch file, for example paused:=true -->
  <arg name="paused" default="false"/>
  <arg name="use_sim_time" default="true"/>
  <arg name="extra_gazebo_args" default=""/>
  <arg name="gui" default="true"/>
  <arg name="debug" default="false"/>
  <arg name="physics" default="ode"/>
  <arg name="verbose" default="true"/>
  <arg name="world" default="gazebo_ros_range"/>

  <!-- set use_sim_time flag -->
  <group if="$(arg use_sim_time)">
    <param name="/use_sim_time" value="true" />
  </group>

  <include file="$(find gazebo_ros)/launch/empty_world.launch">
    <arg name="world_name" value="$(find caot)/worlds/qipan.world"/>
    <arg name="gui" value="$(arg gui)"/>
    <arg name="debug" value="$(arg debug)"/>
  </include>

<!--include file="$(find caot)/launch/gazebo.launch">
  </include-->


<!--param name="robot_description" command="$(find caot)/urdf/caot.urdf" /-->

<!--node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen"
          args="-file $(find caot)/urdf/caot.urdf -urdf -model caot"/--> 
<!--node
    name="spawn_model"
    pkg="gazebo_ros"
    type="spawn_model"
    args="-file $(find caot)/urdf/caot.urdf -urdf -model caot"
    output="screen" /-->

<group ns="ma">
    <param name="robot_description"
        command="$(find xacro)/xacro
        $(find caot)/urdf/ma.xacro ns:=ma"
    />
  <!--remap from="/cmd_vel" to="/macmd_vel" /--> 
    <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="urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen" 
        args="-urdf -model ma -param robot_description -x 10"/>
</group>

<group ns="shuai">
    <param name="robot_description"
        command="$(find xacro)/xacro
        $(find caot)/urdf/shuai.urdf.xacro ns:=shuai"
    />
    <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="urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen" 
        args="-urdf -model shuai -param robot_description -x 0"/>
</group>

</launch>
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值