|
2 weeks ago | |
---|---|---|
.vscode | 2 weeks ago | |
base_msgs | 2 weeks ago | |
cartographer_ros | 2 weeks ago | |
costmap_2d | 2 weeks ago | |
laser_h1 | 2 weeks ago | |
laser_odom | 2 weeks ago | |
location_beam_model | 2 weeks ago | |
my_planner | 2 weeks ago | |
osqp | 2 weeks ago | |
server | 2 weeks ago | |
slam | 2 weeks ago | |
space_lib | 2 weeks ago | |
space_nav | 2 weeks ago | |
space_server_new | 2 weeks ago | |
space_slam | 2 weeks ago | |
std_lib | 2 weeks ago | |
yesense_imu | 2 weeks ago | |
CMakeLists.txt | 2 weeks ago | |
README.md | 2 weeks ago | |
cartographer_ros.zip | 2 weeks ago | |
costmap_2d.zip | 2 weeks ago | |
keyboard_control.py | 2 weeks ago |
RealVNC Viewer软件中使用对应ip地址登录:
笔记本连接wifi:AGV,12345678,ip: 10.0.0.1
笔记本接网线至交换机:ip: 10.0.1.1
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
记录人:徐盟杰,记录时间:2025年5月20日
定位算法当前使用的是上方 B 站参考项目中的 beam model,定位质量受机器人运动速度、栅格地图分辨率、建图与实际环境之间的差异等因素影响。整体定位效果:直线运动时在约 0.8 m/s 范围内表现尚可,原地旋转控制在 0.6 rad/s 以内也较稳定。若需进一步提高定位精度或减少抖动,建议引入多传感器融合。目前的导航系统(定位、建图、规划、控制)仅基于激光雷达数据。例如可结合驱动轮转速反推的里程计。目前使用的里程计由激光雷达通过 fast-gicp 匹配生成,计算开销较大,因此我通过底盘控制信号反推出一个 fake_odom 提供给其他模块使用。但 fake_odom 在底盘接收了控制信号但实际未执行运动的场景下数据失真,可能干扰其他模块的工作。
定位算法也可以切换为 amcl,参数在对应的 launch 文件中可调。我对其进行了初步调参,定位效果与 beam model 相近。amcl 在实际项目中应用更广,理论上鲁棒性也更高。但本项目中可能因 fake_odom 的问题,表现不如预期。amcl 在复杂环境中可能出现定位突然跳变的情况。总体来看,若希望定位系统稳定可靠,仍需基于多传感器融合。可引入但不限于陀螺仪、GPS、视觉等传感器。
SLAM 算法采用 karto,总体质量良好,建图效果依赖机器人运动轨迹及环境特征。建议在建图过程中以小范围螺旋式路径进行移动。建图路线规划建议结合源码和建图原理理解之后进行优化。
规划模块中,my_planner
包为我学位论文相关代码,包含以下算法:全局路径规划使用 Hybrid A*;局部轨迹规划使用 TEB(基于 L-BFGS);轨迹跟踪采用 MPC(基于 OSQP);运动决策算法为自研框架 + 改进版 Hybrid A*。其中运动决策部分尚属初始版本,其余模块代码相对完整,并已整理(本包后续将在单独仓库中维护,此仓库不再更新)。所设算法主要面向阿克曼底盘机器人,当前 AGV 使用的是二轮差速驱动,整体控制结构更简,运行算力也有限,使用本套算法并不适配。
建议 AGV 项目中使用 ROS 官方的 move_base
模块,集成的全局 / 局部代价地图、A、DWA 等组件更加成熟。推荐组合为 A + DWA,具备较小算力消耗和良好鲁棒性,适合工业 AGV 使用。
控制算法方面,无论 MPC 还是 DWA,其输出的底盘控制指令质量一般。初步判断原因在于缺乏实时准确的机器人自身速度信息。当前控制器基于里程计数据进行计算,如采用 fast-gicp 得到的里程计,因其本身抖动,会进一步放大速度估计波动,从而影响控制指令的稳定性。
当前存在的问题包括:结构方面,部分机械结构的螺丝出现松动或脱落,调试过程中偶尔发现地面掉落的螺丝 / 螺母,存在异响但在嘈杂车间中无法定位来源;算法方面,建议引入从驱动电机反推的里程计数据,并据此进一步调优各算法模块。
编写算法模块时应尽量遵循 ROS 的标准命名规范与数据类型,否则在对比、接入其他算法组件时会增加不必要的适配成本。
何师兄提供的是河狸公司 AGV 的底层代码,可供参考,注意涉及内容需保密。