Conversation
376c3ed to
6236cad
Compare
|
Documenting discussion with Griz:
Now the fuse state estimator will now only launch from robot_drivers_to_persist_sim.launch.py |
8676798 to
d810d3b
Compare
|
Screencast from 2026-02-23 14-50-57.webm |
|
Screencast from 2026-02-24 13-53-24.webm At 0:15 I toggle on the covariance for the mecanum wheel odometry message. Blue is the gt odometry from Mujoco, red is the filtered odom, green is the mecanum wheel odom This makes sense though since the mecanum wheel odom message shouldn't have info about z, roll, or pitch so effectively it's saying, don't listen to me about these. |
79212b7 to
0b35952
Compare
|
After talking to Nathan D (from JSC) want to visualize in Mujoco to sanity check contact forces |
|
From AI buddy: " So the "quick fixes" have already been attempted and didn't solve it. This points more toward the fundamental architecture problem. our virtual rail approach may just not produce good odom, regardless of how well the parameters are tuned. The controller is back-calculating wheel velocities from commanded rail positions, not reading actual wheel-ground interaction."
Next step is to use claude to: So the real path forward is switching to wheel velocity actuators like NASA did. That's the only way to get odom that reflects actual simulated physics.
|
|
Step 1: Regenerate Wheel XMLs with 8 Rollers The real Ridgeback has 8 rollers per wheel. Our model has 12 sphere rollers; NASA's has 8 with CAD mesh collision. We'll adapt Action: Create a local copy of NASA's wheel_code_gen.py, adapt it to output our 4 wheel XML files with:
Files replaced (4):
condim=4 enables 3D friction with torsional component. Low torsional/rolling friction allows the rollers to slide laterally Note: Going from 12 to 8 rollers changes the joint count, which will require updating the keyframe qpos vector in Step 5. Step 2: Add Physics Solver Settings File: src/hangar_sim/description/hangar_scene.xml Change line 8: to:
Step 3: Fix Controller Kinematic Parameters File: src/hangar_sim/config/control/picknik_ur.ros2_control.yaml For BOTH platform_velocity_controller and platform_velocity_controller_nav2: These match NASA's values and the actual ridgeback geometry:
Step 4: Verify and Adjust Ground Contact (Empirical) Load the sim and check MuJoCo viewer for:
If rollers don't reach the floor, adjust base_platform_rotation Z position in ur5e_ridgeback.xml (line 197) to lower the If contact is unstable (vibration/bouncing), tune:
Step 5: Update Keyframe File: src/hangar_sim/description/hangar_scene.xml Switching from 12 to 8 rollers per wheel changes the joint count (removing 4×4=16 slipping joints). The keyframe qpos vector |
0b35952 to
3fad977
Compare
|
Update: currently testing step 4. I verified contact points and am ensuring that mecanum drive is driving properly in mujoco viewer. |
528296b to
e8a0f44
Compare
94a9842 to
7e634d2
Compare
7e634d2 to
57ca0e2
Compare
|
what was done: Wheel model — Replaced 12-roller virtual wheels with 8-roller wheel-ground contact (matching real Odometry calibration — Tuned wheels_radius (0.0759 → 0.0666) and Controller startup — Switched active-at-startup controller from joint_trajectory_controller to cmd_vel relay — Added relay in odom_qos_relay.py forwarding /cmd_vel → Fuse topic — Fixed fuse.yaml subscribing to /platform_velocity_controller/odom (inactive JTC goal tolerances — Wheel-driven locomotion can't hit the original 5cm/5° rail joint tolerance Controller switch-back — All 17 runnable whole-body objectives now reactivate green is the wheel odometery /platform_velocity_controller_nav2/odom, red is the ground truth, and yellow is the filtered fuse. odom-2026-04-02_21.33.00.mp4 |
4f5d9b8 to
5b007da
Compare
|
i'm unsure if after using teleop it will switch back to the nav2 controller since it uses whole body (and platform velocity controller), so this is still an open question. Update: I added another switch controller at the end of hangar_sim's teleop objective Generally, I am looking for feedback on how switching (or not) between the whole body and nav2 pipelines is done I verified the whole body objectives work, but only if I add the tolerance and time since it wasn't accounting for the controller activation time if I run the objective before sending any cmd_vel commands. Then after those objectives run i need to switch back to the nav2 controller for it to be able to receive any future cmd_vel messages. |
5b007da to
4e790d1
Compare
4e790d1 to
166337d
Compare
This PR adds an IMU (fuse_models::Imu3D) to the hangar_sim state estimation pipeline, fusing IMU data with the wheel odom (from Mujoco).
In ur5e_ridgeback.xml
In picknik_ur_mujoco_ros2_contro.xacro
Controller config: picknik_ur.ros2_control.yaml & config.yaml
Fuse Configuration
Wheel Odometry:
IMU:
Screencast from 2026-02-23 12-56-23.webm
^In this video, the blue is odom_reliable (the republished gt odometry) and red is odom_filtered (the product of fuse)
Screencast from 2026-02-23 13-49-46.webm
^In this video, I change odom_reliable > /platform_velocity_controller/odom which for some reason has a completely messed up covariance