AGV 的ROS功能包

Mj23366 08d5a1f4cc first commit há 10 meses atrás
.vscode 08d5a1f4cc first commit há 10 meses atrás
base_msgs 08d5a1f4cc first commit há 10 meses atrás
cartographer_ros 08d5a1f4cc first commit há 10 meses atrás
costmap_2d 08d5a1f4cc first commit há 10 meses atrás
laser_h1 08d5a1f4cc first commit há 10 meses atrás
laser_odom 08d5a1f4cc first commit há 10 meses atrás
location_beam_model 08d5a1f4cc first commit há 10 meses atrás
my_planner 08d5a1f4cc first commit há 10 meses atrás
osqp 08d5a1f4cc first commit há 10 meses atrás
server 08d5a1f4cc first commit há 10 meses atrás
slam 08d5a1f4cc first commit há 10 meses atrás
space_lib 08d5a1f4cc first commit há 10 meses atrás
space_nav 08d5a1f4cc first commit há 10 meses atrás
space_server_new 08d5a1f4cc first commit há 10 meses atrás
space_slam 08d5a1f4cc first commit há 10 meses atrás
std_lib 08d5a1f4cc first commit há 10 meses atrás
yesense_imu 08d5a1f4cc first commit há 10 meses atrás
CMakeLists.txt 08d5a1f4cc first commit há 10 meses atrás
README.md 08d5a1f4cc first commit há 10 meses atrás
cartographer_ros.zip 08d5a1f4cc first commit há 10 meses atrás
costmap_2d.zip 08d5a1f4cc first commit há 10 meses atrás
keyboard_control.py 08d5a1f4cc first commit há 10 meses atrás

README.md

1. 使用

vnc viewer 远程登录桌面

RealVNC Viewer软件中使用对应ip地址登录: 笔记本连接wifi:AGV,12345678,ip: 10.0.0.1 笔记本接网线至交换机:ip: 10.0.1.1

ssh 终端远程登录

ssh -Y uestc@10.0.0.1 或 ssh -Y uestc@10.0.1.1

启动基本服务

启动雷达驱动、server节点(数据库、地图保存、与PLC通信等)

cd ros_ws
source ./devel/setup.bash
roslaunch server start.launch

键盘控制小车运动

首先需要启动server节点

cd ros_ws
python keyboard_control.py

建图

cd ros_ws
source ./devel/setup.bash
roslaunch server slam.launch
roslaunch server Map_saver.launch  # 保存地图

导航

cd ros_ws
source ./devel/setup.bash
roslaunch server navigation_start.launch

2. 各文件说明

  • ROS_WS: 代表 “ROS Workspace”,用于组织 ROS 的所有相关文件
  • .vscode: Visual Studio Code 编辑器相关,包含用户自定义的项目配置文件
  • build: 包含从源代码生成的目标文件和构建过程的缓存数据
  • devel: 存放编译后生成的可执行文件、库文件以及相关开发资源
  • src: 源代码目录,存放项目的主要功能模块和代码文件
  • Costmap_2d: 用于生成机器人路径规划的二维代价地图(costmap)
  • Laser_h1: 激光雷达上位机驱动和数据处理
  • Laser_odom: 基于 fast-gicp 根据激光雷达数据计算机器人的位姿变换
  • Location_beam_model: beam model 定位算法
  • planner: 规划和控制算法
  • osqp: QP 求解器
  • server: AGV 相关服务功能(与 PLC、QT 等通信模块)
  • slam: Karto slam 算法
  • CMakeLists.txt: CMake 编译文档
  • keyboard_control.py: 键盘控制机器人运动

3. 相关资料链接

  1. B站ROS教程:【Autolabor初级教程】ROS机器人入门 对应的文档资料
  2. 定位算法参考:【这么简单好用的 ROS 定位方法,确定不要试一下吗?!】
  3. karto slam算法参考:Karto源码解析(一):工程运行 - 卢涛的文章 - 知乎

4. 相关导航说明

记录人:徐盟杰,记录时间:2025年5月20日

  1. 定位算法当前使用的是上方 B 站参考项目中的 beam model,定位质量受机器人运动速度、栅格地图分辨率、建图与实际环境之间的差异等因素影响。整体定位效果:直线运动时在约 0.8 m/s 范围内表现尚可,原地旋转控制在 0.6 rad/s 以内也较稳定。若需进一步提高定位精度或减少抖动,建议引入多传感器融合。目前的导航系统(定位、建图、规划、控制)仅基于激光雷达数据。例如可结合驱动轮转速反推的里程计。目前使用的里程计由激光雷达通过 fast-gicp 匹配生成,计算开销较大,因此我通过底盘控制信号反推出一个 fake_odom 提供给其他模块使用。但 fake_odom 在底盘接收了控制信号但实际未执行运动的场景下数据失真,可能干扰其他模块的工作。

  2. 定位算法也可以切换为 amcl,参数在对应的 launch 文件中可调。我对其进行了初步调参,定位效果与 beam model 相近。amcl 在实际项目中应用更广,理论上鲁棒性也更高。但本项目中可能因 fake_odom 的问题,表现不如预期。amcl 在复杂环境中可能出现定位突然跳变的情况。总体来看,若希望定位系统稳定可靠,仍需基于多传感器融合。可引入但不限于陀螺仪、GPS、视觉等传感器。

  3. SLAM 算法采用 karto,总体质量良好,建图效果依赖机器人运动轨迹及环境特征。建议在建图过程中以小范围螺旋式路径进行移动。建图路线规划建议结合源码和建图原理理解之后进行优化。

  4. 规划模块中,my_planner 包为我学位论文相关代码,包含以下算法:全局路径规划使用 Hybrid A*;局部轨迹规划使用 TEB(基于 L-BFGS);轨迹跟踪采用 MPC(基于 OSQP);运动决策算法为自研框架 + 改进版 Hybrid A*。其中运动决策部分尚属初始版本,其余模块代码相对完整,并已整理(本包后续将在单独仓库中维护,此仓库不再更新)。所设算法主要面向阿克曼底盘机器人,当前 AGV 使用的是二轮差速驱动,整体控制结构更简,运行算力也有限,使用本套算法并不适配。

建议 AGV 项目中使用 ROS 官方的 move_base 模块,集成的全局 / 局部代价地图、A、DWA 等组件更加成熟。推荐组合为 A + DWA,具备较小算力消耗和良好鲁棒性,适合工业 AGV 使用。

  1. 控制算法方面,无论 MPC 还是 DWA,其输出的底盘控制指令质量一般。初步判断原因在于缺乏实时准确的机器人自身速度信息。当前控制器基于里程计数据进行计算,如采用 fast-gicp 得到的里程计,因其本身抖动,会进一步放大速度估计波动,从而影响控制指令的稳定性。

  2. 当前存在的问题包括:结构方面,部分机械结构的螺丝出现松动或脱落,调试过程中偶尔发现地面掉落的螺丝 / 螺母,存在异响但在嘈杂车间中无法定位来源;算法方面,建议引入从驱动电机反推的里程计数据,并据此进一步调优各算法模块。

  3. 编写算法模块时应尽量遵循 ROS 的标准命名规范与数据类型,否则在对比、接入其他算法组件时会增加不必要的适配成本。

  4. 何师兄提供的是河狸公司 AGV 的底层代码,可供参考,注意涉及内容需保密。