ROS中新建机器人模型(.xacro)并用rviz显示

来源:互联网 发布:武警军用品淘宝店铺 编辑:程序博客网 时间:2024/05/17 21:49
在很多情况下,ROS对urdf文件的支持并不是很好,使用宏定义的.xacro文件兼容性更好,扩展性也更好。而且urdf文件的语法比较复杂,代码太多。用.xacro文件表示模型更加简洁。

ROS中新建机器人模型(.xacro)并用rviz显示
步骤:
(1)新建包
(2)在包中新建并编辑.xacro文件
(3)在包中新建并编辑.launch文件
(4)使用rviz显示模型

1.新建包并配置全局变量

1)cd到~/dev/workspace/目录,使用命令创建包工作区roscreate-pkg myrobot urdf xacro
2)将包的工作区赋值给ROS-_PACKAGE_PATH变量

vim /root/.bashrc

在文件末尾加入
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/dev/workspace/myrobot
source /root/.bashrc
注意,环境变量很重要,一定要加入进去,否则包不能运行

2新建并编辑.xacro文件如下

新建文件夹mkdir urdf
在urdf文件夹下新建文件robot1_base.xacro
内容如下:

<?xml version="1.0"?><robot xmlns:xacro="http://www.ros.org/wiki/xacro"     xmlns:sensor="http://playerstage.sourceforge.net/gazebo/xmlschema/#sensor"        xmlns:controller="http://playerstage.sourceforge.net/gazebo/xmlschema/#controller"        xmlns:interface="http://playerstage.sourceforge.net/gazebo/xmlschema/#interface"    name="robot0">    <xacro:property name="length_wheel" value="0.05" />    <xacro:property name="radius_wheel" value="0.05" />    <xacro:macro name="default_inertial" params="mass">               <inertial>                       <mass value="${mass}" />                       <inertia ixx="1.0" ixy="0.0" ixz="0.0"                                iyy="1.0" iyz="0.0"                                izz="1.0" />               </inertial>    </xacro:macro>    <link name="base_footprint">        <visual>            <geometry>                    <box size="0.001 0.001 0.001"/>                </geometry>            <origin rpy="0 0 0" xyz="0 0 0"/>        </visual>        <xacro:default_inertial mass="0.0001"/>    </link>    <gazebo reference="base_footprint">        <material>Gazebo/Green</material>        <turnGravityOff>false</turnGravityOff>    </gazebo>    <joint name="base_footprint_joint" type="fixed">        <origin xyz="0 0 0" />        <parent link="base_footprint" />        <child link="base_link" />    </joint>    <link name="base_link">        <visual>            <geometry>                    <box size="0.2 .3 .1"/>                </geometry>            <origin rpy="0 0 1.54" xyz="0 0 0.05"/>            <material name="white">                <color rgba="1 1 1 1"/>            </material>        </visual>        <collision>            <geometry>                    <box size="0.2 .3 0.1"/>            </geometry>        </collision>        <xacro:default_inertial mass="10"/>    </link>    <link name="wheel_1">        <visual>                <geometry>                    <cylinder length="${length_wheel}" radius="${radius_wheel}"/>                </geometry>            <!-- <origin rpy="0 1.5 0" xyz="0.1 0.1 0"/> -->            <origin rpy="0 0 0" xyz="0 0 0"/>            <material name="black">                <color rgba="0 0 0 1"/>            </material>        </visual>        <collision>            <geometry>                    <cylinder length="${length_wheel}" radius="${radius_wheel}"/>            </geometry>        </collision>        <xacro:default_inertial mass="1"/>    </link>    <link name="wheel_2">        <visual>                <geometry>                    <cylinder length="${length_wheel}" radius="${radius_wheel}"/>                </geometry>            <!-- <origin rpy="0 1.5 0" xyz="-0.1 0.1 0"/> -->            <origin rpy="0 0 0" xyz="0 0 0"/>            <material name="black"/>        </visual>        <collision>            <geometry>                    <cylinder length="${length_wheel}" radius="${radius_wheel}"/>            </geometry>        </collision>        <xacro:default_inertial mass="1"/>    </link>    <link name="wheel_3">        <visual>                <geometry>                    <cylinder length="${length_wheel}" radius="${radius_wheel}"/>                </geometry>            <!-- <origin rpy="0 1.5 0" xyz="0.1 -0.1 0"/> -->            <origin rpy="0 0 0" xyz="0 0 0"/>            <material name="black"/>        </visual>        <collision>            <geometry>                    <cylinder length="${length_wheel}" radius="${radius_wheel}"/>            </geometry>        </collision>        <xacro:default_inertial mass="1"/>    </link>    <link name="wheel_4">        <visual>                <geometry>                    <cylinder length="${length_wheel}" radius="${radius_wheel}"/>                </geometry>        <!--    <origin rpy="0 1.5 0" xyz="-0.1 -0.1 0"/> -->            <origin rpy="0 0 0" xyz="0 0 0" />            <material name="black"/>        </visual>        <collision>            <geometry>                    <cylinder length="${length_wheel}" radius="${radius_wheel}"/>            </geometry>        </collision>        <xacro:default_inertial mass="1"/>    </link> <joint name="base_to_wheel1" type="continuous">   <parent link="base_link"/>   <child link="wheel_1"/>   <origin rpy="1.5707 0 0" xyz="0.1 0.15 0"/>   <axis xyz="0 0 1" /> </joint> <joint name="base_to_wheel2" type="continuous">   <axis xyz="0 0 1" />   <anchor xyz="0 0 0" />   <limit effort="100" velocity="100" />   <parent link="base_link"/>   <child link="wheel_2"/>   <origin rpy="1.5707 0 0" xyz="-0.1 0.15 0"/></joint> <joint name="base_to_wheel3" type="continuous">   <parent link="base_link"/>   <axis xyz="0 0 1" />   <child link="wheel_3"/>   <origin rpy="1.5707 0 0" xyz="0.1 -0.15 0"/> </joint> <joint name="base_to_wheel4" type="continuous">   <parent link="base_link"/>   <axis xyz="0 0 1" />   <child link="wheel_4"/>   <origin rpy="1.5707 0 0" xyz="-0.1 -0.15 0"/> </joint></robot>

3.新建并编辑.launch脚本文件

a)在工程文件夹下新建文件夹mkdir launch
b)新建文件display_xacro.launch并编辑如下

<launch>        <arg name="model" />        <arg name="gui" default="False" />        <param name="robot_description" command="$(find xacro)/xacro.py $(find myrobot)/urdf/robot1_base.xacro" />        <param name="use_gui" value="$(arg gui)"/>        <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" />        <node name="rviz" pkg="rviz" type="rviz" args="-d $(find urdf_tutorial)/urdf.rviz" /></launch>

注意这行代码:

.launch文件是个脚本文件,这行代码robot_description表示机器人模型描述,command表示参数,
find xacro表示寻找包,(find myrobot)/urdf/robot1_base.xacro 实际上表示的是模型的绝对路径,将这行代码用.xacro模型的绝对路径表示也是一样的。

4.使用rviz显示模型

控制台输入命令

roslaunch myrobot display_xacro.launch gui:=true

可以显示模型。

0 0
原创粉丝点击