From 4cc91d770815027cd53123a3b9c250066c3b357c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E2=80=9Cjiawei=E2=80=9D?= <“1073198597@qq.com”>
Date: Sat, 9 Aug 2025 15:53:07 +0800
Subject: [PATCH] first commit
---
Open_Duck_Mini/Open_Duck_Mini-2/.gitignore | 11 +
Open_Duck_Mini/Open_Duck_Mini-2/FUNDING.yml | 3 +
Open_Duck_Mini/Open_Duck_Mini-2/LICENSE | 201 ++
Open_Duck_Mini/Open_Duck_Mini-2/README.md | 97 +
.../Open_Duck_Mini-2/docs/assembly_guide.md | 251 ++
.../Open_Duck_Mini-2/docs/configure_motors.md | 40 +
.../docs/feetech_identification.md | 29 +
.../Open_Duck_Mini-2/docs/head_schematic.xcf | Bin 0 -> 1564635 bytes
.../docs/open_duck_mini_v1_wiring_diagram.png | Bin 0 -> 51462 bytes
.../open_duck_mini_v2_wiring_diagram.drawio | 396 +++
.../docs/open_duck_mini_v2_wiring_diagram.png | Bin 0 -> 199472 bytes
.../Open_Duck_Mini-2/docs/prepare_robot.md | 123 +
.../Open_Duck_Mini-2/docs/print_guide.md | 43 +
.../Open_Duck_Mini-2/docs/sim2real.md | 45 +
.../Open_Duck_Mini-2/docs/wiring.drawio | 503 ++++
.../Open_Duck_Mini-2/docs/wiring.png | Bin 0 -> 8435393 bytes
.../experiments/LeRobot/README.md | 4 +
.../new_record_episodes_hdf5_NOT_WORKING.py | 166 ++
.../LeRobot/record_episodes_hdf5.py | 232 ++
.../Open_Duck_Mini-2/experiments/README.md | 3 +
.../Open_Duck_Mini-2/experiments/RL/env.py | 401 +++
.../experiments/RL/env_humanoid.py | 218 ++
.../experiments/RL/new/.gitignore | 1 +
.../experiments/RL/new/env.py | 389 +++
.../experiments/RL/new/eval.py | 130 +
.../experiments/RL/new/eval_simple.py | 142 +
.../experiments/RL/new/footsteps_env.py | 384 +++
.../experiments/RL/new/get_last_from_coach.sh | 3 +
.../experiments/RL/new/placo_imitate_env.py | 258 ++
.../experiments/RL/new/pretrain_bc.py | 41 +
.../experiments/RL/new/pretrain_gail.py | 90 +
.../experiments/RL/new/record_episodes.py | 79 +
.../experiments/RL/new/record_episodes_amp.py | 152 ++
.../RL/new/record_episodes_amp_old.py | 132 +
.../experiments/RL/new/simple_env.py | 320 +++
.../experiments/RL/new/train.py | 151 ++
.../experiments/RL/old_test.py | 83 +
.../experiments/RL/play_policy.py | 118 +
.../experiments/RL/pretrain_bc.py | 41 +
.../experiments/RL/pretrain_dbrm.py | 64 +
.../experiments/RL/pretrain_gail.py | 89 +
.../experiments/RL/record_episodes.py | 194 ++
.../experiments/RL/replay_episodes.py | 54 +
.../Open_Duck_Mini-2/experiments/RL/train.py | 150 ++
.../experiments/RL/view_hdf5.py | 11 +
.../anti_gravity_leg/anti_gravity.py | 116 +
.../experiments/identification/check_speed.py | 59 +
.../experiments/identification/get_data.py | 146 ++
.../experiments/identification/plot.py | 71 +
.../identification/plot_action_obs.py | 204 ++
.../experiments/identification/plot_obs.py | 121 +
.../experiments/identification/plot_speeds.py | 22 +
.../experiments/identification/utils.py | 42 +
.../experiments/mujoco/.gitignore | 1 +
.../mujoco/mujoco_placo_walk_engine_demo.py | 137 +
.../experiments/mujoco/mujoco_record_amp.py | 159 ++
.../experiments/mujoco/mujoco_walk_engine.py | 189 ++
.../mujoco/onnx_AMP_for_hardware_mujoco.py | 297 +++
.../experiments/mujoco/onnx_AMP_mujoco.py | 278 ++
.../experiments/mujoco/plot_latent.py | 15 +
.../experiments/placo/.gitignore | 2 +
.../placo/auto_placo_record_amp.py | 45 +
.../experiments/placo/bdx_walk.py | 322 +++
.../placo/generate_orientations_amp.py | 56 +
.../experiments/placo/placo_record_amp.py | 223 ++
.../placo/placo_record_amp_moves.py | 178 ++
.../placo/placo_walk_engine_mujoco.py | 114 +
.../placo/placo_walk_engine_test.py | 51 +
.../experiments/placo/replay_amp.py | 85 +
.../experiments/placo/test_bdx.py | 88 +
.../experiments/placo/test_placo_hwi_tmp.py | 18 +
.../experiments/real_robot/imu_gyro.py | 78 +
.../experiments/real_robot/move_test.py | 45 +
.../experiments/real_robot/new_run.py | 38 +
.../experiments/real_robot/plot.py | 45 +
.../experiments/real_robot/plot_imu.py | 33 +
.../experiments/real_robot/pressure_test.py | 15 +
.../experiments/real_robot/raw_imu_gyro.py | 50 +
.../experiments/real_robot/replay_imu_data.py | 44 +
.../experiments/real_robot/rl_walk.py | 103 +
.../experiments/real_robot/run.py | 166 ++
.../experiments/real_robot/utils.py | 15 +
.../experiments/v2/bench_com_time.py | 25 +
.../experiments/v2/configure_motors.py | 123 +
.../experiments/v2/identification.py | 80 +
.../experiments/v2/mujoco_placo_walk.py | 86 +
.../experiments/v2/onnx_AWD_mujoco.py | 243 ++
.../v2/onnx_AWD_mujoco_motor_control.py | 262 ++
.../experiments/v2/params_m6.json | 1 +
.../experiments/v2/placo_defaults.json | 52 +
.../experiments/v2/placo_fun_moves.py | 167 ++
.../experiments/v2/placo_walk_real_robot.py | 114 +
.../Open_Duck_Mini-2/experiments/v2/plot.py | 40 +
.../v2/plot_adaptation_module_latent.py | 11 +
.../v2/plot_adaptation_module_latent.py~ | 11 +
.../experiments/v2/pwm_control_test.py | 142 +
.../Open_Duck_Mini-2/experiments/v2/test.py | 39 +
.../test_understand_isaac_mujoco_transfer.py | 117 +
...and_isaac_mujoco_transfer_motor_control.py | 140 +
.../experiments/v2/walk_test.py | 16 +
.../Open_Duck_Mini-2/mini_bdx/__init__.py | 0
.../mini_bdx/mini_bdx/__init__.py | 0
.../mini_bdx/old_walk_engine/__init__.py | 1 +
.../mini_bdx/old_walk_engine/walk_engine.py | 477 ++++
.../mini_bdx/placo_walk_engine/__init__.py | 1 +
.../placo_walk_engine/placo_walk_engine.py | 301 +++
.../placo_walk_engine.py.bak | 303 +++
.../mini_bdx/mini_bdx/utils/__init__.py | 1 +
.../mini_bdx/mini_bdx/utils/mujoco_utils.py | 70 +
.../mini_bdx/mini_bdx/utils/poly_spline.py | 149 ++
.../mini_bdx/mini_bdx/utils/rl_utils.py | 120 +
.../mini_bdx/utils/xbox_controller.py | 130 +
.../mini_bdx/robots/.gitignore | 1 +
.../mini_bdx/robots/.gitignore~ | 0
.../mini_bdx/robots/bdx/39281023.prt.part | 13 +
.../mini_bdx/robots/bdx/39281023.prt.stl | Bin 0 -> 20484 bytes
.../mini_bdx/robots/bdx/antenna.part | 13 +
.../mini_bdx/robots/bdx/antenna.stl | Bin 0 -> 14484 bytes
.../robots/bdx/antenna_holder_left.part | 13 +
.../robots/bdx/antenna_holder_left.stl | Bin 0 -> 102184 bytes
.../robots/bdx/antenna_holder_right.part | 13 +
.../robots/bdx/antenna_holder_right.stl | Bin 0 -> 102184 bytes
.../robots/bdx/antenna_motor_holder.part | 13 +
.../robots/bdx/antenna_motor_holder.stl | Bin 0 -> 267684 bytes
.../mini_bdx/robots/bdx/antenna_tip.part | 13 +
.../mini_bdx/robots/bdx/antenna_tip.stl | Bin 0 -> 28884 bytes
.../mini_bdx/robots/bdx/axis_to_axis.part | 13 +
.../mini_bdx/robots/bdx/axis_to_axis.stl | Bin 0 -> 223284 bytes
.../mini_bdx/robots/bdx/block_to_axis.part | 13 +
.../mini_bdx/robots/bdx/block_to_axis.stl | Bin 0 -> 272084 bytes
.../mini_bdx/robots/bdx/bms.part | 13 +
.../mini_bdx/robots/bdx/bms.stl | Bin 0 -> 684 bytes
.../mini_bdx/robots/bdx/bno055.part | 13 +
.../mini_bdx/robots/bdx/bno055.stl | Bin 0 -> 73484 bytes
.../mini_bdx/robots/bdx/board.part | 13 +
.../mini_bdx/robots/bdx/board.stl | Bin 0 -> 368284 bytes
.../mini_bdx/robots/bdx/body_part.part | 13 +
.../mini_bdx/robots/bdx/body_part.stl | Bin 0 -> 359684 bytes
.../mini_bdx/robots/bdx/cage_back.part | 13 +
.../mini_bdx/robots/bdx/cage_back.stl | Bin 0 -> 222084 bytes
.../mini_bdx/robots/bdx/cage_bottom.part | 13 +
.../mini_bdx/robots/bdx/cage_bottom.stl | Bin 0 -> 409584 bytes
.../robots/bdx/cage_bottom_battery_hold.part | 13 +
.../robots/bdx/cage_bottom_battery_hold.stl | Bin 0 -> 181984 bytes
.../mini_bdx/robots/bdx/cage_top.part | 13 +
.../mini_bdx/robots/bdx/cage_top.stl | Bin 0 -> 139284 bytes
.../mini_bdx/robots/bdx/cell.part | 13 +
.../mini_bdx/robots/bdx/cell.stl | Bin 0 -> 273684 bytes
.../mini_bdx/robots/bdx/config.json | 5 +
.../robots/bdx/dc15_a01_case_b_dummy.part | 13 +
.../robots/bdx/dc15_a01_case_b_dummy.stl | Bin 0 -> 248884 bytes
.../robots/bdx/dc15_a01_case_f_dummy.part | 13 +
.../robots/bdx/dc15_a01_case_f_dummy.stl | Bin 0 -> 268984 bytes
.../robots/bdx/dc15_a01_case_m_dummy.part | 13 +
.../robots/bdx/dc15_a01_case_m_dummy.stl | Bin 0 -> 162184 bytes
.../robots/bdx/dc15_a01_horn_dummy.part | 13 +
.../robots/bdx/dc15_a01_horn_dummy.stl | Bin 0 -> 445184 bytes
.../robots/bdx/dc15_a01_horn_idle2_dummy.part | 13 +
.../robots/bdx/dc15_a01_horn_idle2_dummy.stl | Bin 0 -> 296884 bytes
.../mini_bdx/robots/bdx/double_u.part | 13 +
.../mini_bdx/robots/bdx/double_u.stl | Bin 0 -> 295884 bytes
.../mini_bdx/robots/bdx/foot.part | 13 +
.../mini_bdx/robots/bdx/foot.stl | Bin 0 -> 244784 bytes
.../mini_bdx/robots/bdx/foot_contact.part | 13 +
.../mini_bdx/robots/bdx/foot_contact.stl | Bin 0 -> 78684 bytes
.../mini_bdx/robots/bdx/front_cover.part | 13 +
.../mini_bdx/robots/bdx/front_cover.stl | Bin 0 -> 260384 bytes
.../mini_bdx/robots/bdx/head.part | 13 +
.../mini_bdx/robots/bdx/head.stl | Bin 0 -> 277084 bytes
.../mini_bdx/robots/bdx/head_roll_pitch.part | 13 +
.../mini_bdx/robots/bdx/head_roll_pitch.stl | Bin 0 -> 250284 bytes
.../robots/bdx/hip_left_roll_to_pitch.part | 13 +
.../robots/bdx/hip_left_roll_to_pitch.stl | Bin 0 -> 122384 bytes
.../robots/bdx/hip_right_roll_to_pitch.part | 13 +
.../robots/bdx/hip_right_roll_to_pitch.stl | Bin 0 -> 122784 bytes
.../mini_bdx/robots/bdx/holder.part | 13 +
.../mini_bdx/robots/bdx/holder.stl | Bin 0 -> 1484 bytes
.../robots/bdx/holder_u2d2_power_hub.part | 13 +
.../robots/bdx/holder_u2d2_power_hub.stl | Bin 0 -> 155184 bytes
.../robots/bdx/jst-b3b-eh-a.prt.1.part | 13 +
.../robots/bdx/jst-b3b-eh-a.prt.1.stl | Bin 0 -> 9884 bytes
.../mini_bdx/robots/bdx/jst-b3b-eh-a.prt.part | 13 +
.../mini_bdx/robots/bdx/jst-b3b-eh-a.prt.stl | Bin 0 -> 9884 bytes
.../robots/bdx/jst-b4b-eh-a.prt.1.part | 13 +
.../robots/bdx/jst-b4b-eh-a.prt.1.stl | Bin 0 -> 11484 bytes
.../mini_bdx/robots/bdx/jst-b4b-eh-a.prt.part | 13 +
.../mini_bdx/robots/bdx/jst-b4b-eh-a.prt.stl | Bin 0 -> 11484 bytes
.../robots/bdx/jst-b4b-ph-k-s.prt.part | 13 +
.../robots/bdx/jst-b4b-ph-k-s.prt.stl | Bin 0 -> 12284 bytes
.../micro_usb_2_0_connector__ab_rec.prt.part | 13 +
.../micro_usb_2_0_connector__ab_rec.prt.stl | Bin 0 -> 588284 bytes
.../mini_bdx/robots/bdx/pcb_u2d2.prt.part | 13 +
.../mini_bdx/robots/bdx/pcb_u2d2.prt.stl | Bin 0 -> 38684 bytes
.../mini_bdx/robots/bdx/power_switch.part | 13 +
.../mini_bdx/robots/bdx/power_switch.stl | Bin 0 -> 53384 bytes
.../mini_bdx/robots/bdx/rasp_spacer.part | 13 +
.../mini_bdx/robots/bdx/rasp_spacer.stl | Bin 0 -> 28884 bytes
.../mini_bdx/robots/bdx/raspberrypizerow.part | 13 +
.../mini_bdx/robots/bdx/raspberrypizerow.stl | Bin 0 -> 1062884 bytes
.../robots/bdx/renfort_head_link.part | 13 +
.../mini_bdx/robots/bdx/renfort_head_link.stl | Bin 0 -> 29884 bytes
.../mini_bdx/robots/bdx/renfort_leg.part | 13 +
.../mini_bdx/robots/bdx/renfort_leg.stl | Bin 0 -> 29884 bytes
.../mini_bdx/robots/bdx/robot.urdf | 2284 +++++++++++++++++
.../mini_bdx/robots/bdx/robot.xml | 305 +++
.../mini_bdx/robots/bdx/scene.xml | 31 +
.../mini_bdx/robots/bdx/sg90.part | 13 +
.../mini_bdx/robots/bdx/sg90.stl | Bin 0 -> 67284 bytes
.../mini_bdx/robots/bdx/spacer.part | 13 +
.../mini_bdx/robots/bdx/spacer.stl | Bin 0 -> 59084 bytes
.../mini_bdx/robots/bdx/u2d2_casing.prt.part | 13 +
.../mini_bdx/robots/bdx/u2d2_casing.prt.stl | Bin 0 -> 206484 bytes
.../mini_bdx/robots/bdx/usb_c_charger.part | 13 +
.../mini_bdx/robots/bdx/usb_c_charger.stl | Bin 0 -> 60684 bytes
.../robots/open_duck_mini_v2/antenna.part | 13 +
.../robots/open_duck_mini_v2/antenna.stl | Bin 0 -> 28884 bytes
.../open_duck_mini_v2/battery_pack_lid.part | 13 +
.../open_duck_mini_v2/battery_pack_lid.stl | Bin 0 -> 119584 bytes
.../robots/open_duck_mini_v2/bms.part | 14 +
.../mini_bdx/robots/open_duck_mini_v2/bms.stl | Bin 0 -> 684 bytes
.../robots/open_duck_mini_v2/bno055.part | 14 +
.../robots/open_duck_mini_v2/bno055.stl | Bin 0 -> 73484 bytes
.../robots/open_duck_mini_v2/board.part | 13 +
.../robots/open_duck_mini_v2/board.stl | Bin 0 -> 495884 bytes
.../robots/open_duck_mini_v2/body_back.part | 13 +
.../robots/open_duck_mini_v2/body_back.stl | Bin 0 -> 494784 bytes
.../robots/open_duck_mini_v2/body_front.part | 13 +
.../robots/open_duck_mini_v2/body_front.stl | Bin 0 -> 240184 bytes
.../open_duck_mini_v2/body_middle_bottom.part | 13 +
.../open_duck_mini_v2/body_middle_bottom.stl | Bin 0 -> 418284 bytes
.../open_duck_mini_v2/body_middle_top.part | 13 +
.../open_duck_mini_v2/body_middle_top.stl | Bin 0 -> 300684 bytes
.../robots/open_duck_mini_v2/cell.part | 14 +
.../robots/open_duck_mini_v2/cell.stl | Bin 0 -> 273684 bytes
.../robots/open_duck_mini_v2/config.json | 5 +
.../open_duck_mini_v2/drive_palonier.part | 13 +
.../open_duck_mini_v2/drive_palonier.stl | Bin 0 -> 102584 bytes
.../open_duck_mini_v2/foot_bottom_pla.part | 13 +
.../open_duck_mini_v2/foot_bottom_pla.stl | Bin 0 -> 59284 bytes
.../open_duck_mini_v2/foot_bottom_tpu.part | 13 +
.../open_duck_mini_v2/foot_bottom_tpu.stl | Bin 0 -> 102784 bytes
.../robots/open_duck_mini_v2/foot_side.part | 13 +
.../robots/open_duck_mini_v2/foot_side.stl | Bin 0 -> 244784 bytes
.../robots/open_duck_mini_v2/foot_top.part | 13 +
.../robots/open_duck_mini_v2/foot_top.stl | Bin 0 -> 246684 bytes
.../robots/open_duck_mini_v2/head.part | 13 +
.../robots/open_duck_mini_v2/head.stl | Bin 0 -> 1081784 bytes
.../open_duck_mini_v2/head_bot_sheet.part | 13 +
.../open_duck_mini_v2/head_bot_sheet.stl | Bin 0 -> 292084 bytes
.../open_duck_mini_v2/head_pitch_to_yaw.part | 13 +
.../open_duck_mini_v2/head_pitch_to_yaw.stl | Bin 0 -> 673084 bytes
.../open_duck_mini_v2/head_roll_mount.part | 13 +
.../open_duck_mini_v2/head_roll_mount.stl | Bin 0 -> 281484 bytes
.../open_duck_mini_v2/head_yaw_to_roll.part | 13 +
.../open_duck_mini_v2/head_yaw_to_roll.stl | Bin 0 -> 348284 bytes
.../robots/open_duck_mini_v2/holder.part | 14 +
.../robots/open_duck_mini_v2/holder.stl | Bin 0 -> 1484 bytes
.../left_antenna_holder.part | 13 +
.../open_duck_mini_v2/left_antenna_holder.stl | Bin 0 -> 108484 bytes
.../robots/open_duck_mini_v2/left_cache.part | 13 +
.../robots/open_duck_mini_v2/left_cache.stl | Bin 0 -> 107284 bytes
.../left_knee_to_ankle_left_sheet.part | 13 +
.../left_knee_to_ankle_left_sheet.stl | Bin 0 -> 284384 bytes
.../left_knee_to_ankle_right_sheet.part | 13 +
.../left_knee_to_ankle_right_sheet.stl | Bin 0 -> 289984 bytes
.../open_duck_mini_v2/left_roll_to_pitch.part | 13 +
.../open_duck_mini_v2/left_roll_to_pitch.stl | Bin 0 -> 504784 bytes
.../robots/open_duck_mini_v2/leg_spacer.part | 13 +
.../robots/open_duck_mini_v2/leg_spacer.stl | Bin 0 -> 159084 bytes
.../open_duck_mini_v2/neck_left_sheet.part | 13 +
.../open_duck_mini_v2/neck_left_sheet.stl | Bin 0 -> 211484 bytes
.../open_duck_mini_v2/neck_right_sheet.part | 13 +
.../open_duck_mini_v2/neck_right_sheet.stl | Bin 0 -> 215684 bytes
.../open_duck_mini_v2/passive_palonier.part | 13 +
.../open_duck_mini_v2/passive_palonier.stl | Bin 0 -> 102484 bytes
.../open_duck_mini_v2/power_switch.part | 14 +
.../robots/open_duck_mini_v2/power_switch.stl | Bin 0 -> 96584 bytes
.../open_duck_mini_v2/raspberrypizerow.part | 14 +
.../open_duck_mini_v2/raspberrypizerow.stl | Bin 0 -> 1062884 bytes
.../right_antenna_holder.part | 13 +
.../right_antenna_holder.stl | Bin 0 -> 108484 bytes
.../robots/open_duck_mini_v2/right_cache.part | 13 +
.../robots/open_duck_mini_v2/right_cache.stl | Bin 0 -> 107284 bytes
.../right_roll_to_pitch.part | 13 +
.../open_duck_mini_v2/right_roll_to_pitch.stl | Bin 0 -> 504684 bytes
.../robots/open_duck_mini_v2/robot.urdf | 2269 ++++++++++++++++
.../robots/open_duck_mini_v2/robot.xml | 303 +++
.../robots/open_duck_mini_v2/robot_motors.xml | 1086 ++++++++
.../open_duck_mini_v2/roll_bearing.part | 13 +
.../robots/open_duck_mini_v2/roll_bearing.stl | Bin 0 -> 28884 bytes
.../open_duck_mini_v2/roll_motor_bottom.part | 13 +
.../open_duck_mini_v2/roll_motor_bottom.stl | Bin 0 -> 89584 bytes
.../open_duck_mini_v2/roll_motor_top.part | 13 +
.../open_duck_mini_v2/roll_motor_top.stl | Bin 0 -> 226584 bytes
.../robots/open_duck_mini_v2/scene.xml | 32 +
.../open_duck_mini_v2/scene_position.xml | 32 +
.../robots/open_duck_mini_v2/sg90.part | 14 +
.../robots/open_duck_mini_v2/sg90.stl | Bin 0 -> 67284 bytes
.../open_duck_mini_v2/trunk_bottom.part | 13 +
.../robots/open_duck_mini_v2/trunk_bottom.stl | Bin 0 -> 282484 bytes
.../robots/open_duck_mini_v2/trunk_top.part | 13 +
.../robots/open_duck_mini_v2/trunk_top.stl | Bin 0 -> 951484 bytes
.../open_duck_mini_v2/usb_c_charger.part | 14 +
.../open_duck_mini_v2/usb_c_charger.stl | Bin 0 -> 60684 bytes
.../wj-wk00-0122topcabinetcase_95.part | 13 +
.../wj-wk00-0122topcabinetcase_95.stl | Bin 0 -> 2068984 bytes
.../wj-wk00-0123middlecase_56.part | 13 +
.../wj-wk00-0123middlecase_56.stl | Bin 0 -> 49684 bytes
.../wj-wk00-0124bottomcase_45.part | 13 +
.../wj-wk00-0124bottomcase_45.stl | Bin 0 -> 5117184 bytes
.../print/battery_pack_lid.stl | Bin 0 -> 97184 bytes
.../Open_Duck_Mini-2/print/body_back.stl | Bin 0 -> 353884 bytes
.../Open_Duck_Mini-2/print/body_front.stl | Bin 0 -> 195384 bytes
.../print/body_middle_bottom.stl | Bin 0 -> 339884 bytes
.../print/body_middle_top.stl | Bin 0 -> 244684 bytes
.../Open_Duck_Mini-2/print/bulb.stl | Bin 0 -> 139884 bytes
.../print/flash_light_module.stl | Bin 0 -> 328784 bytes
.../print/flash_reflector_interface.stl | Bin 0 -> 44484 bytes
.../print/foot_bottom_pla.stl | Bin 0 -> 48084 bytes
.../print/foot_bottom_tpu.stl | Bin 0 -> 77384 bytes
.../Open_Duck_Mini-2/print/foot_side.stl | Bin 0 -> 190084 bytes
.../Open_Duck_Mini-2/print/foot_top.stl | Bin 0 -> 181384 bytes
.../Open_Duck_Mini-2/print/head.stl | Bin 0 -> 1784584 bytes
.../Open_Duck_Mini-2/print/head_bot_sheet.stl | Bin 0 -> 238884 bytes
.../print/head_pitch_to_yaw.stl | Bin 0 -> 535584 bytes
.../print/head_roll_mount.stl | Bin 0 -> 228284 bytes
.../print/head_yaw_to_roll.stl | Bin 0 -> 281884 bytes
.../print/knee_to_ankle_left_sheet.stl | Bin 0 -> 227284 bytes
.../print/knee_to_ankle_right_sheet.stl | Bin 0 -> 232284 bytes
.../print/left_antenna_holder.stl | Bin 0 -> 72184 bytes
.../Open_Duck_Mini-2/print/left_cache.stl | Bin 0 -> 86984 bytes
.../Open_Duck_Mini-2/print/left_eye.stl | Bin 0 -> 106084 bytes
.../print/left_roll_to_pitch.stl | Bin 0 -> 398884 bytes
.../Open_Duck_Mini-2/print/leg_spacer.stl | Bin 0 -> 114684 bytes
.../print/neck_left_sheet.stl | Bin 0 -> 171484 bytes
.../print/neck_right_sheet.stl | Bin 0 -> 175084 bytes
.../print/right_antenna_holder.stl | Bin 0 -> 72084 bytes
.../Open_Duck_Mini-2/print/right_cache.stl | Bin 0 -> 86984 bytes
.../Open_Duck_Mini-2/print/right_eye.stl | Bin 0 -> 114684 bytes
.../print/right_roll_to_pitch.stl | Bin 0 -> 398884 bytes
.../print/roll_motor_bottom.stl | Bin 0 -> 68084 bytes
.../Open_Duck_Mini-2/print/roll_motor_top.stl | Bin 0 -> 183784 bytes
.../print/speaker_interface.stl | Bin 0 -> 115884 bytes
.../Open_Duck_Mini-2/print/speaker_stand.stl | Bin 0 -> 1069584 bytes
.../Open_Duck_Mini-2/print/trunk_bottom.stl | Bin 0 -> 222384 bytes
.../Open_Duck_Mini-2/print/trunk_top.stl | Bin 0 -> 723884 bytes
.../Open_Duck_Mini-2/pyproject.toml | 3 +
Open_Duck_Mini/Open_Duck_Mini-2/setup.cfg | 41 +
Open_Duck_Mini/Open_Duck_Mini-2/thanks.md | 10 +
349 files changed, 20359 insertions(+)
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/.gitignore
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/FUNDING.yml
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/LICENSE
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/README.md
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/docs/assembly_guide.md
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/docs/configure_motors.md
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/docs/feetech_identification.md
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/docs/head_schematic.xcf
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/docs/open_duck_mini_v1_wiring_diagram.png
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/docs/open_duck_mini_v2_wiring_diagram.drawio
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/docs/open_duck_mini_v2_wiring_diagram.png
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/docs/prepare_robot.md
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/docs/print_guide.md
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/docs/sim2real.md
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/docs/wiring.drawio
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/docs/wiring.png
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/LeRobot/README.md
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/LeRobot/new_record_episodes_hdf5_NOT_WORKING.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/LeRobot/record_episodes_hdf5.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/README.md
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/RL/env.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/RL/env_humanoid.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/RL/new/.gitignore
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/RL/new/env.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/RL/new/eval.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/RL/new/eval_simple.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/RL/new/footsteps_env.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/RL/new/get_last_from_coach.sh
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/RL/new/placo_imitate_env.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/RL/new/pretrain_bc.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/RL/new/pretrain_gail.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/RL/new/record_episodes.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/RL/new/record_episodes_amp.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/RL/new/record_episodes_amp_old.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/RL/new/simple_env.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/RL/new/train.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/RL/old_test.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/RL/play_policy.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/RL/pretrain_bc.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/RL/pretrain_dbrm.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/RL/pretrain_gail.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/RL/record_episodes.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/RL/replay_episodes.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/RL/train.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/RL/view_hdf5.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/anti_gravity_leg/anti_gravity.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/identification/check_speed.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/identification/get_data.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/identification/plot.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/identification/plot_action_obs.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/identification/plot_obs.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/identification/plot_speeds.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/identification/utils.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/mujoco/.gitignore
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/mujoco/mujoco_placo_walk_engine_demo.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/mujoco/mujoco_record_amp.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/mujoco/mujoco_walk_engine.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/mujoco/onnx_AMP_for_hardware_mujoco.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/mujoco/onnx_AMP_mujoco.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/mujoco/plot_latent.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/placo/.gitignore
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/placo/auto_placo_record_amp.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/placo/bdx_walk.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/placo/generate_orientations_amp.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/placo/placo_record_amp.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/placo/placo_record_amp_moves.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/placo/placo_walk_engine_mujoco.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/placo/placo_walk_engine_test.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/placo/replay_amp.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/placo/test_bdx.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/placo/test_placo_hwi_tmp.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/real_robot/imu_gyro.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/real_robot/move_test.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/real_robot/new_run.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/real_robot/plot.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/real_robot/plot_imu.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/real_robot/pressure_test.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/real_robot/raw_imu_gyro.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/real_robot/replay_imu_data.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/real_robot/rl_walk.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/real_robot/run.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/real_robot/utils.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/v2/bench_com_time.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/v2/configure_motors.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/v2/identification.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/v2/mujoco_placo_walk.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/v2/onnx_AWD_mujoco.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/v2/onnx_AWD_mujoco_motor_control.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/v2/params_m6.json
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/v2/placo_defaults.json
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/v2/placo_fun_moves.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/v2/placo_walk_real_robot.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/v2/plot.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/v2/plot_adaptation_module_latent.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/v2/plot_adaptation_module_latent.py~
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/v2/pwm_control_test.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/v2/test.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/v2/test_understand_isaac_mujoco_transfer.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/v2/test_understand_isaac_mujoco_transfer_motor_control.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/experiments/v2/walk_test.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/__init__.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/mini_bdx/__init__.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/mini_bdx/old_walk_engine/__init__.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/mini_bdx/old_walk_engine/walk_engine.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/mini_bdx/placo_walk_engine/__init__.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/mini_bdx/placo_walk_engine/placo_walk_engine.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/mini_bdx/placo_walk_engine/placo_walk_engine.py.bak
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/mini_bdx/utils/__init__.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/mini_bdx/utils/mujoco_utils.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/mini_bdx/utils/poly_spline.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/mini_bdx/utils/rl_utils.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/mini_bdx/utils/xbox_controller.py
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/.gitignore
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/.gitignore~
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/39281023.prt.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/39281023.prt.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/antenna.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/antenna.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/antenna_holder_left.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/antenna_holder_left.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/antenna_holder_right.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/antenna_holder_right.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/antenna_motor_holder.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/antenna_motor_holder.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/antenna_tip.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/antenna_tip.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/axis_to_axis.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/axis_to_axis.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/block_to_axis.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/block_to_axis.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/bms.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/bms.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/bno055.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/bno055.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/board.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/board.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/body_part.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/body_part.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/cage_back.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/cage_back.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/cage_bottom.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/cage_bottom.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/cage_bottom_battery_hold.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/cage_bottom_battery_hold.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/cage_top.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/cage_top.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/cell.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/cell.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/config.json
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/dc15_a01_case_b_dummy.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/dc15_a01_case_b_dummy.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/dc15_a01_case_f_dummy.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/dc15_a01_case_f_dummy.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/dc15_a01_case_m_dummy.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/dc15_a01_case_m_dummy.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/dc15_a01_horn_dummy.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/dc15_a01_horn_dummy.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/dc15_a01_horn_idle2_dummy.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/dc15_a01_horn_idle2_dummy.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/double_u.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/double_u.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/foot.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/foot.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/foot_contact.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/foot_contact.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/front_cover.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/front_cover.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/head.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/head.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/head_roll_pitch.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/head_roll_pitch.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/hip_left_roll_to_pitch.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/hip_left_roll_to_pitch.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/hip_right_roll_to_pitch.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/hip_right_roll_to_pitch.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/holder.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/holder.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/holder_u2d2_power_hub.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/holder_u2d2_power_hub.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/jst-b3b-eh-a.prt.1.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/jst-b3b-eh-a.prt.1.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/jst-b3b-eh-a.prt.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/jst-b3b-eh-a.prt.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/jst-b4b-eh-a.prt.1.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/jst-b4b-eh-a.prt.1.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/jst-b4b-eh-a.prt.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/jst-b4b-eh-a.prt.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/jst-b4b-ph-k-s.prt.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/jst-b4b-ph-k-s.prt.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/micro_usb_2_0_connector__ab_rec.prt.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/micro_usb_2_0_connector__ab_rec.prt.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/pcb_u2d2.prt.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/pcb_u2d2.prt.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/power_switch.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/power_switch.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/rasp_spacer.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/rasp_spacer.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/raspberrypizerow.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/raspberrypizerow.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/renfort_head_link.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/renfort_head_link.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/renfort_leg.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/renfort_leg.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/robot.urdf
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/robot.xml
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/scene.xml
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/sg90.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/sg90.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/spacer.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/spacer.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/u2d2_casing.prt.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/u2d2_casing.prt.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/usb_c_charger.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/bdx/usb_c_charger.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/antenna.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/antenna.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/battery_pack_lid.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/battery_pack_lid.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/bms.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/bms.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/bno055.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/bno055.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/board.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/board.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/body_back.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/body_back.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/body_front.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/body_front.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/body_middle_bottom.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/body_middle_bottom.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/body_middle_top.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/body_middle_top.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/cell.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/cell.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/config.json
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/drive_palonier.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/drive_palonier.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/foot_bottom_pla.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/foot_bottom_pla.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/foot_bottom_tpu.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/foot_bottom_tpu.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/foot_side.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/foot_side.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/foot_top.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/foot_top.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/head.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/head.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/head_bot_sheet.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/head_bot_sheet.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/head_pitch_to_yaw.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/head_pitch_to_yaw.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/head_roll_mount.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/head_roll_mount.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/head_yaw_to_roll.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/head_yaw_to_roll.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/holder.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/holder.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/left_antenna_holder.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/left_antenna_holder.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/left_cache.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/left_cache.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/left_knee_to_ankle_left_sheet.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/left_knee_to_ankle_left_sheet.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/left_knee_to_ankle_right_sheet.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/left_knee_to_ankle_right_sheet.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/left_roll_to_pitch.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/left_roll_to_pitch.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/leg_spacer.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/leg_spacer.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/neck_left_sheet.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/neck_left_sheet.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/neck_right_sheet.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/neck_right_sheet.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/passive_palonier.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/passive_palonier.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/power_switch.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/power_switch.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/raspberrypizerow.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/raspberrypizerow.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/right_antenna_holder.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/right_antenna_holder.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/right_cache.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/right_cache.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/right_roll_to_pitch.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/right_roll_to_pitch.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/robot.urdf
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/robot.xml
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/robot_motors.xml
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/roll_bearing.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/roll_bearing.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/roll_motor_bottom.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/roll_motor_bottom.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/roll_motor_top.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/roll_motor_top.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/scene.xml
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/scene_position.xml
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/sg90.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/sg90.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/trunk_bottom.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/trunk_bottom.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/trunk_top.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/trunk_top.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/usb_c_charger.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/usb_c_charger.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/wj-wk00-0122topcabinetcase_95.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/wj-wk00-0122topcabinetcase_95.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/wj-wk00-0123middlecase_56.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/wj-wk00-0123middlecase_56.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/wj-wk00-0124bottomcase_45.part
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/mini_bdx/robots/open_duck_mini_v2/wj-wk00-0124bottomcase_45.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/print/battery_pack_lid.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/print/body_back.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/print/body_front.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/print/body_middle_bottom.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/print/body_middle_top.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/print/bulb.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/print/flash_light_module.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/print/flash_reflector_interface.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/print/foot_bottom_pla.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/print/foot_bottom_tpu.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/print/foot_side.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/print/foot_top.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/print/head.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/print/head_bot_sheet.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/print/head_pitch_to_yaw.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/print/head_roll_mount.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/print/head_yaw_to_roll.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/print/knee_to_ankle_left_sheet.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/print/knee_to_ankle_right_sheet.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/print/left_antenna_holder.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/print/left_cache.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/print/left_eye.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/print/left_roll_to_pitch.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/print/leg_spacer.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/print/neck_left_sheet.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/print/neck_right_sheet.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/print/right_antenna_holder.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/print/right_cache.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/print/right_eye.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/print/right_roll_to_pitch.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/print/roll_motor_bottom.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/print/roll_motor_top.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/print/speaker_interface.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/print/speaker_stand.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/print/trunk_bottom.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/print/trunk_top.stl
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/pyproject.toml
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/setup.cfg
create mode 100644 Open_Duck_Mini/Open_Duck_Mini-2/thanks.md
diff --git a/Open_Duck_Mini/Open_Duck_Mini-2/.gitignore b/Open_Duck_Mini/Open_Duck_Mini-2/.gitignore
new file mode 100644
index 0000000..786bdaf
--- /dev/null
+++ b/Open_Duck_Mini/Open_Duck_Mini-2/.gitignore
@@ -0,0 +1,11 @@
+__pycache__/
+gym/logs/*
+*.pkl
+mini_bdx/mini_bdx.egg-info/*
+experiments/RL/data/*
+experiments/RL/new/logs/
+experiments/RL/new/sac/
+experiments/RL/new/ppo/
+*.zip
+*.txt
+*.onnx
diff --git a/Open_Duck_Mini/Open_Duck_Mini-2/FUNDING.yml b/Open_Duck_Mini/Open_Duck_Mini-2/FUNDING.yml
new file mode 100644
index 0000000..22a38ad
--- /dev/null
+++ b/Open_Duck_Mini/Open_Duck_Mini-2/FUNDING.yml
@@ -0,0 +1,3 @@
+# These are supported funding model platforms
+
+github: apirrone
diff --git a/Open_Duck_Mini/Open_Duck_Mini-2/LICENSE b/Open_Duck_Mini/Open_Duck_Mini-2/LICENSE
new file mode 100644
index 0000000..261eeb9
--- /dev/null
+++ b/Open_Duck_Mini/Open_Duck_Mini-2/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/Open_Duck_Mini/Open_Duck_Mini-2/README.md b/Open_Duck_Mini/Open_Duck_Mini-2/README.md
new file mode 100644
index 0000000..0becdbe
--- /dev/null
+++ b/Open_Duck_Mini/Open_Duck_Mini-2/README.md
@@ -0,0 +1,97 @@
+# Open Duck Mini v2
+
+
+
+We are making a miniature version of the BDX Droid by Disney. It is about 42 centimeters tall with its legs extended.
+The full BOM cost should be under $400 !
+
+This repo is kind of a hub where we centralize all resources related to this project. This is a working repo, so there are a lot of undocumented scripts :) We'll try to clean things up at some point.
+
+
+# State of sim2real
+
+https://github.com/user-attachments/assets/58721d0f-2f95-4088-8900-a5d02f41bba7
+
+https://github.com/user-attachments/assets/4129974a-9d97-4651-9474-c078043bb182
+
+https://github.com/user-attachments/assets/a0afcd38-15d8-40c6-8171-a619107406b8
+
+
+# Updates
+
+> Update 02/04/2024: You can try two policies we trained : [this one](BEST_WALK_ONNX.onnx) and [this one](BEST_WALK_ONNX_2.onnx)
+> Run with the following arguments :
+> python v2_rl_walk_mujoco.py --onnx_model_path ~/BEST_WALK_ONNX_2.onnx
+
+> Update 15/03/2025: join our discord server to get help or show us your duck :) https://discord.gg/UtJZsgfQGe
+
+> Update 07/02/2025: Big progress on sim2real, see videos above :)
+
+> Update 24/02/2025: Working hard on sim2real !
+
+> Update 07/02/2025 : We are writing documentation on the go, but the design and BOM should not change drastically. Still missing the "expression" features, but they can be added after building the robot!
+
+> Update 22/01/2025 : The mechanical design is pretty much finalized (fixing some mistakes here and there). The current version does not include all the "expression" features we want to include in the final robot (LEDs for the eyes, a camera, a speaker and a microphone). We are now working on making it walk with reinforcement learning !
+
+# Community
+
+
+
+Join our discord community ! https://discord.gg/UtJZsgfQGe
+
+# CAD
+
+https://cad.onshape.com/documents/64074dfcfa379b37d8a47762/w/3650ab4221e215a4f65eb7fe/e/0505c262d882183a25049d05
+
+See [this document](docs/prepare_robot.md) for getting from a onshape design to a simulated robot in MuJoCo (Warning, outdated. Has not been updated in a while)
+
+# RL stuff
+
+We are switching to Mujoco Playground, see this [repo](https://github.com/apirrone/Open_Duck_Playground)
+
+https://github.com/user-attachments/assets/037a1790-7ac1-4140-b154-2c901d20d5f5
+
+
+## Reference motion generation for imitation learning
+
+https://github.com/user-attachments/assets/4cb52e17-99a5-47a8-b841-4141596b7afb
+
+See [this repo](https://github.com/apirrone/Open_Duck_reference_motion_generator)
+
+## Actuator identification
+
+We used Rhoban's [BAM](https://github.com/Rhoban/bam)
+
+# BOM
+
+https://docs.google.com/spreadsheets/d/1gq4iWWHEJVgAA_eemkTEsshXqrYlFxXAPwO515KpCJc/edit?usp=sharing
+
+Chinese: https://zihao-ai.feishu.cn/wiki/AfAtw69vRigXaRk5UkbcrAiLnJw?from=from_copylink
+
+# Build Guide
+
+Chinese: https://zihao-ai.feishu.cn/wiki/space/7488517034406625281
+
+## Print Guide
+
+See [print_guide](docs/print_guide.md).
+
+## Assembly Guide
+
+See [assembly guide (incomplete)](docs/assembly_guide.md).
+
+# Embedded runtime
+
+This repo contains the code to run the policies on the onboard computer (Raspberry pi zero 2w) https://github.com/apirrone/Open_Duck_Mini_Runtime
+
+# Training your own policies
+
+If you want to train your own policies, and contribute to making the ducks walk nicely, see [this document](docs/sim2real.md)
+
+> Thanks a lot to HuggingFace and Pollen Robotics for sponsoring this project !
diff --git a/Open_Duck_Mini/Open_Duck_Mini-2/docs/assembly_guide.md b/Open_Duck_Mini/Open_Duck_Mini-2/docs/assembly_guide.md
new file mode 100644
index 0000000..e264fe5
--- /dev/null
+++ b/Open_Duck_Mini/Open_Duck_Mini-2/docs/assembly_guide.md
@@ -0,0 +1,251 @@
+# Assembly guide
+
+> Before assembling the duck, you should first [configure your motors](./configure_motors.md)
+
+## Requirements :
+
+You will need :
+- A soldering iron, and basic electronics tools and skills
+- X m3 screws (TODO : add the exact number)
+- Some wire
+- Loctite Threadlocker blue 243
+
+> General note : Everytime you screw something in the motors metal against metal, you want to use a little loctite threadlocker. This will prevent the screws from coming loose due to the vibrations during the operation of the robot. It adds a little time to to the build, but you'll be glad you took the time ;)
+>
+> Don't use loctite with the plastic screws
+
+> At any time, you can refer to the CAD here : https://cad.onshape.com/documents/64074dfcfa379b37d8a47762/w/3650ab4221e215a4f65eb7fe/e/0505c262d882183a25049d05
+
+## Steps :
+
+### Assemble the trunk
+
+Place the bearings in `trunk_bottom` like so, and insert M3 inserts in these holes. It's also a good time to insert the 4 M3 inserts in the bottom of this part to mount body parts later on.
+
+
+
+Then assamble `trunk_bottom` and `trunk_top`, and screw them together with 2 `M3x10` screws through these holes
+
+
+
+Mount the middle motor like so and screw it with the plastic screws that came with the motors :
+
+
+
+Insert `roll_motor_bottom` like this
+
+
+
+
+### Assemble the feet
+
+Both feet are the same.
+
+First, assemble `foot_bottom_tpu` with `foot_bottom_pla`. Insert M3 inserts in these holes :
+
+
+
+And screw the two parts together with two `M3x6` screws.
+
+Then, insert M3 inserts in these holes in `foot_top` here :
+
+
+
+And assemble everything like so. Make sure the driver side of the motor is on the `foot_top` part side :
+
+
+
+ |
+ |
+
+
+
+You can add the foot switches like this too :
+
+> You press fit them so that the switch is activated when the foot touches the ground
+
+
+
+ |
+ |
+
+
+
+
+### Assemble the shins
+
+Insert M3 Inserts in these holes of `leg_spacer` (on both sides. Insert 4 M3 inserts in total) :
+
+
+
+Then, first plug the motor cable in the foot's motor, and make it go through the `right_sheet` like so
+
+
+
+Then assemble like below:
+
+
+
+### Assemble the thighs
+
+The thigh is pretty much the same thing, except the `hip_pitch` motor is mounted this way (important for the zero position)
+
+
+
+### Assemble the hips
+
+Mount `left_roll_to_pitch` or `right_roll_to_pitch`, here the parts are symmetrical so you have to use the right one.
+
+
+
+Mount `roll_motor_top` to the `hip_yaw` servo (screw from the bottom). Don't mount the servo to the trunk yet.
+
+
+
+
+Then mount `hip_roll` like this
+
+
+
+And insert the sub assembly like this
+
+
+
+Screw everything you can (with the plastic screws provided with the servos)
+
+You can now mount the leg like this :
+
+
+
+And do the same for the other leg :)
+
+Your duck should now look like this
+
+
+
+### Assemble the neck
+
+You know the drill
+
+
+
+### Assemble the head mechanism
+
+First, mount `head_pitch_to_yaw` like this
+
+
+
+Then, independently mount `head_yaw_to_roll` and `head_roll_mount` to `head_roll dof`
+
+
+
+(You can insert `head_bot_plate` and `body_middle_top` now too to avoid having to disassamble the head later)
+
+Then
+
+
+
+Then
+
+
+
+Your duck should now look like this
+
+
+
+### Mount the servo driver board
+
+TODO take a photo
+
+### Mount the IMU
+
+Like this
+
+> It's actually better to mount the IMU with the correct natural orientation, which would be flipped along the X axis compared to the pictures below
+> In the picture below, the IMU is mounted upside down.
+> It probably doesn't really matter a lot if you mount it upside down or not. You can configure how you mounted it later
+
+
+
+  |
+  |
+
+
+
+## Electronics
+
+Here is the global electonics schematic for reference
+
+
+
+  |
+  |
+
+
+
+Here is how to wire the feet
+
+
+
+
+
+### Battery pack
+
+> To be safe, make sure your cells are charged to the same voltage before placing them in the holder.
+
+
+
+  |
+  |
+
+
+
+
+### Head
+
+First, insert the M3 inserts in all these holes
+
+
+
+> TODO add instructions for expression features (camera, antennas, eye leds, projector and speaker)
+
+Then insert the bearing, mount the ear motors and the raspberry pi zero 2w.
+
+For reference, the inside of the head looks like this now
+
+
+
+
+Then assemble the neck with the head like this
+
+
+
+
+## Body
+
+First screw on `body_middle_bottom`
+
+
+
+Then insert the M3 inserts in all the holes of `body_middle_bottom` and `body_middle_top` on which we'll mount the battery pack and `body_front`.
+
+Then mount `body_middle_top`, `body_front` and the battery pack
+
+
+
+  |
+  |
+
+
+
+Et voila :)
+
+
+
+  |
+  |
+
+
+
+
+> Now that your duck is fully assembled, you setup the raspberry pi and the runtime software [here](https://github.com/apirrone/Open_Duck_Mini_Runtime)
diff --git a/Open_Duck_Mini/Open_Duck_Mini-2/docs/configure_motors.md b/Open_Duck_Mini/Open_Duck_Mini-2/docs/configure_motors.md
new file mode 100644
index 0000000..a2bf15a
--- /dev/null
+++ b/Open_Duck_Mini/Open_Duck_Mini-2/docs/configure_motors.md
@@ -0,0 +1,40 @@
+# Configure the motors
+
+> This sould be done independently on each motor *before* builiding the duck.
+>
+> During the process, the motor will move to its zero position. You can then install the horn while trying to align it the best you can like in the photo below. (Don't worry if it's not perfect, we will compensate for that later)
+
+
+
+
+Clone and install (`pip install -e .`) the runtime repo on the `v2` branch : `https://github.com/apirrone/Open_Duck_Mini_Runtime`
+
+You can either install it on your own computer or on the raspberry pi for the configuration, as you want. You'll just want a way to power the servos, for example, the battery pack.
+
+
+Then for each motor, run the following command :
+
+```bash
+python configure_motor.py --id
+```
+
+The motors ids are :
+
+```python
+{
+ "left_hip_yaw": 20,
+ "left_hip_roll": 21,
+ "left_hip_pitch": 22,
+ "left_knee": 23,
+ "left_ankle": 24,
+ "neck_pitch": 30,
+ "head_pitch": 31,
+ "head_yaw": 32,
+ "head_roll": 33,
+ "right_hip_yaw": 10,
+ "right_hip_roll": 11,
+ "right_hip_pitch": 12,
+ "right_knee": 13,
+ "right_ankle": 14,
+}
+```
diff --git a/Open_Duck_Mini/Open_Duck_Mini-2/docs/feetech_identification.md b/Open_Duck_Mini/Open_Duck_Mini-2/docs/feetech_identification.md
new file mode 100644
index 0000000..c9dbd45
--- /dev/null
+++ b/Open_Duck_Mini/Open_Duck_Mini-2/docs/feetech_identification.md
@@ -0,0 +1,29 @@
+$\theta_d^f$ : $\theta$ requested in firmware units
+
+$\epsilon = \theta_d^f - \theta^f$
+
+### Error in firmware units
+
+> $\lambda$ is the duty cycle, aka the **PWM**
+
+
+
+$\epsilon^f = \epsilon \frac{4096}{2\pi}$
+
+> 12 bits
+
+### Firmware duty cycle
+
+
+$\lambda^f = K_p \epsilon^f$
+
+$\lambda = K_p K_g\epsilon$
+
+
+$R = 2.5\Omega$
+
+------
+
+$\lambda = \epsilon K_p K_g$
+
+$K_g = \frac{\lambda}{\epsilon K_p }$
\ No newline at end of file
diff --git a/Open_Duck_Mini/Open_Duck_Mini-2/docs/head_schematic.xcf b/Open_Duck_Mini/Open_Duck_Mini-2/docs/head_schematic.xcf
new file mode 100644
index 0000000000000000000000000000000000000000..014171342f0beefcd0ee9c34ff417c0b9f2e413f
GIT binary patch
literal 1564635
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