ROS · 机器人笔记

xacro+rviz 基础

2018-09-09  本文已影响687人  DIO哒

这篇文章备忘的主要内容
1.一个xacro文件的example
2.在rviz里显示这个模型


最终完成的情况

0.准备工作
先在工作空间中建一个包,名字随便取,主要依赖urdf包
建好之后在其中创建meshes(用来存放3d模型文件,stl,dae等),launch(用来存放launch文件和rviz配置文件)等文件夹


弄好之后大概这样

之后照常catkin_make以及rospack profile

1.完整的xacro文件+解析
mnm.xacro

<?xml version="1.0"?>
<robot name="mnm" xmlns:xacro="http://www.ros.org/wiki/xacro">
    <link name="base_link">
        <visual>
            <origin rpy="0 0 0" xyz="0 0 0" />
            <geometry>
                <box size="1 1 1"/>
            </geometry>
        </visual>
    </link>
    <joint name="base_link_to_link_01" type="revolute">
        <axis xyz="0 0 1" />
        <limit effort="1000.0" lower="-3.14" upper="3.14" velocity="0.5"/>
        <!-- let me explain these two lines above(12 and 13)
        <axis xyz="0 0 1" />
        <limit effort="1000.0" lower="-3.14" upper="3.14" velocity="0.5"/>
        because it's a revolute joint,so the axis means it can routate around z axis,
        and the 3.14 means 180 degree
        -->
        <origin rpy="0 0 0" xyz="0 0 0.5"/>
        <!-- and why the  xyz ="0 0 0.5" 
        because the base_link 's origin is "0 0 0",and the height is 1,so the top of it is 0.5
        -->
        <parent link="base_link" />
        <child link="link_01"/>
    </joint>
    <link name="link_01">
        <visual>
            <origin rpy="0 0 0" xyz="0 0 0.2" />
            <geometry>
                <cylinder radius="0.35" length="0.4" />
            </geometry>
        </visual>
    </link>

</robot>

解释:
ROS里我们想为机器人建模需要一个urdf文件。
xacro文件是用来简化urdf文件的,如果没有xacro,就会有很多不必要的重复性劳动,但是这个简单的xacro看上去和一个urdf也没什么区别。
如上图所见,这段urdf的意思是两个link,分别是作为底座的长方体base_link和上面的圆柱体link_01。
具体的解释在roswiki里搜索关键词“urdf/XML”,可以找到每个tag的具体细节。
http://wiki.ros.org/urdf/XML

2编写launch文件,启动rviz来显示这个模型

<launch>
    <param name="robot_description" command="$(find xacro)/xacro --inorder '$(find urdf_my_test)/urdf/mnm.xacro'"/>

    <node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher"/>
    <node name="rviz" pkg="rviz" type="rviz" args="-d $(find urdf_my_test)/launch/config.rviz" />
    <!-- <node name="rviz" pkg="rviz" type="rviz"/> --><!--一开始先不用args,等到设置好rviz之后另存为配置文件到launch文件夹里再用args,这样就不用每次都设置那么多了>
    <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher">
        <param name="use_gui" value="true"/>
    </node>
</launch>

等rviz启动完毕之后先将FixedFrame改为base_link


image.png

再点击下方Add按钮,添加一个RobotModel


image.png

可以看到之前在launch文件里传入的参数Robot Description已经在robotmodel里了


param name="robot_description"

而joint_state_publisher可以用来转动上面那个圆柱体的link


joint_state_publisher
添加好之后可以将配置文件另存为到launch文件夹里,以后再运行的时候在launch文件里的rviz节点下增加一个args(配置文件config.rviz的路径)就可以不用再设置一遍了。
上一篇 下一篇

猜你喜欢

热点阅读