ROS_建立新地形_Xacro[1]:建立新模擬環境

1.新增物件及連線
   新建立的環境,我們可以編寫一個新xacro檔來描述,
   如:此處我設立的是wallworld.urdf.xacro。
   並將其存放於資料夾(urdf_tutorial/urdf)中。
   在xacro檔中,各物件之間的連結,會需要:
   (1)分別宣告要連結的各物件大小
   如:

<link name="wall_A_750">
    <visual>
      <geometry>
        <box size="1 ${wall_750_leglen} ${wall_thickness}"/>
      </geometry>
      <origin xyz="${-wall_750_leglen/2} ${wall_thickness/2+2} 0" rpy="0 ${pi/2} ${pi/2}"/>
      <material name="blue"/>
    </visual>
    <collision>
      <geometry>
        <box size="1 ${wall_750_leglen} ${wall_thickness}"/>
      </geometry>
      <origin xyz="${-wall_750_leglen/2} ${wall_thickness/2+2} 0" rpy="0 ${pi/2} ${pi/2}"/>
    </collision>
    <xacro:default_inertial mass="10"/>
  </link>


  (2)連結時,須注意擔任「基底的物件」是哪一個,
   並且設定其連結的「位置」及「角度」
   如:

 <link name="First_part">...  </link>
 <link name="Second_part">...  </link>

 <joint name="Two_parts_joint" type="fixed">
   <parent link="First_part"/>
   <child link="Second_part"/>
   <origin xyz="50 40 0" rpy="0 0 0"/>
 </joint>


2.讀取新地圖
   要讀取新地圖時,可以將turtlebot_world.launch 修改成:
   (資料夾turtlebot_gazebo/launch中)
   如此就可以在開啟turtlebot_world.launch時,
   直接啟動我們新建立的wallworld.urdf.xacro。

<?xml version="1.0"?>
<launch>
  <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"/>

  <arg name="base"      value="$(optenv TURTLEBOT_BASE kobuki)"/> <!-- create, roomba -->
  <arg name="battery"   value="$(optenv TURTLEBOT_BATTERY /proc/acpi/battery/BAT0)"/>  <!-- /proc/acpi/battery/BAT0 --> 
  <arg name="stacks"    value="$(optenv TURTLEBOT_STACKS hexagons)"/>  <!-- circles, hexagons --> 
  <arg name="3d_sensor" value="$(optenv TURTLEBOT_3D_SENSOR kinect)"/>  <!-- kinect, asus_xtion_pro --> 

  <arg name="model" default="$(find urdf_tutorial)/urdf/wallworld.urdf.xacro"/>

  <include file="$(find gazebo_ros)/launch/empty_world.launch">
    <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>

  <include file="$(find turtlebot_gazebo)/launch/includes/$(arg base).launch.xml">
    <arg name="base" value="$(arg base)"/>
    <arg name="stacks" value="$(arg stacks)"/>
    <arg name="3d_sensor" value="$(arg 3d_sensor)"/>
  </include>

  <param name="map_description" command="$(find xacro)/xacro.py $(arg model)" />

  <node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model"
        args="-z 1.0 -unpause -urdf -model robot -param map_description" respawn="false" output="screen" />

  <node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher">
    <param name="publish_frequency" type="double" value="30.0" />
  </node>

</launch>


改變成果
更改前

更改後

參考來源
ROS: xacro
CSDN: ROS官方教程[翻譯]—xacro的介绍與使用

留言

這個網誌中的熱門文章

ROS_建地圖_Octomap[1]:安裝及測試

C#_練習_[3]:對發票程式