AGV 的ROS功能包

Mj23366 08d5a1f4cc first commit 2 weeks ago
.vscode 08d5a1f4cc first commit 2 weeks ago
base_msgs 08d5a1f4cc first commit 2 weeks ago
cartographer_ros 08d5a1f4cc first commit 2 weeks ago
costmap_2d 08d5a1f4cc first commit 2 weeks ago
laser_h1 08d5a1f4cc first commit 2 weeks ago
laser_odom 08d5a1f4cc first commit 2 weeks ago
location_beam_model 08d5a1f4cc first commit 2 weeks ago
my_planner 08d5a1f4cc first commit 2 weeks ago
osqp 08d5a1f4cc first commit 2 weeks ago
server 08d5a1f4cc first commit 2 weeks ago
slam 08d5a1f4cc first commit 2 weeks ago
space_lib 08d5a1f4cc first commit 2 weeks ago
space_nav 08d5a1f4cc first commit 2 weeks ago
space_server_new 08d5a1f4cc first commit 2 weeks ago
space_slam 08d5a1f4cc first commit 2 weeks ago
std_lib 08d5a1f4cc first commit 2 weeks ago
yesense_imu 08d5a1f4cc first commit 2 weeks ago
CMakeLists.txt 08d5a1f4cc first commit 2 weeks ago
README.md 08d5a1f4cc first commit 2 weeks ago
cartographer_ros.zip 08d5a1f4cc first commit 2 weeks ago
costmap_2d.zip 08d5a1f4cc first commit 2 weeks ago
keyboard_control.py 08d5a1f4cc first commit 2 weeks ago

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 的底层代码,可供参考,注意涉及内容需保密。