- 方法选择
- 准备工作
- 创建工作空间并初始化
- 进入 src 创建 ros 包并添加依赖
- 在新建立的racebot_description 功能包下建立如下文件夹
- 建立URDF模型
- 配置IDE
- 建立base_link(底盘1)
- 建立base_link2(底盘2)
- 建立base_link3(支架)
- 添加左前轮以及左前轮摆转
- 配置后轮
- 配置传感器
- 配置深度相机与双线激光雷达与IMU
- 所有程序集成
- 测试
- 功能包网盘链接
- 作者的话
参考资料:link.
link
最终模型演示:
其实建立模型的方式有许多种,譬如说:
①通过SW绘制三维图形,再转成URDF文件类型
②直接通过.urdf文件类型,进行模型搭建。
本项目我们采用第二种方法。并非因为作者三维建模基础不行,实在是因为作者身为机械专业学生,三维画的实在是太多,所以想换种方法。
mkdir -p demo06_ws/src cd demo06_ws catkin_make
上述命令,首先会创建一个工作空间以及一个 src 子目录,然后再进入工作空间调用 catkin_make命令编译。
进入 src 创建 ros 包并添加依赖cd src catkin_create_pkg racebot_description roscpp rospy std_msgs urdf xacro
注意:urdf xacro这两个依赖必须要添加,即catkin_create_pkg racebot_description roscpp rospy std_msgs urdf xacro最后两个urdf xacro不可省略!
上述命令,会在工作空间下生成一个功能包,该功能包依赖于 roscpp、rospy 与 std_msgs,其中roscpp是使用C++实现的库,而rospy则是使用python实现的库,std_msgs是标准消息库,创建ROS功能包时,一般都会依赖这三个库实现。urdf xacro是进行建立模型必须的依赖。
注意: 在ROS中,虽然实现同一功能时,C++和Python可以互换,但是具体选择哪种语言,需要视需求而定,因为两种语言相较而言:C++运行效率高但是编码效率低,而Python则反之,基于二者互补的特点,ROS设计者分别设计了roscpp与rospy库,前者旨在成为ROS的高性能库,而后者则一般用于对性能无要求的场景,旨在提高开发效率。
其中,config用来存储rviz文件,launch用来建立并集成启动文件,meshes用来渲染,urdf用来建立模型文件。最后.txt与.xml是建立功能包自动生成的,不用去管,但也别改,暂时我们用不到。
博主用的是vs code,可以参考文章首链接一link,下载并配置好即可。配置好的页面如下:
我们需要创建⼀个URDF⽂件与能让模型在rviz中显⽰的launch⽂件,⽅便我们创造模型。以创建小⻋base_link模型为例:
在urdf⽂件夹中创建urdf与xacro文件夹。在urdf(第二个urdf)文件夹中建立racebot.urdf⽂件,⾸先创建base_link(底盘1),由于根link不能包含碰撞属性,否则gazebo仿真中会报错,所以我们将base_footprint(底盘在地面的投影)作为根link,并且将base_footprint设置为小⻋贴到地⾯的位置,由于该小⻋是1:1仿真的,所以base_link在base_footprint正上⽅70mm处,如下代码所⽰
注意因为本人用的是ROS noetic所以可以随意使用中文注释,如果读者有使用melodic或者kinetic或者其他,尽量把所有的中文注释去掉,避免报错。
接着在launch⽂件夹中创建⼀个可以将小⻋模型在rviz中显⽰的launch⽂件racebot_rviz.launch,并且能够加载上述urdf⽂件:
此时我们运⾏该launch⽂件:
roslaunch racebot_description racebot_rviz.launch
在打开的rviz中,坐标系选择base_footprint,add机器人模型。
同样的操作,代码如下
注意上端代码需要添加进之前racebot.urdf文件中,且只能由一个robot标签,具体合成代码如下,即包含base_link与base_link2的racebot.urdf文件如下:
此时我们运⾏该之前的launch⽂件:
roslaunch racebot_description racebot_rviz.launch
rviz依旧选择base_footprint为坐标系,画面如下:
urdf代码:
同样的操作,rviz画面如下:
在阿克曼仿真第⼀节的时候了解到要使前轮转向,以左前轮为例,需要给左前轮加⼀个绕Z轴转动的⾃由度,因此需要添加⼀个能够摆转的link,将其命名为steering_hinge,前轮通过与其连接能够实现绕Z轴转动,joint_type设置为revolute,转动幅度设置为-0.6rad–0.6rad,effort与velocity分别设置为50,1000以⽅便后续控制。
右前轮同理
值得注意的是需要修改joint标签内的origin标签,可以⼤致理解为左前轮在第⼀象限,右前轮为第四象限,X轴正⽅向为小⻋的前进⽅向。在配置URDF的时候,若仅仅是想要在RVIZ中观察编写的模型情况,可以在link标签中,先不需要编写collision标签,编写collision时需要计算该link的惯性矩阵参数,会较为繁琐,可以在确定模型装配情况后最后编写collision标签。计算惯性矩阵的⽅法如下:
链接: link.
rviz画面如图所示:
前轮配置完成后,配置后轮,后轮相对简单并不需要摆转,至于为什么,相信大多数人很清楚阿克曼的转动方式,所以并不需要摆转。
rviz画面如下:
所有程序集成
测试
roslaunch racebot_description racebot_rviz.launch
画面如下:
链接:https://pan.baidu.com/s/1kv5791Lcovu2SNxyeQluSA
提取码:2022
或直接点击下面超链接:
链接: link.
下载后直接拖到工作空间下的src目录下即可,注意拖进去后运行如下命令行
cd 工作空间名字 catkin_make作者的话
最近实在抽不了太多的时间,毕业设计还是很需要大量时间来打磨,忙完了这一阵子,把完整的制作过程发出来,到时候B站也会同步更新~~~~~~~~
We will part for see you again~~