人体跟随

基于姿态识别(posture_recognition) 的结果实现“人体跟随”。当识别到目标为“站立”时,节点根据目标在画面中的水平偏差与框高占比,实时输出底盘速度指令。

人体跟随(human_following)节点订阅 posture_recognition/message (识别消息),并发布 cmd_vel ( geometry_msgs/Twist )控制底盘。

启动运动底盘

以OriginBot智能小车为例,先启动小车底盘运动控制

shell
ros2 launch originbot_bringup originbot.launch.py

启动节点命令

shell
ros2 run pycodeapp human_following

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

节点参数说明

参数名 描述 类型 默认值 说明
input_topic 订阅主题 String posture_recognition/message 姿态识别节点发布的消息话题(JSON 文本)。
cmd_topic 速度指令主题 String cmd_vel 发布 geometry_msgs/Twist 控制底盘。
target_box_ratio 目标框高度占比 double 0.7 期望的人体框高度占比(越大表示越近),用于距离控制。
too_close_ratio 过近阈值 double 0.95 超过此占比强制后退,保障安全距离。
too_far_ratio 过远阈值 double 0.45 低于此占比强制前进,避免丢失目标。
kv 线速度增益 double 1.0 (距离误差 → 线速度)比例增益。
kw 角速度增益 double 2.0 (水平偏差 → 角速度)比例增益。
v_max_forward 最大前进速度 double 0.45 前进速度上限(m/s)。
v_max_backward 最大后退速度 double 0.30 后退速度上限(m/s)。
w_max 最大角速度 double 1.8 角速度上限(rad/s)。
center_deadband 居中死区 double 0.03 相对宽度的居中死区,偏差小于此值不转向。
dist_deadband 距离死区 double 0.02 目标框占比与期望占比的误差小于此值不前后移动。
ema_alpha 指数平滑系数 double 0.35 对中心与框占比做 EMA 平滑,范围 0~1,越大越灵敏。
lost_timeout_sec 丢失超时 double 0.5 在未收到消息或未检测到“站立”超过此秒数时立即急停。
cmd_rate_hz 指令频率 double 20.0 定时下发频率(Hz),用于保活(部分底盘需持续心跳)。

参数使用方法

shell
# 自定义输入消息主题与控制参数(距离/转向增益与限幅) ros2 run pycodeapp human_following --ros-args \ -p input_topic:=posture_recognition/message \ -p cmd_topic:=cmd_vel \ -p target_box_ratio:=0.75 \ -p kv:=1.2 \ -p kw:=2.5 \ -p v_max_forward:=0.50 \ -p w_max:=2.0 # 提高指令频率并收紧丢失超时(更快急停) ros2 run pycodeapp human_following --ros-args \ -p cmd_rate_hz:=30.0 \ -p lost_timeout_sec:=0.3

实时运动数据

点击“人体跟随”节点,进入该节点通信页面。

主题订阅示意

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

或点击姿态识别节点订阅主题“/posture_recognition/image_jpeg”选择“图片”,查看框出来的人体姿态。

主题订阅示意

实现效果