Zum Inhalt springen

Simulation und Lernen ​

Alle Modelle werden von strido_cad.models (make models) aus dem CAD erzeugt:

DateiVerwendung
ros2/strido_description/urdf/strido.urdf.xacro (+ strido.urdf)ROS 2 / Gazebo Harmonic: sim:=true fügt gz_ros2_control, IMU, GPU-LiDAR, Kamera und einen Ground-Truth-Odometrie-Publisher hinzu
ros2/strido_description/meshes/*.stl13 Link-Meshes (dezimiert, je 25 k Flächen)
models/mujoco/strido.xml, scene.xmlMuJoCo 3: Positionsservos (kp 25, kv 0,4, ±3,43 N·m = Blockiermoment des SPT5435LV), IMU und Fuß-Sites

Linkmassen und Trägheiten stammen aus dem CAD (ros2/strido_description/config/mass_report.yaml, gesamt 3,07 kg inkl. der verlegten Verkabelung). Das Knie ist als direktes Drehgelenk am Unterschenkel modelliert; das Koppelgetriebe wird in Software (Gait, Firmware) gelöst, und seine Grenzen werden angewendet, bevor Befehle das Gelenk erreichen.

MuJoCo ​

bash
make sim-walk                                                        # 10 s trot at 0.15 m/s -> build/sim/walk.mp4
uv run --locked python -m strido_sim.walk --seconds 6 --wz 0.6   # turn
uv run --locked mjpython -m strido_sim.walk --viewer             # interactive (macOS needs mjpython)

Die Lauf-Demo führt packages/strido-core/src/strido/gait.py aus, den Gait, den der Roboter über ROS 2 ausführt, plus eine Kurshaltung, die den Gierwinkel des Simulators nutzt (der Roboter hat keine solche Regelschleife).

Gazebo Harmonic (ROS 2 Jazzy, Docker) ​

bash
make sim-gazebo          # build image, headless walk test with pass/fail
docker compose -f docker/compose.yaml run --rm ros ros2 launch strido_bringup gazebo.launch.py   # GUI needs X11/Wayland forwarding

POLICY=/path/policy.npz führt denselben Test mit policy_node aus (binden Sie die Datei in den Container ein, siehe docker/ros2/sim_smoke.sh). walk_smoke stellt den Roboter auf, befiehlt 8 s lang 0,15 m/s und prüft den Ground-Truth-Fortschritt (≥ 0,4 m), die aufrechte Haltung und dass /joint_states, /imu/data, /scan, /camera/image_raw und /ground_truth/odom publizieren.

Reinforcement Learning (MuJoCo + PPO) ​

strido_sim.rl.env (packages/strido-sim) ist eine Gymnasium-Aufgabe zur Geschwindigkeitsverfolgung, ausgelegt für die Übertragung auf Hobby-Servos: Die Policy beobachtet nur, was der Roboter messen kann (IMU-Gyro und Schwerkraft, Befehl, ihre vorherige Action, ein Gangtakt) — kein Gelenk-Feedback, denn der SPT5435LV hat keines. Actions sind Gelenkversätze um die Standpose, begrenzt durch dieselben Gelenk- und Kniekurbelgrenzen wie in der Firmware. Die Gelenk-Anstiegsbegrenzung der Firmware von 6 rad/s wird in der Umgebung angewendet (pro 20-ms-Policy-Schritt; die Firmware rampt in 5-ms-Schritten mit derselben Geschwindigkeit), gefolgt von der Gelenk- und Kniekurbelbegrenzung. Domain Randomization: Kontaktreibung (Boden und Füße gemeinsam, da MuJoCo den größeren der beiden Werte verwendet), Servosteifigkeit, Basismasse, IMU-Rauschen. policy_node begrenzt /cmd_vel auf die trainierten Befehlsbereiche und publiziert kein /odom (verwenden Sie LiDAR-Odometrie/SLAM).

bash
make rl-smoke                                                        # 20 k steps + evaluation (pipeline check)
make rl-train                                                        # 20 M steps, 8 envs (CPU, ≈ 30 min)
uv run --locked python -m strido_sim.rl.evaluate build/rl/<run>/policy.npz --vx 0.2 --video build/rl/eval.mp4

Das Training schreibt policy.npz (einfache Arrays). strido.policy.MlpPolicy führt sie mit numpy aus, sowohl in evaluate.py als auch im ROS-2-policy_node, daher ist auf dem Pi kein PyTorch nötig:

bash
ros2 launch strido_bringup gazebo.launch.py use_policy:=true policy:=/path/policy.npz
ros2 launch strido_bringup robot.launch.py  use_policy:=true policy:=/path/policy.npz

Bevor Sie eine gelernte Policy auf der Hardware ausführen: Evaluieren Sie sie in MuJoCo und Gazebo, beginnen Sie mit dem Roboter auf einem Ständer, halten Sie /strido/estop bereit und rechnen Sie damit, mit gemessenem Servoverhalten (kp/kv, Latenz) neu zu trainieren, sobald der Roboter existiert.

Die Upstream-Pipelines für PyBullet (upstream/yertle/learning/) und Isaac Lab (upstream/yertle/isaac_lab/) zielen auf die ursprüngliche Yertle-URDF und werden als Referenz beibehalten.

MIT-Lizenz. Mechanik abgeleitet von Yertle (Jerome Graves). CAD, Simulation und native Tests sind kein Hardware-Nachweis – siehe Verifikation.