ROS_建立新地形_Xacro[1]:建立新模擬環境
1.新增物件及連線
新建立的環境,我們可以編寫一個新xacro檔來描述,
如:此處我設立的是wallworld.urdf.xacro。
並將其存放於資料夾(urdf_tutorial/urdf)中。
在xacro檔中,各物件之間的連結,會需要:
(1)分別宣告要連結的各物件大小
如:
(2)連結時,須注意擔任「基底的物件」是哪一個,
並且設定其連結的「位置」及「角度」
如:
2.讀取新地圖
要讀取新地圖時,可以將turtlebot_world.launch 修改成:
(資料夾turtlebot_gazebo/launch中)
如此就可以在開啟turtlebot_world.launch時,
直接啟動我們新建立的wallworld.urdf.xacro。
改變成果
更改前
更改後
參考來源
ROS: xacro
CSDN: ROS官方教程[翻譯]—xacro的介绍與使用
新建立的環境,我們可以編寫一個新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的介绍與使用
留言
張貼留言