@@ -5,7 +5,7 @@ state_estimator:
55 # Fixed-lag smoother configuration
66 optimization_frequency : 20.0
77 transaction_timeout : 0.01
8- lag_duration : 0.5
8+ lag_duration : 1.0
99
1010 # Motion model for mobile base (3D omnidirectional)
1111 motion_models :
@@ -15,7 +15,8 @@ state_estimator:
1515 mobile_base_motion :
1616 # Process noise for state variables
1717 # Order: x, y, z, roll, pitch, yaw, vx, vy, vz, vroll, vpitch, vyaw, ax, ay, az
18- process_noise_diagonal : [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 1.0, 1.0, 1.0]
18+ # Ground robot: z, roll, pitch tightly constrained
19+ process_noise_diagonal : [0.005, 0.005, 0.0001, 0.0001, 0.0001, 0.005, 0.005, 0.005, 0.0001, 0.0001, 0.0001, 0.005, 0.05, 0.05, 0.001]
1920
2021 sensor_models :
2122 initial_localization_sensor :
@@ -33,41 +34,45 @@ state_estimator:
3334 publish_on_startup : true
3435 # Order: x, y, z, roll, pitch, yaw, vx, vy, vz, vroll, vpitch, vyaw, ax, ay, az
3536 initial_state : [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
36- initial_sigma : [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]
37+ # Order: x, y, z, roll, pitch, yaw, vx, vy, vz, vroll, vpitch, vyaw, ax, ay, az
38+ # Moderate x,y,yaw sigma: some initial position uncertainty
39+ # Tight z,roll,pitch: ground robot constraints
40+ initial_sigma : [1.0, 1.0, 0.01, 0.01, 0.01, 0.5, 0.1, 0.1, 0.01, 0.01, 0.01, 0.1, 0.1, 0.1, 0.01]
3741
3842 wheel_odom_sensor :
3943 # Using /odom_reliable from QoS relay (bridges BEST_EFFORT to RELIABLE)
4044 topic : /odom_reliable
4145 queue_size : 10
42- # 2D position from wheels (no z )
43- position_dimensions : ['x', 'y']
46+ # Position from wheels (z=0 from odom_zero_z anchors the ground plane )
47+ position_dimensions : ['x', 'y', 'z' ]
4448 # Heading only
4549 orientation_dimensions : ['yaw']
4650 # Forward velocity
4751 linear_velocity_dimensions : ['x']
4852 # Turn rate
4953 angular_velocity_dimensions : ['yaw']
50- # Use relative constraints (pose changes rather than absolute poses )
54+ # Use relative constraints (physically correct - wheel odom errors are correlated )
5155 differential : true
5256 # Covariances - use large values for unused dimensions
5357 # Order: x, y, z, roll, pitch, yaw
54- pose_covariance_diagonal : [0.05 , 0.05, 1e9 , 1e9, 1e9, 0.05 ]
58+ pose_covariance_diagonal : [0.01 , 0.01, 0.0001 , 1e9, 1e9, 0.01 ]
5559 # Order: vx, vy, vz, vroll, vpitch, vyaw
56- twist_covariance_diagonal : [0.05 , 1e9, 1e9, 1e9, 1e9, 0.05 ]
60+ twist_covariance_diagonal : [0.01 , 1e9, 1e9, 1e9, 1e9, 0.01 ]
5761
5862 imu_sensor :
5963 topic : /imu_sensor_broadcaster/imu
60- # Orientation from IMU
64+ # Orientation: all axes, but in differential mode to avoid
65+ # frame mismatch (MuJoCo framequat is in world frame, not odom frame).
66+ # Differential uses orientation *changes* between readings, so no
67+ # absolute reference frame is needed.
6168 orientation_dimensions : ['roll', 'pitch', 'yaw']
69+ differential : true
6270 # Angular velocity from gyroscope
6371 angular_velocity_dimensions : ['roll', 'pitch', 'yaw']
64- # Linear acceleration from accelerometer
65- linear_acceleration_dimensions : ['x', 'y', 'z']
66- # Transform accelerations into base frame
67- acceleration_target_frame : ' ridgeback_base_link'
72+ # No linear acceleration - accelerometer biases double-integrate
73+ # into position drift. For a ground robot with wheel odom providing
74+ # position, the accelerometer is a net negative for accuracy.
6875 twist_target_frame : ' ridgeback_base_link'
69- # Remove gravity from acceleration measurements
70- remove_gravitational_acceleration : true
7176 queue_size : 10
7277
7378 # Publish filtered odometry
0 commit comments