当前位置:   article > 正文

从头手搓一台ros2复合机器人(带机械臂)_lsn10p

lsn10p

一.前言

        大家好呀,从今天开始我将手把手跟大家组装一台带有机械臂可以建图导航的复合机器人,小到每一颗螺丝,大到每一个部件我都将记录到这系列博客中,当然啦,本人还是在研究生上学期间,所以可能有很多知识还没有学习到,希望大家可以共同学习,好的,话不多说,马上开始!

本篇博客因为内容很多,所以会一直更新内容在这篇博客

二.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>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/630648
推荐阅读
  

闽ICP备14008679号