ROS学习:创建机器人的urdf

ROS学习之路08:创建机器人的urdf(xacro)模型并通过rviz可视化_Hi, Robotics-CSDN博客_urdf可视化

1 创建工作空间

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
cd ..
catkin_make

注意:上面的 catkin_make 可能用 catkin_make -DPYTHON_EXECUTABLE=/usr/bin/python3

2 在工作空间中创建功能包

cd ~/catkin_ws/src
catkin_create_pkg custom_urdf roscpp urdf tf rviz geometry_msgs
cd ..
catkin_make
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

检查soucre的结果:

printenv | grep ROS

 3 向功能包添加机器人的urdf模型

roscd custom_urdf
mkdir rviz
mkdir launch
mkdir urdf && cd urdf
gedit four_wheels_car.urdf

four_wheels_car.urdf文件添加如下的内容:

*下面的资料综合看,能比较全面入门urdf模型的rviz可视化

 检查urdf文件的合适性。

check_urdf   four_wheels_car.urdf

显示urdf的数据

urdf_to_graphiz four_wheels_car.urdf

evince four_wheels_car.pdf

4 编写launch启动文件

roscd custom_urdf/launch
gedit view_car.launch

黏贴代码:

<launch>
    <arg name = "model"/>
    <param name = "robot_description" textfile = "$(find custom_urdf)/urdf/four_wheels_car.urdf"/>
    <param name = "use_gui" value = "true"/>

    <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 = "rviz"
          pkg = "rviz"
          type = "rviz"
          args = "-d $(find custom_urdf)/rviz/urdf.rviz"
          required = "true"/>
</launch>

注意:节点rviz中的args参数加载功能包的 rviz 目录下的 .rviz 配置文件,因为一开始我们并没有配置rviz任何选项,所以该配置文件并不存在,只有当我们通过launch文件打开了rviz,通过配置rviz然后保存配置文件到功能包的rviz目录下,并将配置文件另存为urdf.rviz文件,当我们再次启动rviz节点的时候,rviz就会自动加载配置文件,我们就不需要手动设置了.

5 启动节点,通过rviz查看机器人模型

roslaunch custom_urdf view_demo_xacro.launch

已经显示出结果。

包存放路径:

6 向功能包添加机器人的xacro文件

pan_tilt.xacro

<?xml version="1.0" ?>
<robot name="pan_tilt" xmlns:xacro="http://ros.org/wiki/xacro">
    <xacro:property name = "base_link_length" value = "0.01"/>
    <xacro:property name = "base_link_radius" value = "0.2"/>
    <xacro:property name = "pan_link_length" value = "0.4"/>
    <xacro:property name = "pan_link_radius" value = "0.04"/>
    <xacro:property name = "tilt_link_length" value = "0.4"/>
    <xacro:property name = "tilt_link_radius" value = "0.04"/>

    <xacro:macro name = "inertial_matrix" params = "mass">
        <inertial>
            <mass value = "${mass}"/>
            <inertia ixx = "0.5" ixy = "0.0" ixz = "0.0"
                     iyy = "0.5" iyz = "0.0"
                     izz = "0.5"/>
        </inertial>
    </xacro:macro>

    <link name = "base_link">
        <visual>
            <geometry>
                <cylinder length = "${base_link_length}" radius = "${base_link_radius}"/>
            </geometry>
            <origin xyz = "0 0 0" rpy = "0 0 0"/>
            <material name = "yellow">
                <color rgba = "1 1 0 1"/>
            </material>
        </visual>
        <collision>
            <geometry>
                <cylinder length="${base_link_length+0.02}" radius="0.2"/>
            </geometry>
            <origin rpy="0 0 0" xyz="0 0 0"/>
        </collision>
        <xacro:inertial_matrix mass="1"/>
    </link>


    <joint name="pan_joint" type="revolute">
        <parent link="base_link"/>
        <child link="pan_link"/>
        <origin xyz="0 0 0.1"/>
        <axis xyz="0 0 1" />
        <limit effort="300" velocity="0.1" lower="-3.14" upper="3.14"/>
        <dynamics damping="50" friction="1"/>
    </joint>
    <link name="pan_link">
        <visual>
            <geometry>
                <cylinder length="${pan_link_length}" radius="${pan_link_radius}"/>
            </geometry>
            <origin rpy="0 0 0" xyz="0 0 0.09"/>
            <material name="red">
                <color rgba="0 0 1 1"/>
            </material>
        </visual>
        <collision>
            <geometry>
                <cylinder length="${pan_link_length}" radius="${pan_link_radius+0.02}"/>
            </geometry>
            <origin rpy="0 0 0" xyz="0 0 0.09"/>
        </collision>
        <xacro:inertial_matrix mass="1"/>
    </link>


    <joint name="tilt_joint" type="revolute">
        <parent link="pan_link"/>
        <child link="tilt_link"/>
        <origin xyz="0 0 0.2"/>
        <axis xyz="0 1 0" />
        <limit effort="300" velocity="0.1" lower="-4.64" upper="-1.5"/>
        <dynamics damping="50" friction="1"/>
    </joint>
    <link name="tilt_link">
        <visual>
            <geometry>
                <cylinder length="${tilt_link_length}" radius="${tilt_link_radius}"/>
            </geometry>
            <origin rpy="0 1.5 0" xyz="0 0 0"/>
            <material name="green">
                <color rgba="1 0 0 1"/>
            </material>
        </visual>
        <collision>
            <geometry>
                <cylinder length="${tilt_link_length}" radius="${tilt_link_radius+0.2}"/>
            </geometry>
            <origin rpy="0 1.5 0" xyz="0 0 0"/>
        </collision>
        <xacro:inertial_matrix mass="1"/>
    </link>

</robot>

view_demo_xacro.launch

<launch>
    <arg name="model"/>
    <param name="robot_description"
           command="$(find xacro)/xacro --inorder $(find custom_urdf)/urdf/pan_tilt.xacro"/>

    <param name="use_gui" value="true"/>

    <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="rviz"
          pkg="rviz"
          type="rviz"
          args="-d $(find custom_urdf)/urdf.rviz"
          required="true" />
</launch>

在rviz中查看机器人模型

roslaunch custom_urdf view_demo_xacro.launch

我们可以把 view_demo_xacro.launch 文件中的如下内容:
<param name="robot_description" command="$(find xacro)/xacro --inorder $(find custom_urdf)/urdf/pan_tilt.xacro"/>
换成:
<param name="robot_description" command="$(find xacro)/xacro $(arg model)"/>
这样我们可以通过传入参数来加载机器人模型:

roscd custom_urdf
roslaunch custom_urdf view_demo_xacro.launch model:=urdf/pan_tilt.xacro

完成了机器人简单的urdf和xacro文件的编写
Enjoy It!
 

参考文献:

【1】https://blog.csdn.net/l1216766050/article/details/79586425#commentBox

【2】ROS学习之路08:创建机器人的urdf(xacro)模型并通过rviz可视化【*下面的资料综合看,能比较全面入门urdf模型的rviz可视化】
【3】ros模型建立——urdf 【下面这篇有报错的解决方法】
【4】urdf文件在rviz中显示的launch文件配置【这篇文章有launch文件的详细解释】

【5】https://zhuanlan.zhihu.com/p/67741739

【6】将xacro格式文件转换为urdf格式并检查格式是否正确常用方式 - 木鸡 - 博客园
【7】康娜喵的博客_CSDN博客

猜你喜欢

转载自blog.csdn.net/gongdiwudu/article/details/119953372