一.前言
大家好呀,从今天开始我将手把手跟大家组装一台带有机械臂可以建图导航的复合机器人,小到每一颗螺丝,大到每一个部件我都将记录到这系列博客中,当然啦,本人还是在研究生上学期间,所以可能有很多知识还没有学习到,希望大家可以共同学习,好的,话不多说,马上开始!
本篇博客因为内容很多,所以会一直更新内容在这篇博客
二.ros2实战
注意事项
系统环境与硬件清单
系统环境
ubuntu22.04+ros2 humble
介绍一下我使用的各部分硬件(若需驱动包可私信我)
雷达
雷达我使用的是镭神c16 V4.0版本
底板
底板使用的是轮趣科技的底板
工控机
工控机使用的是天虹小主机
摄像头
摄像头我使用的是微软的Azure Kinect
小车轮胎和电机
小车轮胎我是从儿童履带车所拆卸下来的履带
小车电机是两个有刷电机
车型切换
这里我的是mini_tank车型
1
确认是否是阿克曼小车(若不是则忽略这步)
镜像文件中默认车型为
mini_mec
,若用户使用车型为阿克曼车型,需要在
wheeltec_ros2/src/turn_on_wheeltec_robot/launch/turn_on_wheeltec_robot.launch.py
文件中的
akmcar
参数修改为:
”true”
,修改完成后如图所示:
2
选择小车 urdf 模型
需要在文件中修改对应的小车模型,修改文件:
wheeltec_ros2/src/turn_on_wheeltec_robot/launch/robot_mode_description.launch.py
最末行,修改
ld.add_action
中的参数为
mini_akm
即可。修改完后文件如图所示:
3
选择导航的参数文件
不同小车模型对应的外观参数以及膨胀半径不一致,阿克曼模型的小车还会 涉及到最小转弯半径的参数,所以在调试导航前请确认导航参数与小车模型是否 匹配。修改文件中的 my_param_file 参数:
/home/wheeltec/wheeltec_ros2/src/wheeltec_robot_nav2/launch/ wheeltec_nav2.launch.py
my_param_file
参数文件名可以在注释查询,如
mini_tank
小车,将 my_param_file 的值改为
param_mini_tank.yaml
即可。修改后的文件如图所示。
4
膨胀半径
膨胀半径即围绕致命障碍物膨胀成本地图的半径。不同用户的导航环境不一 样,导航时可能需要修改膨胀半径这一参数。以 mini_akm
小车为例,修改文件~/wheeltec_ros2/src/wheeltec_robot_nav2/param/wheeltec_param/param_mini_tank. yaml,
在文件中搜索
“inflation_radius”
这一参数,膨胀半径单位默认为米,用户可以按需修改。
5
修改完文件后记得编译
和 ROS1 不同的是,ROS2 中修改 launch 文件需要编译后才能生效。
确认以 上三个修改车型的步骤操作完成后,进入工作空间路径下编译:
cd ~/wheeltec_ros2
colcon build --packages-select turn_on_wheeltec_robot
colcon build --packages-select wheeltec_nav2
雷达切换
WHEELTEC ROS2 小车除了支持常用的思岚雷达之外,还支持镭神的
M10
、 N10(网口和串口版
)
雷达,和乐动雷达
LD14
、
LD06
、
LD19
雷达。
若使用其它款式雷达,需要在此文件夹下进行更换:
wheeltec_ros2/src/turn_on_wheeltec_robot/launch/wheeltec_lidar.launch.py
在文件最后一行修改参数,可选参数为:
Lsm10P
、
Lsm10
、
Lsn10P
、
Lsn10
、 Ld14、
Ld06
。
若使用镭神
LSN10 雷达,这里我的是镭神c16雷达,功能包需要自行放入工作空间并且修改对应代码,我自行创建了参数Ls_test,则修改参数后文件内容如下:
修改文件后进行编译:
cd ~/wheeltec_ros2
colcon build --packages-select turn_on_wheeltec_robot
1 使用镭神雷达注意事项
使用 镭神雷达
除了要修改
wheeltec_lidar.launch.py
文件之外,还需要 修改 TF
静态转换的参数,因为镭神
雷达扫描的方向与常用雷达不一样,所以需要在 TF 静态转换中把方向调转。
修改文件:
wheeltec_ros2/src/turn_on_wheeltec_robot/launch/ robot_mode_description.launch.py
选择对应的车型
GroupAction
,修改
base_to_laser
节点的
x
方向参数,以
mini_tank 小车为例,则在将此处改为1.57 :
修改文件后进行编译:
cd ~/wheeltec_ros2
colcon build --packages-select turn_on_wheeltec_robot
2 雷达角度屏蔽
使用镭神雷达进行角度屏蔽,需要修改雷达对应的参数文件。需要修改文件
~/wheeltec_ros2/src/3.LSLIDAR_CX_ROS_V4.2.3_230403/lslidar_ros/lslidar_driver/params/lslidar_c16.yaml
修改文件后进行编译:
cd ~/wheeltec_ros2
colcon build --packages-select turn_on_wheeltec_robot
ROS2 功能包调试
Turn_on_wheeltec_robot[机器人底层驱动]
turn_on_wheeltec_robot 功能包的启动文件主要有:
base_serial.launch.py
是启动底盘控制节点,实现
ROS
主控与
STM32 的通信
robot_mode_description.launch.py
用于导入小车的
urdf
模型,包括传感器和
机器人底层的静态
tf
转换;
robotandlidar.launch.py 文件是打开底盘控制和雷达节点,主要用于验证传感器是否正常;
turn_on_wheeltec_robot.launch.py
包含底盘控制、传感器与
base_footprint
的TF 静态转换、机器人描述文件以及融合滤波的功能。
wheeltec_lidar.launch.py
为
WHEELTEC ROS2
小车的雷达控制节点,可以在这个文件中切换雷达型号;
turn_on_wheeltec_robot
功能包主要用于启动底盘,运行指令为:
ros2 launch turn_on_wheeltec_robot turn_on_wheeltec_robot.launch.py
正常运行如图所示:
此时打开
RVIZ2
可以看到小车的
urdf
模型:
需要检查 RobotModel 中的 Description 有没有选中 话题,话题为/robot_description。
Wheeltec_robot_slam[2D 建图]
wheeltec_robot_slam 功能包主要用于
WHEELTEC ROS2
小车进行
2D
建图 gmapping 建图算法、
slam_toolbox
建图算法和
cartographer
建图算法。运行建图 时可以使用
蓝牙/航模/键盘控制节点/USB 手柄控制
小车运动。(这里我使用键盘控制)
1 gmapping 建图
slamgapping
软件包包含用于
OpenSlam
的
Gmapping
的
ROS
包装器,它提供了基于激光的 SLAM
(同时定位和映射),作为
slam_gmapping
的
ROS
节点。
使用
Gmapping
算法进行 2D 建图,指令如下。
ros2 launch slam_gmapping slam_gmapping.launch.py
建图页面如图
所示:
2 slam_toolbox 建图(未成功)
slam_toolbox
是
2D SLAM
构建的一组工具和功能,该软件包将允许用户完 全序列化要重新加载的 SLAM
映射的数据和姿态图,以继续映射,本地化,合 并或进行其他操作。这个建图算法支持构建大地图。(该软件包已在 5
倍以上 实时高达约 30,000
平方英尺和
3
倍实时高达约
60,000
平方英尺的地图构建 方面进行了基准测试。使用的最大面积是 200,000 平方英尺。)
使用
slam_toolbox
进行
2D
建图,指令如下:
ros2 launch wheeltec_slam_toolbox online_async.launch.py
建图界面如图所示:
3.cartographer 建图
Cartographer 是一个跨多个平台和传感器配置提供
2D
和
3D
实时同步定 位和映射 (SLAM)
的系统。
Cartographer 建图时会发布
odom_combined->base_footprint
的转换,所以运Cartographer
时需要将底层打开的卡尔曼滤波器关掉。在文件中有相关参数:
/wheeltec_ros2/src/wheeltec_robot_slam/wheeltec_cartographer/launch/cartographer.launch.py
如果用户在使用
Cartographer
建图时需要卡尔曼滤波,则将参数
carto_slam 的值改为 false
即可。
修改文件后进行编译:
cd ~/wheeltec_ros2
colcon build --packages-select turn_on_wheeltec_robot
打开
Cartographer
建图:
ros2 launch wheeltec_cartographer cartographer.launch.py
建图效果如图所示:
4 保存地图
Map Server
用于处理堆栈的地图加载请求并托管地图主题的服务器,同时 它也是一个地图
保存
服务器,根据服务请求保存地图。存在一个类似于
ROS 1 的地图保护程序 CLI
,用于单个地图保存。
WHEELTEC ROS2
机器人保存地图指令为:
ros2 launch wheeltec_nav2 save_map.launch.py
运行
save_map.launch.py
文件调用
Map Server
服务,将地图保存在
~/wheeltec_ros2/src/wheeltec_robot_nav2/map
目录下。
可以在save_map.launch.py更改保存路径:
建图完成后运行保存地图指令示例:
此时可以在
~/wheeltec_ros2/src/wheeltec_robot_nav2/map
目录下看到地图文件 WHEELTEC.pgm
和
WHEELTEC.yaml
,双击可查看地图图像。
指令保存地图:
ros2 run nav2_map_server map_saver_cli -f <map_dir>/<map_name>