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
Default
double
50.0
- Description
Control frequency (Hz) for the following control loop.
- detection_timeout
Type
Default
double
2.0
- Description
Timeout (s) to wait for detection of the object to follow.
- rotate_to_object_timeout
Type
Default
double
10.0
- Description
Timeout (s) to rotate searching for the object when detection is lost.
- static_object_timeout
Type
Default
double
-1.0
- Description
Timeout (s) to stop following when the object remains static. If -1.0, the robot will follow indefinitely.
- linear_tolerance
Type
Default
double
0.15
- Description
Linear tolerance (m) to consider that the target position has been reached.
- angular_tolerance
Type
Default
double
0.15
- Description
Angular tolerance (rad) to consider that the target orientation has been reached.
- max_retries
Type
Default
int
3
- Description
Maximum number of retries when detection or control fails.
- base_frame
Type
Default
string
“base_link”
- Description
Robot’s base frame for control law.
- fixed_frame
Type
Default
string
“odom”
- Description
Fixed frame to use, recommended to be a smooth odometry frame not map.
- filter_coef
Type
Default
double
0.1
- Description
Filter coefficient for smoothing object pose detections.
- desired_distance
Type
Default
double
1.0
- Description
Desired distance (m) to maintain from the followed object.
- skip_orientation
Type
Default
bool
true
- Description
If true, ignore the detected object’s orientation and point toward it from the robot’s position.
- search_by_rotating
Type
Default
bool
false
- Description
If true, the robot will rotate in place when it loses object detection to try to find it again.
- search_angle
Type
Default
double
M_PI_2
- Description
Maximum angle (rad) to rotate when searching for the object.
- odom_topic
Type
Default
string
“odom”
- Description
Odometry topic to use for obtaining the robot’s current velocity.
- odom_duration
Type
Default
double
0.3
- Description
Time (s) to buffer odometry commands to estimate the robot speed.
- transform_tolerance
Type
Default
double
0.1
- Description
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