diff --git a/bearing_localization/README.md b/bearing_localization/README.md index 2a455a0..32e100b 100644 --- a/bearing_localization/README.md +++ b/bearing_localization/README.md @@ -1,26 +1,35 @@ # Bearing Localization -ROS 2 node that estimates the 3D position of a target using bearing-only triangulation. It collects directional measurements from different viewpoints and solves for the point in space that best fits all rays. - +ROS 2 node that estimates the 3D position of targets using bearing-only triangulation. It collects directional measurements from different viewpoints, and solves for the point in space that best fits all rays. Supports multiple simultaneous targets via per-target localizers. ## Topics | Direction | Parameter | Default | Type | |---|---|---|---| -| Sub | `topics.bearing_measurement` | `bearing_measurement` | `geometry_msgs/Vector3Stamped` | -| Sub | `topics.bearing_array` | `/aruco_detector/marker_directions` | `vortex_msgs/Vector3Array` | +| Sub | `topics.bearing_measurements` | `bearing_measurements` | `vortex_msgs/BearingMeasurementArray` | | Pub | `topics.landmarks` | `landmarks` | `vortex_msgs/LandmarkArray` | | Pub | `topics.bearing_localization_markers` | `bearing_localization/markers` | `visualization_msgs/MarkerArray` | -## Key Parameters +## Algorithm Parameters + +Loaded from a profile file (`default.yaml`, `aruco.yaml`, or `pinger.yaml`). Selected via the `profile` launch argument. | Parameter | Default | Description | |---|---|---| -| `profile` | `default` | Parameter profile (`default`, `aruco`) | -| `target_frame` | `orca/odom` | Reference frame for output | -| `window_size` | 30 | Max buffered measurements | -| `max_measurement_age_sec` | 5.0 | Measurement expiry (seconds) | -| `min_measurements` | 5 | Min rays to attempt solve | -| `min_baseline_m` | 0.5 | Min distance between viewpoints | -| `min_ray_angle_deg` | 5.0 | Min angular spread between rays | -| `outlier_residual_threshold_m` | 1.0 | Outlier rejection threshold | +| `window_size` | 30 | Max measurements kept in buffer | +| `max_measurement_age_sec` | 5.0 | Discard measurements older than this (s) | +| `min_measurements` | 5 | Min measurements needed to triangulate | +| `min_baseline_m` | 0.5 | Min distance between first and last origin (m) | +| `min_ray_angle_deg` | 5.0 | Min angle between rays to accept solution (deg) | +| `outlier_residual_threshold_m` | 1.0 | Residual above this marks a measurement as outlier (m) | +| `max_outlier_iterations` | 2 | Max rounds of iterative outlier rejection | + +## Launch + +```bash +# Default profile +ros2 launch bearing_localization bearing_localization.launch.py + +# With a specific profile +ros2 launch bearing_localization bearing_localization.launch.py profile:=aruco +```