Adds saltybot_follower ROS2 package — proportional person-following controller that bridges sl-jetson's /person/target detections to Nav2 /cmd_vel, with the cmd_vel_bridge_node (PR #46) providing safety wrapping. Controller features: - Proportional control: linear.x ∝ distance error, angular.z ∝ bearing - Follow distance: 1.5m default with ±0.3m dead zone (no jitter at target) - Max speed: 0.5 m/s linear, 1.0 rad/s angular (conservative for balance) - Obstacle override: zeroes forward cmd_vel when Nav2 local costmap detects obstacle in forward corridor; turning still allowed - Lost-target state machine: FOLLOWING → person visible STOPPING → lost > 2s, publish zero SEARCHING → lost > 5s, slow rotation (0.3 rad/s) to re-acquire - Mode integration: follow_enabled param (toggle via ros2 param set) independently gates the controller; cmd_vel bridge gates on md=2 Deliverables: saltybot_follower/person_follower_node.py — ROS2 node (314 lines) config/person_follower_params.yaml — all params documented launch/person_follower.launch.py — all params as launch args test/test_person_follower.py — 53 pytest tests, no ROS2 package.xml / setup.py / setup.cfg — package metadata Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
31 lines
1.1 KiB
XML
31 lines
1.1 KiB
XML
<?xml version="1.0"?>
|
|
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
|
|
<package format="3">
|
|
<name>saltybot_follower</name>
|
|
<version>0.1.0</version>
|
|
<description>
|
|
Proportional person-following control loop for saltybot.
|
|
Subscribes to /person/target (PoseStamped in base_link frame) and publishes
|
|
/cmd_vel with velocity limits, dead zone, obstacle avoidance, and lost-target
|
|
state machine (stop → search). Requires cmd_vel_bridge_node for safety wrapping.
|
|
</description>
|
|
<maintainer email="sl-controls@saltylab.local">sl-controls</maintainer>
|
|
<license>MIT</license>
|
|
|
|
<depend>rclpy</depend>
|
|
<depend>geometry_msgs</depend>
|
|
<depend>nav_msgs</depend>
|
|
<depend>std_msgs</depend>
|
|
|
|
<buildtool_depend>ament_python</buildtool_depend>
|
|
|
|
<test_depend>ament_copyright</test_depend>
|
|
<test_depend>ament_flake8</test_depend>
|
|
<test_depend>ament_pep257</test_depend>
|
|
<test_depend>python3-pytest</test_depend>
|
|
|
|
<export>
|
|
<build_type>ament_python</build_type>
|
|
</export>
|
|
</package>
|