[Documentation] [TitleIndex] [WordIndex

Overview

A very simple (and not robust) node that uses lidar to track moving people. This package does a basic clustering of points from a scan. It then matches the new clusters with clusters from the previous iteration (based on distance). The position, velocity, and size of a cluster is updated using a simple constant velocity motion model and through observations by using a weighted average from cluster matches. Clusters are declared if they are moving above a minimum speed and below a maximum. It can also uses a static costmap_2d to help prune out static obstacles that appear to be moving due to error (this can be a blank map but the tracker will return more false positives). On each iteration, after determining what clusters are considered "moving obstacles" the node runs a basic linear extrapolation to predict where the dynamic obstacles will be over the next few seconds and publishes a message with this information.

The tracker's performance isn't too bad when the robot is standing still. Once the robot is moving, the tracker's performance becomes pretty bad especially if there is localization error. In my experience, this becomes particularly bad when the robot is turning, and so there is an option to disable observation updates when the robot is turning too fast (the motion model still runs).

ROS API

Subscribed Topics

scan (sensor_msgs/LaserScan) cmd_vel (geometry_msgs/Twist)

Published Topics

dynamic_obstacles (dynamic_obs_msgs/DynamicObstacles) visualization_marker_array (visualization_msgs/MarkerArray)

Parameters

laser_link (string, default: "base_laser_link") map_frame (string, default: "map") use_costmap (bool, default: true) track_when_turning (bool, default: true)

2019-07-13 12:50