ΠΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΊ Π½Π°ΡΡΠ½ΠΎΠΉ ΡΡΠ°ΡΡΠ΅: "Design and performance evaluation of receding horizon controllers for quadrupedal robots: case study on stairs climbing and balancing" ΠΠ²ΡΠΎΡΡ: Artem A. Egorov , Maxim V. Lyahovski , Denis A. Sokolov , Alexey M. Burkov , Sergey A. Kolyubin ΠΡΠΎ Π½Π°ΡΡΠ½ΡΠΉ ΠΊΠΎΠ΄, Π°Π²ΡΠΎΡΡ Π½Π΅ Π½Π΅ΡΡΡ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΡ Π·Π° ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ.
## Dependencies Install Eigen3 from apt
sudo apt install libeigen3-dev
If you build it from source, delete it
cd <eigen_dir>/build
sudo make uninstall
Install apt dependencies
rosdep install --from-paths src --ignore-src -r -y --skip-keys "raisim"
# if not working
sudo apt install ros-noetic-pcl-ros
sudo apt install ros-noetic-grid-map
Build from source
cd <workspace>/src
git clone https://github.com/anybotics/kindr
git clone https://github.com/anybotics/kindr_ros
catkin build
Build Go1 version
sudo apt install libeigen3-dev liblcm-dev ros-noetic-pcl-ros ros-noetic-grid-map
git clone -b test_go1 https://github.com/amburkoff/be2r_cmpc_unitree/
git clone https://gitlab.com/rl-unitree-a1/go1_description.git
git clone https://github.com/anybotics/kindr
git clone https://github.com/anybotics/kindr_ros
git clone https://gitlab.com/rl-unitree-a1/raisim_ros_wrapper.git
git clone -b go1 https://gitlab.com/rl-unitree-a1/raisim_unitree_ros_driver.git
git clone -b go1_version https://gitlab.com/rl-unitree-a1/unitree_legged_msgs.git
git clone -b go1 https://github.com/unitreerobotics/unitree_legged_sdk.git
git clone https://github.com/perchess/elevation_mapping.git
# Need to update to go1 version. Should work as is
# git clone https://gitlab.com/rl-unitree-a1/realsense_ros_raspberry.git
# I prefer to use catkin build instead of catkin_make. If one want to use it, install
sudo apt install python3-catkin-tools
ΠΠ°ΠΏΡΡΠΊ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΎΡΠ°. ΠΠ° Π²ΡΠ±ΠΎΡ (Π² opengl Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π»Π΅Π³ΡΠ΅):
# unity
roslaunch raisim unity.launch
# opengl
roslaunch raisim opengl.launch
ΠΠ°ΠΏΡΡΠΊ ΡΠ°ΠΉΡΠΈΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ°:
roslaunch raisim_unitree_ros_driver spawn.launch scene:=2
ΠΡΠ³ΡΠΌΠ΅Π½ΡΡ:
- scene - ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠΎΠ·Π΄Π°ΡΡ Π² ΡΡΠ΅Π½Π΅ ΡΠΈΠΌΡΠ»ΡΡΠΎΡΠ°.
ΠΠ°ΠΏΡΡΠΊ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° Π΄Π»Ρ ΡΠΈΠΌΡΠ»ΡΡΠΎΡΠ° ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌ launch ΡΠ°ΠΉΠ»ΠΎΠΌ:
roslaunch be2r_cmpc_unitree unitree_sim.launch
ΠΠ°ΠΏΡΡΠΊ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° Π΄Π»Ρ ΡΠΈΠΌΡΠ»ΡΡΠΎΡΠ° ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΌ launch ΡΠ°ΠΉΠ»ΠΎΠΌ:
roslaunch be2r_cmpc_unitree unitree_a1.launch sim:=true rviz:=true rqt_reconfigure:=true
ΠΡΠ³ΡΠΌΠ΅Π½ΡΡ:
- sim - (bool) ΡΠΈΠΌΡΠ»ΠΈΡΠΈΡ ΠΈΠ»ΠΈ Π·Π°ΠΏΡΡΠΊ Π½Π° ΡΠΎΠ±ΠΎΡΠ΅;
- rviz - (bool) Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π»ΠΈ rviz;
- rqt_reconfigure - (bool) Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π»ΠΈ rqt.
ΠΠ°ΠΏΡΡΠΊ rqt, ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡΠΌΠΈ ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠΎΠ±ΠΎΡΠ° ΡΠ°ΠΌ (ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ)
rqt
ΠΠ°ΠΏΡΡΠΊ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ (ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌ launch ΡΠ°ΠΉΠ»ΠΎΠΌ):
roslaunch be2r_cmpc_unitree unitree_real.launch
ΠΠ°ΠΏΡΡΠΊ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° Π΄Π»Ρ ΡΠΈΠΌΡΠ»ΡΡΠΎΡΠ° ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΌ launch ΡΠ°ΠΉΠ»ΠΎΠΌ:
roslaunch be2r_cmpc_unitree unitree_a1.launch sim:=false rviz:=false rqt_reconfigure:=false
ΠΡΠ³ΡΠΌΠ΅Π½ΡΡ:
- sim - (bool) ΡΠΈΠΌΡΠ»ΠΈΡΠΈΡ ΠΈΠ»ΠΈ Π·Π°ΠΏΡΡΠΊ Π½Π° ΡΠΎΠ±ΠΎΡΠ΅;
- rviz - (bool) Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π»ΠΈ rviz;
- rqt_reconfigure - (bool) Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π»ΠΈ rqt.
ΠΠ· ΠΏΠΎΡ ΠΎΠ΄ΠΊΠΈ Π²Π΅ΡΠ½ΡΡΡΡΡ Π² Passive ΠΌΠΎΠΆΠ½ΠΎ Π΄Π²ΡΠΌΡ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ:
- ΠΠ· Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π½Π°ΠΏΡΡΠΌΡΡ. ΠΡΠΈΠ²ΠΎΠ΄Ρ ΡΡΠ°Π·Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΡΡ Π² ΡΠ΅ΠΆΠΈΠΌ Π΄Π΅ΠΌΠΏΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΡΠΎΠ±ΠΎΡ ΠΏΠ»Π°Π²Π½ΠΎ ΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π½Π° Π·Π΅ΠΌΠ»Ρ.
- ΠΠ΅ΡΠ΅ΠΉΡΠΈ ΡΠ½Π°ΡΠ°Π»Π° Π² Balance_Stand, ΠΏΠΎΡΠΎΠΌ Lay_Down ΠΈ Passive.
graph TD;
Passive-->Stand_Up;
Stand_Up-->Lay_Down;
Lay_Down-->Stand_Up;
Stand_Up-->Balance_Stand;
Stand_Up-->MPC_Locomotion;
Stand_Up-->Vision_Locomotion;
Vision_Locomotion-->Balance_Stand;
Balance_Stand-->Vision_Locomotion;
Balance_Stand-->MPC_Locomotion;
Balance_Stand-->Lay_Down;
MPC_Locomotion-->Balance_Stand;
Π ΡΠ°ΠΉΠ»Π΅ be2r_cmpc_unitree_node Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π³Π»Π°Π²Π½ΡΠΉ ΡΠΈΠΊΠ» ΡΠ°Π±ΠΎΡΡ Π²ΡΠ΅ΠΉ Π½ΠΎΠ΄Ρ. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΠΎΠ½ ΡΡΠ°ΡΠ°Π΅ΡΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΡΠ°ΡΡΠΎΡΠΎΠΉ 500 ΠΡ. Π’ΠΎ Π΅ΡΡΡ, Π΅ΡΠ»ΠΈ ΠΎΠ½ ΡΡΠΏΠ΅Π²Π°Π΅Ρ ΠΏΠΎΡΡΠΈΡΠ°ΡΡ Π²ΡΠ΅, ΡΡΠΎ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π² ΡΠ΅Π»Π΅ ΡΠΈΠΊΠ»Π° ΠΌΠ΅Π½ΡΡΠ΅ ΡΠ΅ΠΌ Π·Π° 2 ΠΌΡ, ΡΠΎ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠ΅ΡΠΊΠΎ Ρ ΡΠ°ΡΡΠΎΡΠΎΠΉ 500 ΠΡ. ΠΡΠ»ΠΈ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΡΠΏΠ΅Π²Π°ΡΡ - Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΌΠ΅Π½ΡΡΠ΅ΠΉ ΡΠ°ΡΡΠΎΡΠΎΠΉ.
ΠΠ»Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΡΠΎΠ±ΠΎΡΡ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°ΡΡ Π½ΠΎΠ³Π°ΠΌΠΈ. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π½ΠΎΠ³ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ Π½Π° Π΄Π²Π΅ ΡΠ°Π·Ρ: ΡΠ°Π·Ρ ΠΏΠΎΠ»Π΅ΡΠ° (swing) ΠΈ ΡΠ°Π·Ρ ΠΊΠΎΠ½ΡΠ°ΠΊΡΠ° Ρ Π·Π΅ΠΌΠ»Π΅ΠΉ (stance). Π ΡΠ°Π·Π΅ ΠΊΠΎΠ½ΡΠ°ΠΊΡΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π΄Π²ΡΠΌΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°ΠΌΠΈ: MPC (Model Predictive Control) ΠΈ WBC (Whole Body Controller). Π ΡΠ°Π·Π΅ ΠΏΠΎΠ»Π΅ΡΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ WBC. ΠΡΠ΅ΠΌΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½ΡΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π½ΠΎΠ³Π΅ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡΡ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΡΠ°Π·Π΅, ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅ΡΡΡ Gait Scheduler. ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΎΠ² ΡΠ°Π· ΡΠΊΠ»Π°Π΄ΡΠ²Π°Π΅ΡΡΡ Π² ΡΠ°Π±Π»ΠΎΠ½ ΠΏΠΎΡ
ΠΎΠ΄ΠΊΠΈ.
ΠΠ»Ρ ΡΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°Π·Π½ΡΡ
ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠ², Π° ΡΠ°ΠΊΠΆΠ΅ Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ
ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ Π΅ΡΡΡ ΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ Π°Π²ΡΠΎΠΌΠ°Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ FSM (Finite State Machine). Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΡΠ²ΠΎΠΉ Π½Π°Π±ΠΎΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠ² ΠΈ Π² Π½ΠΈΡ
ΡΠ²ΠΎΠΉ Π½Π°Π±ΠΎΡ ΠΏΠΎΡ
ΠΎΠ΄ΠΎΠΊ.
Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠ±ΠΎΡΠΎΠΌ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠΎΠ΄Π°ΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ Ρ ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠΉ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ (X, Y) ΠΈ ΡΠ³Π»ΠΎΠ²ΠΎΠΉ (Z) ΡΠΊΠΎΡΠΎΡΡΠ΅ΠΉ.
ΠΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ° ΡΠΈΡΡΠ΅ΠΌΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ:
ΠΠ»ΠΈΠΆΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΊ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π² ΠΊΠΎΠ΄Π΅ ΡΡΠΎΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ ΠΎΠΏΠΈΡΠ°Π½ Π² ΡΡΠ°ΡΡΠ΅ convex_mpc. Π ΡΠ°ΠΉΠ»Π΅ MPC_to_QP ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΡΠ°ΡΠΏΠΈΡΠ°Π½ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ ΠΎΡ Π·Π°Π΄Π°ΡΠΈ MPC ΠΊ Π·Π°Π΄Π°ΡΠΈ QP. ΠΡΠΎ Π½ΡΠΆΠ½ΠΎ Π΄Π»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ Π·Π°Π΄Π°ΡΡ ΠΊ Π²ΠΈΠ΄Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΎΠ»Π²Π΅Ρ.
ΠΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² ΠΏΠ°ΠΏΠΊΠ΅ convexMPC. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ ΠΌΠ΅Π½ΡΠ»ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΡΡΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°, ΡΠ΄Π΅Π»Π°Π»ΠΈ ΠΊΠΎΠΏΠΈΡ ΡΡΠΎΠΉ ΠΏΠ°ΠΏΠΊΠΈ ΠΈ Π½Π°Π·Π²Π°Π»ΠΈ CMPC.
ΠΠΎΠ΄Π΅Π»Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠΈ ΡΠΎΠ±ΠΎΡΠ° ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΊ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΡΠ²Π΅ΡΠ΄ΠΎΠ³ΠΎ ΡΠ΅Π»Π° (ΠΊΠΈΡΠΏΠΈΡΠ°/ΠΊΠ°ΡΡΠΎΡΠΊΠΈ), Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠΎΠΉ Π½ΠΎΠ³ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΏΡΠ΅Π½Π΅Π±ΡΠ΅Π³Π°Π΅ΠΌ, ΡΠΊ ΠΈΡ
ΠΌΠ°ΡΡΠ° ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ Π½ΠΈΠΆΠ΅ ΠΌΠ°ΡΡΡ ΡΠ΅Π»Π°. ΠΠΎΡΡΠΎΠΌΡ ΡΡΠΈΡΠ°Π΅ΠΌ, ΡΡΠΎ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π½ΠΎΠ³ Π² Π²ΠΎΠ·Π΄ΡΡ
Π΅ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ Π²Π»ΠΈΡΠ΅Ρ Π½Π° ΡΠ΅Π»ΠΎ. Π‘ΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠ΅Π»Π° ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π·Π° ΡΡΠ΅Ρ ΡΠΈΠ» Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ Π½ΠΎΠ³ΠΈ Π² ΠΊΠΎΠ½ΡΠ°ΠΊΡΠ΅ Π΄Π°Π²ΡΡ Π½Π° ΠΏΠΎΠ²Π΅ΡΡ
Π½ΠΎΡΡΡ Π·Π΅ΠΌΠ»ΠΈ. ΠΡΠΎΠ³ΠΎΠ²ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠΈ ΡΠΏΡΠΎΡΠ°ΡΡ, ΡΡΠΎΠ±Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΌΡ Π²ΠΈΠ΄Ρ Π½ΠΈΠΆΠ΅.
Π ΠΊΠΎΠ΄Π΅ Π΅ΡΡΡ ΡΠ°Π·Π½ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°ΡΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ: sparse ΠΈ dense, Π° ΡΠ°ΠΊΠΆΠ΅ Π½Π°Π±ΠΎΡ ΠΈΠ· 3 ΡΠΎΠ»Π²Π΅ΡΠΎΠ². Π ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠΌ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ°Π±ΠΎΡΠ°Π» Π²Π°ΡΠΈΠ°Π½Ρ dense + qpOASES, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ ΡΠΎΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π΅Π³ΠΎ. ΠΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· Π·Π°ΠΏΡΡΠΊΠ°Π»ΠΈ, Π½ΠΎ ΡΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅ ΠΈΠ·ΡΡΠ°Π»ΠΈ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π½Π° Π³Π»Π°Π· ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠΎΠ±ΠΎΡΠ° Π½ΠΈΡΠ΅ΠΌ Π½Π΅ ΠΎΡΠ»ΠΈΡΠ°Π»ΠΎΡΡ.
MPC ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ ΡΠ°ΡΡΠΎΡΠΎΠΉ ~30 ΠΡ. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΡΡΠΎ ΠΌΠ΅Π½ΡΡΠ΅ ΡΠ°ΡΡΠΎΡΡ ΡΠ°Π±ΠΎΡΡ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΡΠΈΠΊΠ»Π° (500 ΠΡ) ΠΈ Π²Π΅ΡΡ ΠΊΠΎΠ΄ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, Π²ΡΠ·ΠΎΠ² ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° MPC ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· Π² Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΈΠΊΠ»ΠΎΠ² ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° (ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ iterations_between_mpc).
Π£ Π΄Π°Π½Π½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° Π΅ΡΡΡ ΡΡΠ΄ ΠΎΡΠ»ΠΈΡΠΈΠΉ ΠΎΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π² ΡΡΠ°ΡΡΠ΅:
- Π ΡΡΠ°ΡΡΠ΅ ΡΠΊΠ°Π·Π°Π½ΠΎ, ΡΡΠΎ ΠΌΠ°ΡΡΠΈΡΠ° ΡΠΈΡΡΠ΅ΠΌΡ ΠΡ
ΠΎΠ΄-Π‘ΠΎΡΡΠΎΡΠ½ΠΈΠ΅-ΠΡΡ
ΠΎΠ΄ Π²ΡΡΠ΅ ΡΡΡΠΎΠΈΡΡΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΡΠ΅Π΄Π½Π΅Π³ΠΎ ΡΠ³Π»Π° yaw ΠΈΠ»ΠΈ
$\psi$ ΠΏΠΎ Π²ΡΠ΅ΠΌΡ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΡ ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠΉ ΡΡΠ°Π΅ΠΊΡΠΎΡΠΈΠΈ ΡΠ΅Π»Π°. Π ΠΊΠΎΠ΄Π΅ ΠΏΡΠΎΡΡΠΎ Π±Π΅ΡΠ΅ΡΡΡ ΡΠ΅ΠΊΡΡΠΈΠΉ ΡΠ³ΠΎΠ» yaw. - Π ΡΡΠ°ΡΡΠ΅ ΠΌΠ°ΡΡΠΈΡΠ° Π²Ρ ΠΎΠ΄Π° ΡΠΈΡΡΠ΅ΠΌΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° ΡΡΠΈΡΠ°Π΅ΡΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ°Π³Π° Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°. ΠΠ°ΡΡΠΈΡΠ° ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΠ°Π΄ΠΈΡΡ-Π²Π΅ΠΊΡΠΎΡΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠ΅Π½ΡΡΠΎΠΌ ΡΠ΅Π»Π° ΠΈ ΠΊΠΎΠ½ΡΠ°ΠΌΠΈ Π½ΠΎΠ³, ΡΠΎ Π½ΡΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΌΠ°ΡΡΠΈΡΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΠΏΠΎΡ ΠΎΠ΄ΠΊΠΈ Π½Π° Π²Π΅ΡΡ Π³ΠΎΡΠΈΠ·ΠΎΠ½Ρ. Π ΠΊΠΎΠ΄Π΅ ΡΡΠ° ΠΌΠ°ΡΡΠΈΡΠ° ΡΡΠΈΡΠ°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΈ Π΄Π°Π»ΡΡΠ΅ Π½Π° Π³ΠΎΡΠΈΠ·ΠΎΠ½Ρ Π½Π΅ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π½ΠΈ Π½ΠΎΠ³ΠΈ (ΡΠΈΠ»Ρ), ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² ΠΊΠΎΠ½ΡΠ°ΠΊΡΠ΅, Π½ΠΈ Π²Π΅Π»ΠΈΡΠΈΠ½Π° ΡΠ°Π΄ΠΈΡΡ-Π²Π΅ΠΊΡΠΎΡΠΎΠ².
Π£ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° Π΅ΡΡΡ ΠΏΠΎΠ±ΠΎΡΠ½ΡΠΉ ΡΡΡΠ΅ΠΊΡ - ΠΏΡΠΈ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΈ Π΅ΡΡΡ ΠΎΠΊΠΎΠ»ΠΎ Π»ΠΈΠ½Π΅ΠΉΠ½Π°Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ Π½Π°ΠΊΠ»ΠΎΠ½Π° ΠΊΠΎΡΠΏΡΡΠ° ΠΎΡ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΠΊΠΎΡΠΎΡΡΠΈ. ΠΠ»Ρ Π΅Π΅ ΠΊΠΎΠΌΠΏΠ΅Π½ΡΠ°ΡΠΈΠΈ Π²Π²Π΅Π΄Π΅Π½Π° ΠΏΡΠΎΡΡΠ°Ρ ΡΠ²ΡΠΈΡΡΠΈΠΊΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠ΅Π½ΡΠ΅Ρ ΠΆΠ΅Π»Π°Π΅ΠΌΡΠΉ ΡΠ³ΠΎΠ» Π½Π°ΠΊΠ»ΠΎΠ½Π° ΡΠ΅Π»Π° Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΠΊΠΎΡΠΎΡΡΠΈ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ.
- Pitch:
- Roll:
Π³Π΄Π΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ ΡΠ»Π°Π³Π°Π΅ΠΌΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ°Π΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
ΠΠ²ΡΠΈΡΡΠΈΠΊΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΠΎΡΡΠΊΡΡΠΈΡΠΎΠ²ΠΊΡ ΠΏΠ»ΠΎΡΠΊΠΎΡΡΠΈ ΠΊΠΎΠ½ΡΠ°ΠΊΡΠ° ΠΈ Π΄Π²Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°: ΡΠ³ΠΎΠ» Π½Π°ΠΊΠ»ΠΎΠ½Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ
ΠΠ°Π³Π»ΡΠ΄Π½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ ΡΠΈΠ» ΡΠ΅Π°ΠΊΡΠΈΠΉ:
ΠΠΎ Π² Π½Π°ΡΠ΅ΠΉ Π²Π΅ΡΡΠΈΠΈ Π‘Π ΡΠ΅Π»Π° ΠΏΠΎΠ²Π΅ΡΠ½ΡΡΠ° Π²ΠΎΠΊΡΡΠ³ ΠΎΡΠΈ Z Π½Π° 90 Π³ΡΠ°Π΄ΡΡΠΎΠ² ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΠΉ, ΡΡΠΎ Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅. Π’ΠΎ Π΅ΡΡΡ, ΠΎΡΡ X ΡΠΌΠΎΡΡΠΈΡ Π²ΠΏΠ΅ΡΠ΅Π΄, ΠΎΡΡ Y - Π²Π»Π΅Π²ΠΎ, Z ΡΠ°ΠΊ ΠΆΠ΅ Π²Π²Π΅ΡΡ
.
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ΅ΠΆΠΈΡ Π² ΠΏΠ°ΠΏΠΊΠ°Ρ
WBC ΠΈ WBC_Ctrl.
ΠΠ°Π»ΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΊΠ°Π·Π°ΡΡ ΠΏΡΠΎ ΡΡΠΎΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ Π΄ΠΎΡΠ»ΠΈ Π΄ΠΎ Π΅Π³ΠΎ Π³Π»ΡΠ±ΠΎΠΊΠΎΠ³ΠΎ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ. ΠΠ±ΡΠΈΠ΅ ΡΠ°ΠΊΡΡ - ΡΠ°Π±ΠΎΡΠ° Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΡΠΈΠΊΠ»Π° (Ρ ΡΠ°ΡΡΠΎΡΠΎΠΉ 500 ΠΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ), Π±Π΅ΡΠ΅Ρ Π½Π° Π²Ρ
ΠΎΠ΄ ΡΠ°ΡΡΡΠΈΡΠ°Π½Π½ΡΠ΅ "ΡΠ΅ΡΠ½ΠΎΠ²ΡΠ΅" ΡΠΈΠ»Ρ ΠΈΠ· MPC, ΡΠ°ΡΡΡΠΈΡΡΠ²Π°Π΅Ρ ΠΆΠ΅Π»Π°Π΅ΠΌΡΠ΅ ΠΌΠΎΠΌΠ΅Π½ΡΡ Π² ΠΏΡΠΈΠ²ΠΎΠ΄Π°Ρ
Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΠΎΠ»Π½ΠΎΠΉ Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠΈ ΡΠΎΠ±ΠΎΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ. Π ΡΡΠ°ΡΡΡΡ
Π΅ΡΡΡ Π΄Π²Π΅ Π²Π΅ΡΡΠΈΠΈ: WBC ΠΈ WBIC (Whole Body Controller, Whole Body Impulse Controller). Π ΠΊΠΎΠ΄Π΅, ΠΊΠ°ΠΊ ΠΌΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ WBIC, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° Π»Π΅ΠΆΠΈΡ Π² ΡΠ°ΠΉΠ»Π°Ρ
WBIC. Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ, WBC_Ctrl ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° WBIC ΠΈ ΠΌΡ Π½Π°Π±Π»ΡΠ΄Π°Π΅ΠΌ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΡ Π²ΡΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠΈΠ» ΠΈΠ· ΠΠ Π‘ ΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ.
WBIC ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΡΠΈΠΊΠ»Π°, ΡΠΎ Π΅ΡΡΡ Ρ ΡΠ°ΡΡΠΎΡΠΎΠΉ 500 ΠΡ.
ΠΠ°Π³Π»ΡΠ΄Π½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ Π΄Π²ΡΡ
Π½ΠΎΠΊΡΡΠΎΠ»Π»Π΅ΡΠΎΠ²:
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅ FootSwingTrajectory
Π’ΡΠ°Π΅ΠΊΡΠΎΡΠΈΡ ΡΠ°Π·Ρ ΠΏΠΎΠ»Π΅ΡΠ° Π½ΠΎΠ³ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΠΎΡΡΠ°Π²Π½ΠΎΠΉ ΡΠΏΠ»Π°ΠΉΠ½ ΠΠ΅Π·ΡΠ΅. ΠΠ°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ X ΠΈ Y ΠΎΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ - Π»ΠΈΠ½Π΅ΠΉΠ½Π°Ρ, Π° Z ΡΡΡΠΎΠΈΡΡΡ ΠΏΠΎ 3 ΡΠΎΡΠΊΠ°ΠΌ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π΄Π²ΡΡ
ΠΊΡΠΈΠ²ΡΡ
ΠΠ΅Π·ΡΠ΅. ΠΠ΅ΡΠ²Π°Ρ ΠΈ Π²ΡΠΎΡΠ°Ρ ΡΠΎΡΠΊΠΈ - ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ° Z Π½Π°ΡΠ°Π»Π° ΠΈ ΠΊΠΎΠ½ΡΠ° ΡΡΠ°Π΅ΠΊΡΠΎΡΠΈΠΈ, ΡΡΠ΅ΡΡΡ - ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ° Z Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΠΎΡΠΊΠΈ + Π²ΡΡΠΎΡΠ° ΡΠ°Π³Π°. Π’ΡΠ΅ΡΡΡ ΡΠΎΡΠΊΠ° Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΠΈ Π²ΡΠΎΡΠΎΠΉ, ΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ Π²Π΅ΡΡΠΈΠ½ΠΎΠΉ ΡΡΠ°Π΅ΠΊΡΠΎΡΠΈΠΈ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ Π½ΠΎΠ³ΠΈ. Π’ΡΠ°Π΅ΠΊΡΠΎΡΠΈΡ ΡΡΡΠΎΠΈΡΡΡ Π² ΠΌΠΈΡΠΎΠ²ΠΎΠΉ Π‘Π ΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π±Π°Π·ΠΈΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ°Π·Π° ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ° Π½ΠΎΠ³.
ΠΡΠΎΡΠ°Ρ ΡΠΎΡΠΊΠ° ΠΈΠ»ΠΈ ΡΠΎΡΠΊΠ°, ΠΊΡΠ΄Π° Π½Π°ΡΡΡΠΏΠΈΡ Π½ΠΎΠ³Π°, Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ ΠΏΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΠ²ΡΠΈΡΡΠΈΠΊΠ΅:
ΠΠ΄Π΅ ΠΏΠ΅ΡΠ²ΡΠ΅
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅ LegController
ΠΠ»Π°ΡΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Ρ
ΡΠ°Π½ΠΈΡΡΡ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΠΈ ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π½ΠΎΠ³, ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ, ΡΠ°ΡΡΠ΅Ρ ΠΌΠ°ΡΡΠΈΡΡ Π―ΠΊΠΎΠ±ΠΈ. ΠΡΠΌΠ΅ΡΠ°ΡΠΈΡ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΎΠ² Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΎΠ³ΠΈ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ ΠΎΡ ΠΏΠ»Π΅ΡΠ°. ΠΡΠΌΠ΅ΡΠ°ΡΠΈΡ Π½ΠΎΠ³ ΠΈ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΎΠ²:
- 0 - ΠΏΠ΅ΡΠ΅Π΄Π½ΡΡ ΠΏΡΠ°Π²Π°Ρ, ΠΏΡΠΈΠ²ΠΎΠ΄Ρ 0, 1, 2
- 1 - ΠΏΠ΅ΡΠ΅Π΄Π½ΡΡ Π»Π΅Π²Π°Ρ, ΠΏΡΠΈΠ²ΠΎΠ΄Ρ 3, 4, 5
- 2 - Π·Π°Π΄Π½ΡΡ ΠΏΡΠ°Π²Π°Ρ, ΠΏΡΠΈΠ²ΠΎΠ΄Ρ 6, 7, 8
- 3 - Π·Π°Π΄Π½ΡΡ Π»Π΅Π²Π°Ρ, ΠΏΡΠΈΠ²ΠΎΠ΄Ρ 9, 10, 11
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅ be2r_cmpc_unitree
Π‘Π°ΠΌΡΠΉ Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠΉ ΠΊΠ»Π°ΡΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠΎΠ·Π΄Π°ΡΡΡΡ Π²ΡΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ Π΄ΡΡΠ³ΠΈΡ
ΠΊΠ»Π°ΡΡΠΎΠ², ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ Π΄ΡΡΠ³ Π΄ΡΡΠ³Ρ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ run Ρ FSM. Π ΡΡΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ROS ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΡΠΈΠΌΡΠ»ΡΡΠΎΡΠΎΠΌ, Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΊΠΎΠ»Π±ΡΠΊΠΈ. Π ΡΡΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ ΡΠ°ΡΡΡΠΈΡΡΠ²Π°Π΅ΡΡΡ ΠΈΡΠΎΠ³ΠΎΠ²ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ, ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠΉ ΡΠΎΠ±ΠΎΡΡ. ΠΠΎΠΌΠ΅Π½Ρ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΎΠΌ ΡΠ°ΡΡΡΠΈΡΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΠΎΡΠΌΡΠ»Π΅:
-
$K_{p_j},K_{d_j}$ -- PD joint coefficients; -
$K_{p_{cart}},K_{d_{cart}}$ -- PD Cartesian coefficients; -
$F_{ff},\tau_{ff}$ -- Feedforward control: Force from MPC calculation, torque from WBIC calculation respectively; -
$q,p$ -- The joint angle and position of the leg's feet.
Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Π½Π°ΠΏΠΈΡΠ°Π½ Π΄Π»Ρ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΡΠΎΠ±ΠΎΡΠ°, ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠΌ Π²ΡΠ°ΡΠ΅Π½ΠΈΠΈ Π·Π²Π΅Π½ΡΠ΅Π² ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ Unitree A1. ΠΡΠ»ΠΈΡΠ°ΡΡΡΡ Π·Π½Π°ΠΊΠ°ΠΌΠΈ Π²ΡΠΎΡΠΎΠΉ ΠΈ ΡΡΠ΅ΡΠΈΠΉ ΠΏΡΠΈΠ²ΠΎΠ΄ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΎΠ³ΠΈ. ΠΡΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡΡ Π·Π½Π°ΠΊ Π½Π° ΠΏΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΡΠΉ Ρ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΡΠΊΠΎΡΠΎΡΡΠΈ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΎΠ² ΠΏΡΠΈ ΡΡΠ΅Π½ΠΈΠΈ Ρ ΡΠΎΠ±ΠΎΡΠ°, ΠΈ ΠΌΠ΅Π½ΡΡΡ Π·Π½Π°ΠΊΠΈ ΠΌΠΎΠΌΠ΅Π½ΡΠΎΠ² ΠΏΠ΅ΡΠ΅Π΄ ΠΎΡΠΏΡΠ°Π²ΠΊΠΎΠΉ Π½Π° ΡΠΎΠ±ΠΎΡΠΎΠ°.
ΠΠ°ΠΏΡΡΠΊΠ°ΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΈΠΌΡΠ»ΡΡΠΎΡΠΎΠΌ ΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ΅Π°Π»ΡΠ½ΡΠΌ ΡΠΎΠ±ΠΎΡΠΎΠΌ. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠΈΠΌΡΠ»ΡΡΠΎΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ RaiSim. ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΎΠ±Π°ΠΊΠΎΠΉ Π² ΡΠΈΠΌΡΠ»ΡΡΠΎΡΠ΅ Π½ΡΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ Π»Π°ΡΠ½Ρ ΡΠ°ΠΉΠ» raisim_unitree_ros_driver.launch. ΠΠ±ΠΌΠ΅Π½ Π΄Π°Π½Π½ΡΠΌΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° ΠΈ ΡΠΈΠΌΡΠ»ΡΡΠΎΡΠ° ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΡΠ΅ΡΠ΅Π· ROS ΡΠΎΠΏΠΈΠΊΠΈ. Π‘Π²ΡΠ·Ρ Ρ ΡΠΎΠ±ΠΎΡΠΎΠΌ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΡΠ΅ΡΠ΅Π· UDP. Π ΡΠ²ΡΠ·ΠΈ Ρ ΡΡΠΈΠΌ, Π² ΠΊΠΎΠ΄Π΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ ΡΠ»Π°Π³, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠ΅Π½ΡΠ΅Ρ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΈΠ΅ΠΌΠ° ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ
Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΈΠΏΠ° Π·Π°ΠΏΡΡΠΊΠ°: is_udp. ΠΡΠ»ΠΈ ΡΠ»Π°Π³ ΠΏΠΎΠ΄Π½ΡΡ, ΡΠΎ ΠΎΠ±ΠΌΠ΅Π½ Π΄Π°Π½Π½ΡΠΌΠΈ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡΡ ΡΠ΅ΡΠ΅Π· SDK unitree_legged_sdk. SDK Π΅ΡΡΡ ΡΠ°Π·Π½ΡΡ
Π²Π΅ΡΡΠΈΠΉ Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ
ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΡΠΎΠ±ΠΎΡΠΎΠ². ΠΡ ΡΠΎΡΠΊΠ½ΡΠ»ΠΈ ΡΠ΅Π±Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ Π²Π΅ΡΡΠΈΡ, Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π°Ρ ΡΠΎΠ±ΠΎΡ ΡΠ°Π±ΠΎΡΠ°Π». Π SDK ΠΊΡΠΎΠΌΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½ΡΠΌΠΈ Π΅ΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ ΠΊΠΎΠ½ΡΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ. ΠΡΠ³Π»ΡΠ΄ΠΈΡ ΠΎΠ½ ΠΊΠ°ΠΊ ΠΎΡΠ΄Π΅Π»ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π½Π° Π²Ρ
ΠΎΠ΄ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠΎΠ±ΠΎΡΠ° ΠΈ ΡΠΈΡΠ»ΠΎ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠΉ ΠΌΠΎΡΠ½ΠΎΡΡΠΈ Π² Π΄Π΅ΡΡΡΠΊΠ°Ρ
% (ΡΠΎ Π΅ΡΡΡ Π΅ΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ΠΎ ΡΠΈΡΠ»ΠΎ 4 - ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ 40% ΠΌΠΎΡΠ½ΠΎΡΡΠΈ). ΠΡΠΈ ΠΏΡΠ΅Π²ΡΡΠ΅Π½ΠΈΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠΉ ΠΌΠΎΡΠ½ΠΎΡΡΠΈ, ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ Π²ΡΠΊΠ»ΡΡΠΈΡΡΡ ΠΈ Π½Π°ΠΏΠΈΡΠ΅Ρ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π΅.
Π’Π°ΠΊ ΠΊΠ°ΠΊ Ρ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΎΠ² Π΅ΡΡΡ ΡΠ²ΠΎΠΉ Π²ΡΡΠΎΠΊΠΎΡΠ°ΡΡΠΎΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Ρ ΠΠ ΡΠ΅Π³ΡΠ»ΡΡΠΎΡΠΎΠΌ, Π° Π² ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π΅ΡΡΡ ΠΊΠΎΠ½ΡΡΡ ΠΠ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΠΈΠ²ΠΎΠ΄Π°ΠΌΠΈ (ΡΠΌ ΠΏΡΠ½ΠΊΡ LegController, ΠΈΡΠΎΠ³ΠΎΠ²ΡΡ ΡΠΎΡΠΌΡΠ»Ρ ΡΠ°ΡΡΠ΅ΡΠ° ΠΌΠΎΠΌΠ΅Π½ΡΠ°), Π±ΡΠ» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΡΠ»Π°Π³ is_low_level, ΠΏΡΠΈ ΠΏΠΎΠ΄Π½ΡΡΠΈΠΈ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ, ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΡ ΠΠ ΡΠ΅Π³ΡΠ»ΡΡΠΎΡΠ° ΠΏΡΠΈΠ²ΠΎΠ΄ΠΎΠ² ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ Π½Π° Π½ΠΈΠΆΠ½ΠΈΠΉ ΡΡΠΎΠ²Π΅Π½Ρ, Π° Π² ΠΈΡΠΎΠ³ΠΎΠ²ΠΎΠΉ Π΄Π»ΠΈΠ½Π½ΠΎΠΉ ΡΠΎΡΠΌΡΠ»Π΅ ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π·Π°Π½ΡΠ»ΡΡΡΡΡ.
ΠΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ° Π·Π°ΠΏΡΡΠΊΠ° Ρ ΡΠΈΠΌΡΠ»ΡΡΠΎΡΠΎΠΌ:
ΠΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ° Π·Π°ΠΏΡΡΠΊΠ° Ρ ΡΠ΅Π°Π»ΡΠ½ΡΠΌ ΡΠΎΠ±ΠΎΡΠΎΠΌ:
Π£ Unitree Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ Π΅ΡΡΡ ΡΠ²ΠΎΠΉ ΠΏΠ°ΠΊΠ΅Ρ Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ unitree_legged_msgs, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π»Π΅ΠΆΠ°Ρ ROS ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠ΅ ΡΡΡΡΠΊΡΡΡΠ°ΠΌ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½ΡΠΌΠΈ Ρ ΡΠ΅Π°Π»ΡΠ½ΡΠΌ ΡΠΎΠ±ΠΎΡΠΎΠΌ. ΠΡ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π»ΠΈ ΡΡΠΎΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΡΠ΅Π±Π΅, Π½Π΅ ΠΌΠ΅Π½ΡΠ»ΠΈ ΠΈΡΡ ΠΎΠ΄Π½ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, Π½ΠΎ ΡΡΠ°Π»ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΡΡΠ΄Π° ΡΠ²ΠΎΠΈ ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΠ΅. ΠΠ»Ρ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½ΡΠΌΠΈ Ρ ΡΠΎΠ±ΠΎΡΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π²Π΅ ΡΡΡΡΠΊΡΡΡΡ: LowCmd ΠΈ LowState. Π LowCmd Π»Π΅ΠΆΠ°Ρ ΠΆΠ΅Π»Π°Π΅ΠΌΡΠ΅ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΠΎΠ±ΠΎΡΡ, Π² LowState Π»Π΅ΠΆΠΈΡ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠΎΠ±ΠΎΡΠ°: ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΡΠΊΠΎΡΠΎΡΡΠΈ Π²ΡΠ΅Ρ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΎΠ², IMU.
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΡΠ°Π±ΠΎΡΡ Π½ΠΎΠ΄Ρ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ
ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΡ
ROS ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ². ΠΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ ΡΠ°ΠΉΠ»Ρ Π»Π΅ΠΆΠ°Ρ Π² ΠΏΠ°ΠΏΠΊΠ΅ config. ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π½Π°Ρ
ΠΎΠ΄ΡΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅ ros_config ΠΏΠΎΠ΄ ΠΏΡΠ΅ΡΠΈΠΊΡΠΎΠΌ static_params. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ ΡΠ°ΡΡΠΈΡΠ½ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π»ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΅ΡΠ΅ ΠΈ Π½Π° Unitree Go1, ΡΠΎ ΡΠΎΠ·Π΄Π°Π»ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ ΡΠ°ΠΉΠ»Ρ Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΡΠΎΠ±ΠΎΡΠ°. ΠΠ½ΠΈ Π½Π°Π·ΡΠ²Π°ΡΡΡΡ config_a1_real(sim) ΠΈ config_go1_real(sim). ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΎΠ±ΠΎΡΠ° Π΅ΡΡΡ Π΄Π²Π΅ Π²Π΅ΡΡΠΈΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ ΡΠ°ΠΉΠ»ΠΎΠ²: Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Π² ΡΠΈΠΌΡΠ»ΡΡΠΎΡΠ΅ (..._sim) ΠΈ Π½Π° ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ ΡΠΎΠ±ΠΎΡΠ΅ (..._real), ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π΄Π»Ρ Π»ΡΡΡΠ΅ΠΉ ΡΠ°Π±ΠΎΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π² ΠΎΠ±ΠΎΠΈΡ
Π²Π°ΡΠΈΠ°Π½ΡΠ°Ρ
Π·Π°ΠΏΡΡΠΊΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ. ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΠ½Π΅ΡΠ»ΠΈ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΎΠ² Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΎΠ±ΠΎΡΠ° Π² joint_limits_a1 ΠΈ joint_limits_a1. ΠΡΡΠΎΠΌΡ Π² launch-ΡΠ°ΠΉΠ»Π°Ρ
Π΅ΡΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ robot_type, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΡΠΎΠ±ΠΎΡΠ° [a1, go1].
ΠΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π·Π°Π΄Π°ΡΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅ ros_dynamic_params.cfg. Π£ Π½ΠΈΡ
ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°ΡΡ Π½Π°ΡΠ°Π»ΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π½ΠΎ ΠΎΠ½ΠΈ ΡΡΠ΅Π±ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠ±ΠΎΡΠΊΠΈ ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ. ΠΠΎΡΡΠΎΠΌΡ Π²ΡΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΈΠ· ΡΡΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΏΡΠΎΠ΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½Ρ Π² ros_config Ρ ΠΏΡΠ΅ΡΠΈΠΊΡΠΎΠΌ dynamic_loader. ΠΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ Π»Π°ΡΠ½Ρ ΡΠ°ΠΉΠ»Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π½ΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΡΠΈΡΡΠ²Π°Π΅Ρ ΡΡΠΈ Π½Π°ΡΠ°Π»ΡΠ½ΡΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΈ Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ ΠΈΡ
Π² dynamic_reconfigure. ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΠ°ΠΊΠΎΠΌΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΌΡ ΠΊΠΎΡΡΡΠ»Ρ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡΡ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π²ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π±Π΅Π· ΠΏΠ΅ΡΠ΅ΡΠ±ΠΎΡΠΊΠΈ.
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΠΌΠ΅Π½ΡΠ΅ΠΌ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅:
- gait_period - ΠΏΠ΅ΡΠΈΠΎΠ΄ Π²ΡΠ΅Ρ ΠΏΠΎΡ ΠΎΠ΄ΠΎΠΊ Π² ΠΈΡΠ΅ΡΠ°ΡΠΈΡΡ MPC
- joint_limits - Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π»ΠΈΠΌΠΈΡΠΎΠ² Π½Π° ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π²Π΅Π½ΡΠ΅Π². ΠΡΠΈ Π²ΡΡ ΠΎΠ΄Π΅ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄Π° Π·Π° ΡΠ°Π·ΡΠ΅ΡΠ΅Π½Π½ΡΠ΅ Π³ΡΠ°Π½ΠΈΡΡ, ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ ΡΠΊΡΡΡΠ΅Π½Π½ΠΎ Π²ΡΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΈ Π²ΡΠ΅ ΠΏΡΠΈΠ²ΠΎΠ΄Ρ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΡΡΡ Π² ΡΠ΅ΠΆΠΈΠΌ Π΄Π΅ΠΌΠΏΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ
- body_height - Π²ΡΡΠΎΡΠ° ΡΠ΅Π»Π° ΡΠΎΠ±ΠΎΡΠ°, ΠΊΠΎΡΠΎΡΡΡ Π½ΡΠΆΠ½ΠΎ ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Ρ ΠΎΠ΄ΡΠ±Ρ. ΠΡΡΠΎΡΠ° Π·Π°Π΄Π°Π΅ΡΡΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½ΠΎΠ³
- Swing_traj_height - Π²ΡΡΠΎΡΠ°, Π½Π° ΠΊΠΎΡΠΎΡΡΡ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°ΡΡ Π½ΠΎΠ³ΠΈ Π² ΡΠ°Π·Π΅ ΠΏΠΎΠ»Π΅ΡΠ°
- cmpc_gait - Π½ΠΎΠΌΠ΅Ρ ΠΏΠΎΡ ΠΎΠ΄ΠΊΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
ΠΡΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΈ ΠΊΠΈΠ½Π΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠΎΠ±ΠΎΡΠ° Ρ ΡΠ°Π½ΡΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅ MiniCheetah.h. ΠΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π²Π·ΡΡΡ ΠΈΠ· ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ URDF ΡΠ°ΠΉΠ»Π° ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ Unitree Π½Π° github.
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅ PositionVelocityEstimator ΠΈ OrientationEstimator
ΠΡΠ΅Π½ΠΊΠ° ΠΎΡΠΈΠ΅Π½ΡΠ°ΡΠΈΠΈ ΡΠ΅Π»Π° Π±Π΅ΡΠ΅ΡΡΡ Π½Π°ΠΏΡΡΠΌΡΡ ΠΈΠ· IMU. OrientatonEstimator ΡΠ°ΡΡΡΠΈΡΡΠ²Π°Π΅Ρ ΠΌΠ°ΡΡΠΈΡΡ ΠΏΠΎΠ²ΠΎΡΠΎΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΅Π»ΠΎΠΌ ΠΈ ΠΌΠΈΡΠΎΠ²ΠΎΠΉ Π‘Π. ΠΠ»Ρ ΠΎΡΠ΅Π½ΠΊΠΈ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΈΠ»ΡΡΡ ΠΠ°Π»ΠΌΠ°Π½Π°. ΠΠ½ ΠΎΡΠ΅Π½ΠΈΠ²Π°Π΅Ρ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠΎΠ±ΠΎΡΠ° Π² ΠΌΠΈΡΠΎΠ²ΠΎΠΉ Π‘Π, ΠΊΡΠΎΠΌΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Z. ΠΡΡΠΎΡΠ° ΡΠΎΠ±ΠΎΡΠ° ΠΎΡΠ΅Π½ΠΈΠ²Π°Π΅ΡΡΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½ΠΎΠ³ Π² ΠΊΠΎΠ½ΡΠ°ΠΊΡΠ΅, ΠΏΠΎΡΡΠΎΠΌΡ, Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ "ΠΈΡΡΠΈΠ½Π½ΠΎΠ³ΠΎ" Π΄Π΅ΡΠ΅Π²Π° TF ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ odom frame ΡΠΌΠ΅ΡΠ°Π΅ΡΡΡ ΠΏΠΎ ΠΎΡΠΈ Z ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ world frame. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ ΡΠΎΠ±Π°ΠΊΠ° ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅ΡΡΡ ΠΏΠΎ Π»Π΅ΡΡΠ½ΠΈΡΠ΅, ΡΠΎ odom frame Π±ΡΠ΄Π΅Ρ ΡΠΌΠ΅ΡΠ°ΡΡΡΡ Π²Π²Π΅ΡΡ
. ΠΠΎ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π·Π½Π°Ρ Π²ΡΡΠΎΡΡ ΡΠ΅Π»Π° ΡΠΎΠ±ΠΎΡΠ° ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠΈΡΠΎΠ²ΠΎΠΉ Π‘Π.
ΠΡΠ΅Π½ΠΊΠ° "Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ Π²ΡΡΠΎΡΡ" ΡΠΎΠ±ΠΎΡΠ° Π±ΡΠ»Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π°. Π’Π΅ΠΏΠ΅ΡΡ ΠΎΡΠ΅Π½ΠΊΠ° ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΠΎ X,Y ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΊΠ°ΠΊ ΡΠ°Π½ΡΡΠ΅, Π° ΠΎΡΠ΅Π½ΠΊΠ° Z ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Π·Π°ΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π½Π° Π΄ΡΡΠ³ΠΎΠΉ. ΠΠΎΠ²ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π²ΡΡΠΎΡΡ ΡΠ΅Π»Π° ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠ»ΠΎΡΠΊΠΎΡΡΠΈ, ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ ΡΠ΅ΡΠ΅Π· 4 ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ ΡΠΎΡΠΊΠΈ ΠΊΠΎΠ½ΡΠ°ΠΊΡΠ° Π½ΠΎΠ³.
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² ΠΏΠ°ΠΏΠΊΠ΅ debug.
ΠΠ»Ρ ΡΠ΄ΠΎΠ±Π½ΠΎΠΉ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΡΠ°Π±ΠΎΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠ² ΠΌΡ ΡΠ΄Π΅Π»Π°Π»ΠΈ ΠΊΠ»Π°ΡΡ Debug. Π Π½Π΅Π³ΠΎ ΠΌΡ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΠΌ Π²ΡΡ ΡΠ΅ΠΊΡΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΡΠ°Π±ΠΎΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΠΌ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΡΠΎΠΏΠΈΠΊΠΈ Π΄Π»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ Π³ΡΠ°ΡΠΈΠΊΠΎΠ² Π² PlotJuggler ΠΈ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π² RViz.
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² ΠΏΠ°ΠΏΠΊΠ΅ fsm. Π’Π°ΠΌ ΠΆΠ΅ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π²ΡΠ΅Ρ
ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ. Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΡΠ²ΠΎΡ ΠΏΠ°ΠΏΠΊΠ°.
ΠΠΎΠ½Π΅ΡΠ½ΡΠΉ Π°Π²ΡΠΎΠΌΠ°Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ, ΡΠ΄Π΅Π»Π°Π½ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°Π·Π½ΡΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΠΎΠ±ΠΎΡΠ° Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ
ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ.
ΠΠΎΡΠΎΡΠΊΠΎ ΠΏΡΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ:
- Passive - ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠΎΠ±ΠΎΡ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ Π½ΠΈΡΠ΅Π³ΠΎ, Ρ ΠΌΠΎΡΠΎΡΠΎΠ² ΠΎΡΠΊΠ»ΡΡΠ΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄.
- StandUp - ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠΎΠ±ΠΎΡ Π²ΡΡΠ°Π΅Ρ ΠΈΠ· Π»Π΅ΠΆΠ°ΡΠ΅Π³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π΄Π»Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΉ ΠΏΠΎΡ ΠΎΠ΄ΠΊΠΈ. Π ΡΡΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠΌΠΏΠ΅Π΄Π°Π½ΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π»Π°ΠΏ. ΠΠ°ΠΏΠΎΠΌΠΈΠ½Π°Π΅ΡΡΡ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅Ρ Π»Π°ΠΏ Π² Π‘Π ΠΏΠ»Π΅Ρ ΠΈ Π·Π°ΡΠ΅ΠΌ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΡΡΠΈΠ΅ΠΉ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΆΠ΅Π»Π°Π΅ΠΌΠ°Ρ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ° Z Π½Π° 25 ΡΠΌ. Π’Π°ΠΊΠ°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π±ΡΠ»Π° ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ, ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π΅ ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΠΎΡΠΎ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π½ΠΎΠ³ΠΈ, ΠΏΠΎ ΡΡΡΠΈ, Π²Π΅Π΄ΡΡ ΡΠ΅Π±Ρ ΠΊΠ°ΠΊ ΠΏΡΡΠΆΠΈΠ½ΠΊΠΈ. ΠΡΠ»Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΊΠΎΠΌΠΏΠ΅Π½ΡΠ°ΡΠΈΡ Π³ΡΠ°Π²ΠΈΡΠ°ΡΠΈΠΈ, Π½ΠΎ ΡΠΈΠ»ΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΡ ΡΡΠΎ Π½Π΅ ΡΠ»ΡΡΡΠΈΠ»ΠΎ.
- BalanceStand - ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠΎΠ±ΠΎΡ ΡΡΠΎΠΈΡ Π½Π° 4 Π½ΠΎΠ³Π°Ρ , Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΌΠ΅Π½ΡΡΡ ΠΎΡΠΈΠ΅Π½ΡΠ°ΡΠΈΡ ΠΈ Π²ΡΡΠΎΡΡ ΡΠ΅Π»Π°.
- Locomotion_baseline - ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΏΠΎΡ ΠΎΠ΄ΠΊΠΈ. ΠΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΎΡΡΠ°Π²ΠΈΠ»ΠΈ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΡΡ ΠΏΠΎΡ ΠΎΠ΄ΠΊΡ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΡΡΠΎΠ±Ρ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡ Π½Π°ΡΡ Π²Π΅ΡΡΠΈΡ Ρ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΉ. ΠΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π»ΠΈΡΡ Π²ΡΠ²ΠΎΠ΄ Π΄Π°Π½Π½ΡΡ Π² debug.
- Locomotion - ΡΠ΅ΡΡΠΎΠ²ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π²Π΅Π΄Π΅ΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠ»Π΅ΠΏΠΎΠΉ ΠΏΠΎΡ ΠΎΠ΄ΠΊΠΈ. ΠΠΎ Π²ΡΠ΅Ρ Π΄Π΅ΠΌΠΊΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΡΡΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅.
- LocomotionCV - ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Ρ ΠΏΠΎΡ ΠΎΠ΄ΠΊΠ°ΠΌΠΈ Π² Π·ΡΡΡΠ΅ΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅.
- LayDown - ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎΠ΅ StandUp, Π½ΠΎ Ρ ΠΎΠ±ΡΠ°ΡΠ½ΡΠΌ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π½ΠΎΠ³, ΡΡΠΎΠ±Ρ Π»Π΅ΡΡ. ΠΠ΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅. ΠΡΡΡΠ΅ ΡΡΠ°Π·Ρ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Passive.
ΠΡΡΡ Π΄Π²Π΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ: GaitScheduler ΠΈ Gait (Π»ΠΈΠ±ΠΎ Π΅Π³ΠΎ ΠΊΠΎΠΏΠΈΡ Π² Gait_Contact) [deprecated]. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΠΊΠΎΠ΄Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π²Π΅ΡΡΠΈΡ Gait.
ΠΠΎΡ
ΠΎΠ΄ΠΊΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΠ°Π±Π»ΠΎΠ½ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΎΠ² Π½Π°Ρ
ΠΎΠΆΠ΄Π΅Π½ΠΈΡ Π½ΠΎΠ³ Π² ΡΠ°Π·Π΅ ΠΏΠΎΠ»Π΅ΡΠ° (swing) ΠΈ ΠΊΠΎΠ½ΡΠ°ΠΊΡΠ° (stance). ΠΡΠ±ΡΡ ΠΏΠΎΡ
ΠΎΠ΄ΠΊΡ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ ΡΠ΅ΡΠ΅Π· Π΄Π²Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΎΠ³ΠΈ: Π΄ΠΎΠ»Ρ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠΈΠΎΠ΄Π° ΠΏΠΎΡ
ΠΎΠ΄ΠΊΠΈ Π΄Π»Ρ ΡΠ°Π·Ρ ΠΊΠΎΠ½ΡΠ°ΠΊΡΠ° (Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π½Π°Ρ
ΠΎΠΆΠ΄Π΅Π½ΠΈΡ Π½ΠΎΠ³ΠΈ Π² ΠΊΠΎΠ½ΡΠ°ΠΊΡΠ΅) ΠΈ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π°ΡΠ°Π»Π° ΡΠ°Π·Ρ ΠΊΠΎΠ½ΡΠ°ΠΊΡΠ° Π²ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. ΠΠ»ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΠ΅ΡΠΈΠΎΠ΄Π° ΠΏΠΎΡ
ΠΎΠ΄ΠΊΠΈ Π·Π°Π΄Π°Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΉ MPC ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ 13 ΠΈΡΠ΅ΡΠ°ΡΠΈΡΡ
ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ MPC (iterations_between_mpc = 13) ΠΈ ΠΏΠ΅ΡΠΈΠΎΠ΄Π΅ ΠΏΠΎΡ
ΠΎΠ΄ΠΊΠ΅ 18 (gait_period = 18) Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠ°Π·Ρ ΠΊΠΎΠ½ΡΠ°ΠΊΡΠ° Π±ΡΠ΄Π΅Ρ ΡΠΎΡΡΠ°Π²Π»ΡΡΡ 0.002 * 13 * 18 / 2 = 0.234 Ρ.
Π¨Π°Π±Π»ΠΎΠ½Ρ ΠΏΠΎΡ
ΠΎΠ΄ΠΊΠΈ Π·Π°Π΄Π°ΡΡΡΡ Π² ΡΠΏΠΈΡΠΊΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠ², Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅ ΠΊΠ»Π°ΡΡΠ° convexMPCLocomotion. Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠΎΡ
ΠΎΠ΄ΠΊΠΈ Π΅ΡΡΡ ΡΠ²ΠΎΠΉ Π½ΠΎΠΌΠ΅Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ 4 - ΡΡΠΎΡΡΡ Π½Π° ΠΌΠ΅ΡΡΠ΅, 9 - ΡΡΠΎΡ (Π½ΠΎΠ³ΠΈ ΠΏΠΎΠΏΠ°ΡΠ½ΠΎ Π² ΠΏΡΠΎΡΠΈΠ²ΠΎΡΠ°Π·Π΅, ΡΡΠ°Π½Π΄Π°ΡΡΠ°Π½Π°Ρ ΠΏΠΎΡ
ΠΎΠ΄ΠΊΠ°). ΠΠΎΠΌΠ΅Ρ Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠΎΡ
ΠΎΠ΄ΠΊΠΈ Π·Π°Π΄Π°Π΅ΡΡΡ ΠΏΡΡΠΌΠΎ Π² ΡΠΈΠΊΠ»Π΅ run MPC ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°.
ΠΠ°Π³Π»ΡΠ΄Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΠ°ΡΡΠ΅ΡΠ½ΠΎΠ² ΠΏΠΎΡ
ΠΎΠ΄ΠΊΠΈ ΠΆΠΈΠ²ΠΎΡΠ½ΡΡ
(https://www.youtube.com/watch?v=PVvZKcKBTtg):
ΠΠ°Π³Π»ΡΠ΄Π½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ°Π·Ρ ΠΏΠΎΡ
ΠΎΠ΄ΠΊΠΈ ΠΎΠ΄Π½ΠΎΠΉ Π½ΠΎΠ³ΠΈ:
ΠΠ»Ρ Π·Π°ΠΏΡΡΠΊΠ° Ρ ΠΈΠΌΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π·ΡΠ΅Π½ΠΈΡ ΠΈ ΠΊΠ°ΡΡΡ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ: elevation_map
ΠΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ Π·Π° ΠΎΡΠ½ΠΎΠ²Ρ Π±ΡΠ»ΠΈ Π²Π·ΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ Ρ ΠΎΡΠΊΡΡΡΡΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ
https://github.com/mit-biomimetics/Cheetah-Software
Artem A.Egorov, Maxim V. Lyahovski, Denis A. Sokolov, Alexey M.Burkov, Sergey A. Kolyubin. Design and performance evaluation of receding horizon controllers for quadrupedal robots: case study on stairs climbing and balancing.HERE