Following Server
Source code on Github.
The Following Server in opennav_following implements a server for following dynamic objects from a detection topic or specific reference frame.
This server allows the robot to follow and maintain a determined distance from a detected object or specific frame,
using topic-based detection techniques or coordinate frame tracking.
The server is designed to be called by a BT application or autonomy application to follow moving objects.
Parameters
controller_frequency
- Type:
doubleDefault:50.0 -
Control frequency (Hz) for the following control loop.
detection_timeout
- Type:
doubleDefault:2.0 -
Timeout (s) to wait for detection of the object to follow.
rotate_to_object_timeout
- Type:
doubleDefault:10.0 -
Timeout (s) to rotate searching for the object when detection is lost.
static_object_timeout
- Type:
doubleDefault:-1.0 -
Timeout (s) to stop following when the object remains static. If
-1.0, the robot will follow indefinitely.
linear_tolerance
- Type:
doubleDefault:0.15 -
Linear tolerance (m) to consider that the target position has been reached.
angular_tolerance
- Type:
doubleDefault:0.15 -
Angular tolerance (rad) to consider that the target orientation has been reached.
max_retries
- Type:
intDefault:3 -
Maximum number of retries when detection or control fails.
base_frame
- Type:
stringDefault:"base_link" -
Robot's base frame for control law.
fixed_frame
- Type:
stringDefault:"odom" -
Fixed frame to use, recommended to be a smooth odometry frame not map.
filter_coef
- Type:
doubleDefault:0.1 -
Filter coefficient for smoothing object pose detections.
desired_distance
- Type:
doubleDefault:1.0 -
Desired distance (m) to maintain from the followed object.
skip_orientation
- Type:
boolDefault:true -
If
true, ignore the detected object's orientation and point toward it from the robot's position.
search_by_rotating
- Type:
boolDefault:false -
If
true, the robot will rotate in place when it loses object detection to try to find it again.
search_angle
- Type:
doubleDefault:M_PI_2 -
Maximum angle (rad) to rotate when searching for the object.
odom_topic
- Type:
stringDefault:"odom" -
Odometry topic to use for obtaining the robot's current velocity.
odom_duration
- Type:
doubleDefault:0.3 -
Time (s) to buffer odometry commands to estimate the robot speed.
transform_tolerance
- Type:
doubleDefault:0.1 -
Time with which to post-date the transform that is published, to indicate that this transform is valid into the future.
Example
following_server:
ros__parameters:
controller_frequency: 50.0
detection_timeout: 2.0
rotate_to_object_timeout: 10.0
static_object_timeout: 30.0 # -1.0 for indefinite following
linear_tolerance: 0.15
angular_tolerance: 0.15
max_retries: 3
base_frame: "base_link"
fixed_frame: "odom"
filter_coef: 0.1
desired_distance: 1.0
skip_orientation: true
search_by_rotating: false
odom_topic: "odom"
odom_duration: 0.3
transform_tolerance: 0.1
# Controller configuration (inherited from docking controller)
controller:
k_phi: 3.0
k_delta: 2.0
beta: 0.4
lambda: 2.0
v_linear_min: 0.1
v_linear_max: 0.5
v_angular_max: 1.0
slowdown_radius: 0.15
use_collision_detection: false
transform_tolerance: 0.1