EKF fusing UWB position (10Hz) with IMU accel+gyro (200Hz) for SaltyBot indoor localization with UWB dropout resilience. Package: saltybot_uwb_imu_fusion - ekf_math.py: 6-state EKF [x,y,θ,vx,vy,ω], IMU predict + UWB update - IMU as process input: body-frame accel rotated to world via heading - Jacobian F for nonlinear rotation effect - Process noise Q from continuous white-noise model - UWB 2D position update, heading update from quaternion - Accel bias estimation (low-pass) - Velocity damping during UWB dropout (>2s threshold) - ekf_node.py: ROS2 node subscribing to /imu/data (200Hz) + /saltybot/uwb/pose or /uwb/bearing (10Hz) - Publishes /saltybot/pose/fused (PoseStamped) - Publishes /saltybot/pose/fused_cov (PoseWithCovarianceStamped) - Broadcasts base_link → map TF2 at IMU rate - Suppresses output after max_dead_reckoning_s without UWB - 14/14 unit tests passing (predict, update, dropout, PD covariance) - Launch: ros2 launch saltybot_uwb_imu_fusion uwb_imu_fusion.launch.py Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
32 lines
1.0 KiB
XML
32 lines
1.0 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_uwb_imu_fusion</name>
|
|
<version>0.1.0</version>
|
|
<description>
|
|
EKF-based UWB + IMU sensor fusion for SaltyBot indoor localization (Issue #573).
|
|
Fuses UWB position at 10 Hz with IMU accel+gyro at 200 Hz.
|
|
Handles UWB dropouts via IMU dead-reckoning.
|
|
Publishes /saltybot/pose/fused and /saltybot/pose/fused_cov.
|
|
</description>
|
|
<maintainer email="sl-uwb@saltylab.local">sl-uwb</maintainer>
|
|
<license>Apache-2.0</license>
|
|
|
|
<depend>rclpy</depend>
|
|
<depend>geometry_msgs</depend>
|
|
<depend>sensor_msgs</depend>
|
|
<depend>tf2_ros</depend>
|
|
<depend>saltybot_uwb_msgs</depend>
|
|
|
|
<exec_depend>python3-numpy</exec_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>
|