从零开始仿真ROS小车(一)urdf模型+rviz可视化

打算把我学习ROS的过程记录整理成系列,第一个系列是从零开始仿真一辆小车,并实现运动控制、雷达、相机、SLAM建图、各种算法使用等功能,其中包含一些个人理解,有bug地方还请指正,共同学习。

全部代码已上传个人git账号Grizi_ju

0、实现过程

1、从零开始仿真ROS小车(一)urdf模型+rviz可视化
创建功能包、urdf、计算图、rviz
2、从零开始仿真ROS小车(二)在gazebo中显示小车模型
3、从零开始仿真ROS小车(三)运动控制、激光雷达仿真、深度相机仿真
4、从零开始仿真ROS小车(四)建图与导航

一、创建功能包

cd catkin_ws  #进入工作空间
catkin_create_pkg jubot_demo urdf xacro #创建功能包、添加依赖
cd jubot_demo/
mkdir urdf
mkdir launch
mkdir meshes #存放渲染机器人模型的文件
mkdir config #存放rviz配置的文件

从零开始仿真ROS小车(一)urdf模型+rviz可视化_第1张图片打开VS Code写两个文件
jubot_base.urdf(放urdf文件夹下)
display_jubot_base_urdf.launch(放launch文件夹下)
config里的rviz文件是保存生成的,不用写

二、urdf文件

Unified Robot Description Format,统一机器人描述格式,简称为URDF
模型的环节(link)与关节(joint)坐标关系,跟我的代码模型不匹配,仅供理解关系
从零开始仿真ROS小车(一)urdf模型+rviz可视化_第2张图片在基础模型之上,我们为机器人添加尺寸大小。由于每个环节的参考系都位于该环节的底部,关节也是如此,所以在表示尺寸大小时,只需要描述其相对于连接的关节的相对位置关系即可。URDF中的 origin 域就是用来表示这种相对关系。

如果我们为机器人的关节添加 axis 旋转轴参数,那么该机器人模型就可以具备基本的运动学参数。

注意代码中不能有中文注释


<robot name="jubot">
    
>
    <link name="base_link">   
        <visual> 
            <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/> 
            <geometry>  
                <cylinder radius="0.20" length="0.16"/>             
            geometry>
            <material name="yellow"> 
                <color rgba="1 0.4 0 1"/>  
            material>
        visual>
    link>

>
    <joint name="left_wheel_joint" type="continuous">   
        <origin xyz="0.0 0.19 -0.05" rpy="0.0 0.0 0.0"/> 
        <parent link="base_link"/>  
        <child link="left_wheel_link"/> 
        <axis xyz="0.0 1.0 0.0"/>  
    joint>

    <link name="left_wheel_link">
        <visual>
            <origin xyz="0.0 0.0 0.0" rpy="1.5707 0.0 0.0"/>
            <geometry>
                <cylinder radius="0.06" length="0.025"/>
            geometry>
            <material name="white">
                <color rgba="1 1 1 0.9"/>
            material>
        visual>
    link>
 
>
    <joint name="right_wheel_joint" type="continuous">
        <origin xyz="0.0 -0.19 -0.05"/>
        <parent link="base_link"/>
        <child link="right_wheel_link"/>
        <axis xyz="0.0 1.0 0.0"/>
    joint>

    <link name="right_wheel_link">
        <visual>
            <origin xyz="0.0 0.0 0.0" rpy="1.5707 0.0 0.0"/>
            <geometry>
                <cylinder radius="0.06" length="0.025"/>
            geometry>
            <material name="white">
                <color rgba="1 1.0 1.0 0.9"/>
            material>
        visual>
    link>


    <joint name="front_caster_joint" type="continuous">
        <origin xyz="0.18 0.0 -0.095" rpy="0.0 0.0 0.0"/>
        <parent link="base_link"/>
        <child link="front_caster_link"/>
        <axis xyz="0.0 1.0 0.0"/>
    joint>

    <link name="front_caster_link">
        <visual>
            <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
                <geometry>
                    <sphere radius="0.015"/>
                geometry>
                <material name="black">
                    <color rgba="0.0 0.0 0.0 0.95"/>
                material>
        visual>
    link>


    <joint name="back_caster_joint" type="continuous">
        <origin xyz="-0.18 0.0 -0.095" rpy="0.0 0.0 0.0"/>
        <parent link="base_link"/>
        <child link="back_caster_link"/>
        <axis xyz="0.0 1.0 0.0"/>
    joint>

    <link name="back_caster_link">
        <visual>
            <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
                <geometry>
                    <sphere radius="0.015"/>
                geometry>
            <material name="black">
                <color rgba="0.0 0.0 0.0 0.95"/>
            material>
        visual>
    link>
robot>

关于参数欧拉角rpy,是roll(滚转角)、pitch(俯仰角)、yaw(偏航角),分别对应绕x轴、y轴、z轴
从零开始仿真ROS小车(一)urdf模型+rviz可视化_第3张图片

三、launch文件

<launch>
	
	<param name="robot_description" textfile="$(find jubot_demo)/urdf/jubot_base.urdf" />

	
	<node name="joint_state_publisher_gui" pkg="joint_state_publisher_gui" type="joint_state_publisher_gui" />
	
	
	<node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" />
	
	
    <node name="rviz" pkg="rviz" type="rviz" args="-d $(find jubot_demo)/config/jubot_urdf.rviz" required="true" />  
launch>

四、图形化显示

安装一个检查urdf语法的工具:

sudo apt-get install liburdfdom-tools

在urdf文件夹下打开终端检查语法:

check_urdf jubot_base.urdf

从零开始仿真ROS小车(一)urdf模型+rviz可视化_第4张图片
在urdf文件夹下打开终端,图形化显示URDF模型

urdf_to_graphiz jubot_base.urdf

此时会生成两个文件,打开pdf文件

从零开始仿真ROS小车(一)urdf模型+rviz可视化_第5张图片

五、RVIZ可视化

启动launch文件
roslaunch jubot_demo display_jubot_base_urdf.launch
启动rviz
rviz
从零开始仿真ROS小车(一)urdf模型+rviz可视化_第6张图片
以上圆形步骤就完成了,接下来我们再写一个方形小车

六、再写一个urdf模型

依然是一个urdf文件和launch文件
跟上面的差不多,只是在参数上稍微做了修改,结构还是一个底座4个轮子
从零开始仿真ROS小车(一)urdf模型+rviz可视化_第7张图片从零开始仿真ROS小车(一)urdf模型+rviz可视化_第8张图片
调节左下角参数轮子会转动

从零开始仿真ROS小车(一)urdf模型+rviz可视化_第9张图片第二版–加了柱子和第二层
从零开始仿真ROS小车(一)urdf模型+rviz可视化_第10张图片

自己随意发挥吧!
修改参数,修改结构,就可以仿真出自己想要的小车模型了。

下一篇:从零开始仿真ROS小车(二)在gazebo中显示小车模型

你可能感兴趣的:(ROS编程,vscode)