Skip to content

1.TODO清单

26年版本

新技术路线

[仿真/真实硬件]          [算法层]              [输出]
RTK GPS          →   robot_localization   →   /tf (map->odom)
轮式里程计        →   (EKF融合)            →   全局定位
                                          
3D LiDAR         →  pointcloud_to_laserscan →  /scan (2D)
                 →  Nav2 costmap          →   障碍物地图
                                          
Nav2             →  global_planner        →   全局路径
                 →  local_planner         →   /cmd_vel
                                          
/cmd_vel         →  车体控制器            →   小车运动

新 TODO 清单

第一阶段:仿真环境搭建

  • 换用差速轮模型(Turtlebot3 或简单四轮差速),彻底绕开阿克曼复杂性
  • 保留现有 Gazebo 场景(slam_test.world
  • 验证 /odom/scan/imu_raw 话题正常输出

第二阶段:定位层

  • 安装配置 robot_localization(EKF)
  • 用仿真 GPS 替代 RTK,融合轮式里程计,输出稳定的 map->odom TF
  • 验证 Rviz 里小车位置和 Gazebo 一致

第三阶段:Nav2 导航

  • 安装 Nav2,配置差速轮参数
  • 配置 costmap(用 2D laserscan)
  • 能在 Rviz 里点击目标点,小车自动导航过去并避障
  • 能用 RTK 坐标(转换为 map 坐标系)作为导航目标

第四阶段:迁移真实硬件

  • 替换 /odom → 真实轮式编码器
  • 替换 /gps/fix → 真实 RTK 模块
  • 替换 /scan → 真实 Mid-360(pointcloud → laserscan)
  • 替换 /cmd_vel → 真实底盘驱动
  • 调参验证真实环境导航效果

25年末版本

第一阶段:车辆与物理环境 (Vehicle & Environment)

  • 1. 获取阿克曼模型 (Audibot/F1Tenth)

    • 推荐使用 Audibot 的 ROS2 分支。它的代码结构比 F1Tenth 更适合做二次开发。

    • 搜索 GitHub audibot_ros2,拉取代码并编译。

  • 2. 传感器改装 (Model Modification)

    • Mid-360 仿真难点:Mid-360 是非重复扫描(花瓣状)。在 Gazebo 中完美模拟这种物理特性比较吃力。

    • 替代方案:为了验证 LIO-SAM 逻辑,建议在 URDF 中使用标准的 32线或64线 LiDAR 插件,但将垂直视场角 (Vertical FOV) 设置大一点(Mid-360 是 360°x59°)。

    • RTK-GPS 仿真:在 GPS 插件中,将 gaussian_noise 设置为极小值(例如 0.001),模拟 RTK 的高精度。

  • 3. 验证 TF 树 (Crucial)

    • 在 Rviz 中检查 TF:base_link -> lidar_link -> imu_link -> gps_link

    • 重点:阿克曼车的旋转中心在后轴中心,而 LiDAR 通常在车顶。确保这个 TF 变换是准确的,否则地图会随着车转弯而发生“重影”。

第二阶段:LIO-SAM 适配 (Algorithm Adaptation)

Mid-360 的驱动输出格式和普通雷达不同(Livox 自定义消息 vs PointCloud2),这里是很多人的“深坑”。

  • 1. 选择支持 Livox 的 LIO-SAM 分支

    • 官方 LIO-SAM 是基于 ROS1 的。你需要找 LIO-SAM-ROS2 版本。

    • 注意:如果要用真实的 Mid-360 驱动逻辑,你需要编译 livox_ros_driver2。但在仿真里,如果你用的是标准点云插件,那么 LIO-SAM 的配置文件中 sensor 类型要选 velodyne(即使你假装它是 Mid-360),这样接口才对得上。

  • 2. IMU 融合配置

    • JY901 vs 内部 IMU:Mid-360 内部 IMU 频率高但精度一般,JY901 精度不错。

    • params.yaml 中,重点修改 extrinsicRotextrinsicTrans。这是 LiDAR 到 IMU 的外参。如果这个填错 1 厘米或 1 度,LIO-SAM 必挂。

  • 3. GPS 因子图融合

    • 开启 useGPS: true

    • 由于你是 RTK,你可以信任 GPS 数据。在 LIO-SAM 代码中,寻找 GPS 协方差矩阵(Covariance),将其数值改小,增加 GPS 在优化中的权重。

第三阶段:无图导航配置 (Navigation w/o Pre-mapping)

你的需求是“不预先建图”,这在 ROS2 中通常被称为 SLAM Toolbox / LIO-SAM + Nav2 Rolling Window

  • 1. 实时栅格化 (3D -> 2D)

    • LIO-SAM 输出的是 3D 点云 /lio_sam/mapping/cloud_registered

    • Nav2 需要 2D 地图。你需要运行 octomap_server 或者 pcl_to_grid 节点,实时把 3D 点云压扁成 2D 占用栅格地图 (/map/local_map),喂给 Nav2。

  • 2. 配置 Nav2 (TEB/MPPI Controller)

    • 核心痛点:阿克曼车不能原地转。默认的 DWB 控制器如果不细调,经常会规划出原地旋转的路径,导致车卡死。

    • 推荐:配置 MPPI Controller (Model Predictive Path Integral) 或 TEB Local Planner。它们对阿克曼运动学约束支持最好。

    • 在 Nav2 的 nav2_params.yaml 中,设置 robot_radiusfootprint 为你的车体大小。

  • 3. 全局规划器 (Global Planner)

    • 因为没有全图,你需要配置 SmacPlannerHybrid 或者 NavFn,并设置 use_sim_time: true

    • 让 Nav2 在“未知区域”也能规划路径(通常需要设置 allow_unknown: true)。

最近更新