自建URDF模型小车实现SLAM与导航(一)
发布日期:2021-05-04 19:17:40 浏览次数:23 分类:技术文章

本文共 4060 字,大约阅读时间需要 13 分钟。

完成自建小车URDF的导航

0. 创建自己的工作区

打开终端:

mkdir -p mycar_ws/srccd mycar_ws/srccatkin_create_pkg mycar_descriptionscd mycar_wscatkin_make

最后在.bashrc中添加环境变量

gedit ~/.bashrcsource ~/mycar_ws/devel/setup.bash

1. 自写小车模型

Unified Robot Description Format——统一机器人描述格式

创建自己的urdf模型
参考网址:
参考网址:
urdf的形式如下图,由link和joint组成

在这里插入图片描述

这是一个机械臂的描述,但是我们要做的是小车,带有一个车身,四个轮子,所以稍做修改

1.1 我们创建一个文件:my_car_01.urdf

解释一下使用的URDF的几个参数

link:描述各个部件,具体参数详见
joint:描述关节,具体参数详见
在mycar_description下创建urdf文件夹,创建my_car_01.urdf

打开终端输入:

# 检查urdf文件是否正确check_urdf my_car_01.urdf

在这里插入图片描述

# 观察link之间的关系urdf_to_graphiz my_car_01.urdf

在这里插入图片描述

1.2 接下来添加link的信息:

visual:描述模块的视觉效果

geometry:描述模块的形状和大小
origin:用来描述模块的位置

我们继续创建一个文件:my_car_02.urdf

看看这个urdf什么样子:

roslaunch urdf_tutorial display.launch model:=把文件拖到这里

在这里插入图片描述可以看到如下图所示:

在这里插入图片描述

细节解释,先以base_link为例:

坐标系为右手系,box size="0.2 0.3 0.1"的意思就是模型的形状为box,并且xyz的长度为0.2,0.3,0.1

origin用来描述模块的位置:rpy是什么意思?

在这里插入图片描述

对于rpy还是不太理解可以看:

这句话表示我们的小车没有旋转,模型的几何中心坐标为(0,0,0.05)

接下来看看轮子:

轮子类似:cylinder是圆,其中length是高,radius半径

我设置为rpy为"0 1 0"做测试,发现轮子变这样了:

在这里插入图片描述发现rpy这个东西在urdf中定义的旋转0.1==6°所以1.5就是逆时针旋转90°

在文件目录下打开终端输入以下内容,可以看到上图所示:

roslaunch urdf_tutorial display.launch model:=my_car_02.urdf

1.3 然后我们给小车上色

使用material 标签并且设置color 标签

创建my_car_03.urdf

细节解释:

rgb:white:1 ------ black:0

a:色彩空间

上色之后的效果:

在这里插入图片描述

1.4 扩展—关于使用Xacro

由于urdf有大量的重复代码,我们可以使用Xacro来定义一个宏定义:

代码形式和C语言宏定义相似
我们创建一个my_car_04.xacro
看看代码就能懂,这个东西就是用来简化代码

1.5 使用过的指令介绍

check_urdf:检查urdf格式是否正确

urdf_to_graphiz:将urdf文件转换为pdf格式,可以看到关节之间的关系

roslaunch urdf_tutorial display.launch model:='your urdf path':用rviz启动查看urdf模型

urdf放的位置:mycar_descriptions/urdf

2.创建launch文件启动小车

2.1 创建launch文件启动rviz显示小车

根据上一讲中urdf_tutodial功能包中的display.launch文件,创建专门启动我们小车模型的launch文件

看一看display.launch

重点关注<arg name="model" default="$(find urdf_tutorial)/urdf/01-myfirst.urdf"/>

修改为:<arg name="model" default="$(find mycar_description)/urdf/my_car_03.urdf"/>

在mycar_description文件夹下创建launch文件夹,并且创建my_car_rviz.launch,写入修改后的内容

打开launch报错找不到包
执行下面语句将包添加到ROS环境变量中

export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:/home/tianbot/mycar_ws/src

那么为什么一定要将包的路径加入ROS_PACKAGE_PATH中去呢?

我的理解是由于在ROS的计算图级中,由于ROS 会创建一个连接到所有进程的网络。你不告诉ROS你是谁?ROS怎么对包进行连接和管理?
回答者:

再启动一次,成功

在这里插入图片描述

2.2 创建launch文件启动gazebo显示小车

新建一个功能包,用于gazebo方面的启动,自建world:

cd mycar_ws/srccatkin_create_pkg mycar_gazebo

下一部分

3.TODO向小车发送速度指令

4.TODO激光slam建图

5.TODOmove_base导航功能

6.TODO语音控制功能

上一篇:视觉SLAML1作业
下一篇:CubeSLAM学习

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2025年04月06日 09时57分08秒