## 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通信等) ```bash cd ros_ws source ./devel/setup.bash roslaunch server start.launch ``` ### 键盘控制小车运动 首先需要启动server节点 ```bash cd ros_ws python keyboard_control.py ``` ### 建图 ```bash cd ros_ws source ./devel/setup.bash roslaunch server slam.launch roslaunch server Map_saver.launch # 保存地图 ``` ### 导航 ```bash 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机器人入门](https://www.bilibili.com/video/BV1Ci4y1L7ZZ/?share_source=copy_web&vd_source=c1742d7eab78ca1b37580f7bc4ad9455) 对应的[文档资料](http://www.autolabor.com.cn/book/ROSTutorials/) 2. 定位算法参考:[【这么简单好用的 ROS 定位方法,确定不要试一下吗?!】 ](https://www.bilibili.com/video/BV1fB29YzEgP/?share_source=copy_web&vd_source=c1742d7eab78ca1b37580f7bc4ad9455) 3. karto slam算法参考:[Karto源码解析(一):工程运行 - 卢涛的文章 - 知乎](https://zhuanlan.zhihu.com/p/350852337) ## 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 使用。 5. 控制算法方面,无论 MPC 还是 DWA,其输出的底盘控制指令质量一般。初步判断原因在于缺乏实时准确的机器人自身速度信息。当前控制器基于里程计数据进行计算,如采用 fast-gicp 得到的里程计,因其本身抖动,会进一步放大速度估计波动,从而影响控制指令的稳定性。 6. 当前存在的问题包括:结构方面,部分机械结构的螺丝出现松动或脱落,调试过程中偶尔发现地面掉落的螺丝 / 螺母,存在异响但在嘈杂车间中无法定位来源;算法方面,建议引入从驱动电机反推的里程计数据,并据此进一步调优各算法模块。 7. 编写算法模块时应尽量遵循 ROS 的标准命名规范与数据类型,否则在对比、接入其他算法组件时会增加不必要的适配成本。 8. 何师兄提供的是河狸公司 AGV 的底层代码,可供参考,注意涉及内容需保密。