激光雷达避障

根据激光雷达反馈数据实现“激光雷达避障”。默认持续向前运动;当“前方扇区”的最小距离小于 stop_distance 时,自动选择更空的一侧转向绕行;当前方最小距离重新大于 clear_distance 时恢复直行。

内置节点 obstacle_avoidance 订阅 scan ( sensor_msgs/msg/LaserScan ),并发布 cmd_vel ( geometry_msgs/Twist )控制底盘。

启动运动底盘

以OriginBot智能小车为例,先启动小车底盘运动控制,启用激光雷达。

shell
ros2 launch originbot_bringup originbot.launch.py use_lidar:=true

启动节点命令

shell
ros2 run pycodeapp obstacle_avoidance

该节点默认绑定可以直接通过平台节点管理菜单启动。

节点参数说明

参数名 描述 类型 默认值 说明
scan_topic 订阅主题 String scan 订阅激光雷达发布的 sensor_msgs/LaserScan 数据话题。
cmd_topic 速度指令主题 String cmd_vel 发布 geometry_msgs/Twist 控制底盘。
forward_speed 直行速度 double 0.05 正常前进时的线速度(m/s)。
turn_speed 转向角速度 double 0.9 进入转向状态时的恒定角速度(rad/s)。
cmd_rate_hz 指令频率 double 15.0 定时下发频率(Hz),用于保活(部分底盘需持续心跳)。
stop_distance 停止阈值 double 0.20 前方扇区最小距离小于此值时进入转向状态(m)。
clear_distance 清空阈值 double 0.50 前方扇区最小距离大于此值时恢复直行(m)。
front_sector_deg 前方扇区半角 double 25.0 检测正前方最小距离的扇区半角(度)。
side_sector_deg 侧向扇区半角 double 70.0 比较左右平均距离、决定转向方向的扇区半角(度)。
tie_break_turn_left 平手优先左转 bool true 当左右平均距离相等或均无效时是否优先左转( true =左转, false =右转)。
scan_timeout_sec 扫描超时 double 0.5 超过此秒数未收到有效激光雷达数据将立即急停。

参数使用方法

shell
# 自定义输入扫描主题与控制/阈值/扇区参数 ros2 run pycodeapp obstacle_avoidance --ros-args \ -p scan_topic:=scan \ -p cmd_topic:=cmd_vel \ -p forward_speed:=0.08 \ -p turn_speed:=1.0 \ -p stop_distance:=0.25 \ -p clear_distance:=0.60 \ -p front_sector_deg:=30.0 \ -p side_sector_deg:=80.0 \ -p tie_break_turn_left:=true # 提高指令频率并收紧扫描超时(更快急停) ros2 run pycodeapp obstacle_avoidance --ros-args \ -p cmd_rate_hz:=25.0 \ -p scan_timeout_sec:=0.3

实时运动数据

“激光雷达避障”节点,通过实时获取雷达检测数据,调整底盘运动餐数据,从而达到避障效果。进入该节点通信页面,可实时查看对底盘的控制数据。

主题订阅示意

点击发布主题“/cmd_vel”中的“订阅”按钮,类型选择“文字”,可查看线速度/角速度。

实现效果