目标:掌握自动驾驶中的贴墙走生存技巧
想象你闭着眼走在走廊里,用手摸着右边的墙:
巡墙直觉: 在靠近与远离之间通过反馈达到动态平衡。
巡墙本质上是一个目标 - 修正的过程:
error = 目标距离 - 当前距离
转向角 = Kp 误差
在 wall_following.py 中,我们计算车身相对于墙的角度:
wall_following.py
# 获取正右方(b)和右前方(a)的距离 b = get_range(data, -90) a = get_range(data, -30) # THETA 为 60 度 # 计算车身与墙的夹角 alpha alpha = np.arctan((a * np.cos(THETA) - b) / (a * np.sin(THETA))) # 计算垂直距离 AB AB = b * np.cos(alpha)
为了防止修正过迟,我们要预测未来的位置:
# 预测未来距离 (LOOK_AHEAD_DIS = 3米) projected_dis = AB + LOOK_AHEAD_DIS * np.sin(alpha) # 计算误差并应用比例增益 P error = TARGET_DIS - projected_dis steering_angle = P * error # 发布 Ackermann 控制消息 drive_msg.drive.steering_angle = steering_angle drive_msg.drive.speed = speed
核心车感:油门越大,方向盘越灵敏。
启动巡墙控制节点及其仿真/驱动环境:
# 启动巡墙完整环境 roslaunch tianracer_navigation wall_following.launch
观察重点: 小车在直道上是否能维持稳定距离?摆动是否在可接受范围内?
启动前,必须确认哪个数据代表右墙:
每组执行任务时必须有三个角色:
铁律:异常发生时,先切手动,再查原因。
落地首跑前必须执行:
跑通不是终点,可复现才是!
本课产出检查点:
alpha