🧭 自主导航:终点就在前方

不再需要遥控,让赛车自己思考路径。

🧠 导航的核心原理

有了地图之后,赛车就能实现自主飞行... 喔不对,是自主行驶。
导航主要解决两个问题:

  1. 我在哪?(定位):对比地图,确定自己的坐标。
  2. 怎么走?(路径规划):避开障碍物,找到最快到达终点的路。

🚀 第一步:启动导航引擎

在启动底盘之后,我们要唤醒赛车的“导航大脑”。

# 在赛车终端输入
roslaunch tianracer_navigation tianracer_teb_nav.launch

💡 TEB 规划器:这是赛车默认使用的“老司机”算法,它非常擅长处理阿克曼转向(像真车一样不能原地转圈)的路径优化。

🖥️ 第二步:在 PC 端开启监控

同样地,我们在电脑上打开 Rviz 来指挥赛车。

# 在你的个人 PC 终端输入
roslaunch tianracer_rviz view_teb_planner.launch

📍 第三步:设置初始位置 (2D Pose Estimate)

如果赛车在屏幕上的位置和真实位置不对:

  1. 点击 Rviz 顶部的 2D Pose Estimate 按钮。
  2. 在地图上赛车实际所在的位置点击并拖拽,给出它的朝向。
  3. 观察地图上的绿点(粒子),当它们聚拢在赛车周围时,定位就成功了!

🏁 第四步:下达出击指令 (2D Nav Goal)

  1. 点击 Rviz 顶部的 2D Nav Goal
  2. 在地图上你想让赛车去的地方点击目标位置并拖拽,给出它的朝向。
  3. 看! 赛车会自动计算出一条红色的轨迹,并避开所有障碍物,奔向终点。

⚠️ 注意:如果小车没动,请检查遥控器是否还处于控制状态。赛车非常绅士,遥控器拥有最高优先级。

多点导航实战

1.1 基于 Launch 文件的多点导航 📍

在实际环境中按预设路径点自动巡航:

  1. 启动真车
    roslaunch tianracer_bringup tianracer_bringup.launch
  2. 启动导航
    roslaunch tianracer_navigation tianracer_teb_nav.launch
  3. 启动多点任务
    roslaunch tianracer_navigation tianracer_multi_goal.launch

1.2 如何修改目标点? ✍️

通过修改 tianracer_multi_goal.launch 中的列表:

  • goalListX:X 坐标列表(如 [1.0, 2.0, 3.0]
  • goalListY:Y 坐标列表(如 [0.5, 1.5, 0.5]

🏁 高级:基于剩余路径点的预发布策略

优点:支持剩余路径点感知,发布更灵活。

2.1 步骤一:环境准备 🏗️

先按常规步骤启动真车和导航:

# 1. 启动真车
roslaunch tianracer_bringup tianracer_bringup.launch

# 2. 启动导航 (需指定地图)    # xxx 为保存地图时的文件名称
roslaunch tianracer_navigation tianracer_teb_nav.launch use_rviz:=true map_file:=xxx 

2.2 步骤二:生成目标点文件 📝

  1. 启动生成工具
    # 设置路径点保存文件名为test_points
    roslaunch tianracer_gazebo click_waypoint.launch filename:=test_points
    
  2. Rviz 选点:点击顶部 2D Nav Goal 工具在地图上依次标记导航目标点。
  3. 保存退出:点击终端,按 Ctrl + C,文件保存在 tianracer_gazebo/scripts/waypoint_race/test_points.yaml

2.3 步骤三:启动预发布程序 🚀

使用环境变量告知程序目标点文件位置:

# 设置地图环境标识,使得multi_goals_rc3.py能够正确读取test_points.yaml文件, 注意不要拼写错误
export TIANRACER_WORLD=test 

# 运行控制脚本 (__ns 指定机器人名字空间)
rosrun tianracer_gazebo multi_goals_rc3.py __ns:=tianracer

💡 技巧:单独启动 Rviz 监控

如果在导航启动时没有自动开启 Rviz,或者不小心关闭了,可以手动调出:

roslaunch tianracer_rviz view_teb_planner.launch

建议在单独终端运行此命令以保持清晰的日志输出。

完整操作演示 🎥

说明:该策略会根据赛车距离当前目标点的距离自动发布下一个点。

🏁 恭喜!你已经掌握了自动驾驶多点巡航。