Skip to content

Repo for Unitree A1 robotic dog motion planning and control system based on convex MPC and WBIC algorithms. Case study on stairs climbing based on RGB-D data.

License

Notifications You must be signed in to change notification settings

be2rlab/be2r_mpc-climbing_unitree

Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

be2r cmpc

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΊ Π½Π°ΡƒΡ‡Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅: "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

Usage

Raisim simulator

Запуск Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°. На Π²Ρ‹Π±ΠΎΡ€ (Π² 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

Real Unitree A1

Запуск ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° для управлСния (ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ 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.

ΠšΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ состояний (FSM)

Из ΠΏΠΎΡ…ΠΎΠ΄ΠΊΠΈ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ Π² Passive ΠΌΠΎΠΆΠ½ΠΎ двумя способами:

  1. Из любого состояния Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ. ΠŸΡ€ΠΈΠ²ΠΎΠ΄Ρ‹ сразу пСрСходят Π² Ρ€Π΅ΠΆΠΈΠΌ дСмпфирования ΠΈ Ρ€ΠΎΠ±ΠΎΡ‚ ΠΏΠ»Π°Π²Π½ΠΎ опускаСтся Π½Π° зСмлю.
  2. ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ сначала Π² 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;
Loading

ОписаниС Ρ€Π°Π±ΠΎΡ‚Ρ‹ систСмы управлСния

Π’ Ρ„Π°ΠΉΠ»Π΅ 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) скоростСй.
АрхитСктура систСмы управлСния: image info

MPC

Π‘Π»ΠΈΠΆΠ΅ всСго ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² ΠΊΠΎΠ΄Π΅ этот ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ описан Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ convex_mpc. Π’ Ρ„Π°ΠΉΠ»Π΅ MPC_to_QP ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ расписан ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΎΡ‚ Π·Π°Π΄Π°Ρ‡ΠΈ MPC ΠΊ Π·Π°Π΄Π°Ρ‡ΠΈ QP. Π­Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ привСсти Π·Π°Π΄Π°Ρ‡Ρƒ ΠΊ Π²ΠΈΠ΄Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚ солвСр.
ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Π°Ρ рСализация ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° находится Π² ΠΏΠ°ΠΏΠΊΠ΅ convexMPC. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ мСняли Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ части ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°, сдСлали копию этой ΠΏΠ°ΠΏΠΊΠΈ ΠΈ Π½Π°Π·Π²Π°Π»ΠΈ CMPC.
МодСль Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠΈ Ρ€ΠΎΠ±ΠΎΡ‚Π° сводится ΠΊ ΠΌΠΎΠ΄Π΅Π»ΠΈ Ρ‚Π²Π΅Ρ€Π΄ΠΎΠ³ΠΎ Ρ‚Π΅Π»Π° (ΠΊΠΈΡ€ΠΏΠΈΡ‡Π°/ΠΊΠ°Ρ€Ρ‚ΠΎΡˆΠΊΠΈ), Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠΎΠΉ Π½ΠΎΠ³ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΡ€Π΅Π½Π΅Π±Ρ€Π΅Π³Π°Π΅ΠΌ, Ρ‚ΠΊ ΠΈΡ… масса сущСствСнно Π½ΠΈΠΆΠ΅ массы Ρ‚Π΅Π»Π°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ считаСм, Ρ‡Ρ‚ΠΎ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π½ΠΎΠ³ Π² Π²ΠΎΠ·Π΄ΡƒΡ…Π΅ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ влияСт Π½Π° Ρ‚Π΅Π»ΠΎ. БостояниС Ρ‚Π΅Π»Π° измСняСтся Π·Π° счСт сил с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π½ΠΎΠ³ΠΈ Π² ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π΅ давят Π½Π° ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ Π·Π΅ΠΌΠ»ΠΈ. Π˜Ρ‚ΠΎΠ³ΠΎΠ²ΡƒΡŽ модСль Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠΈ ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ привСсти ΠΊ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΌΡƒ Π²ΠΈΠ΄Ρƒ Π½ΠΈΠΆΠ΅.

$$\begin{equation*} \frac{d}{dt}\begin{bmatrix} \hat{\Theta}\\ \hat{p} \\ \hat{\omega} \\ \hat{\dot{p}} \end{bmatrix} = \begin{bmatrix} 0_3 & 0_3 &R(\psi) &0_3 \\\ 0_3 & 0_3 &0_3 &1_3 \\\ 0_3 & 0_3 &0_3 &0_3 \\\ 0_3 & 0_3 &0_3 &0_3 \end{bmatrix} \begin{bmatrix} \hat{\Theta}\\ \hat{p} \\ \hat{\omega} \\ \hat{\dot{p}} \end{bmatrix} + \begin{bmatrix} 0_3 & \dots &0_3 \\\ 0_3 & \dots &0_3 \\\ \hat{I}^{-1}[r_1] &\dots &\hat{I}^{-1}[r_n] \\\ 1_3/m & \dots &1_3/m \end{bmatrix} \begin{bmatrix} f_1\\ \vdots\\ f_n \end{bmatrix} + \begin{bmatrix} 0\\ 0\\ 0\\ g \end{bmatrix} \end{equation*}$$

Π’ ΠΊΠΎΠ΄Π΅ Π΅ΡΡ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ: sparse ΠΈ dense, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π±ΠΎΡ€ ΠΈΠ· 3 солвСров. Π’ исходном Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ€Π°Π±ΠΎΡ‚Π°Π» Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ dense + qpOASES, поэтому ΠΌΡ‹ Ρ‚ΠΎΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π΅Π³ΠΎ. ВсС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ нСсколько Ρ€Π°Π· запускали, Π½ΠΎ Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ ΠΈΠ·ΡƒΡ‡Π°Π»ΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π° Π³Π»Π°Π· ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ€ΠΎΠ±ΠΎΡ‚Π° Π½ΠΈΡ‡Π΅ΠΌ Π½Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π°Π»ΠΎΡΡŒ.
MPC Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с частотой ~30 Π“Ρ†. Π’Π°ΠΊ ΠΊΠ°ΠΊ это мСньшС частоты Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° (500 Π“Ρ†) ΠΈ вСсь ΠΊΠΎΠ΄ выполняСтся ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π²Ρ‹Π·ΠΎΠ² ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° MPC осущСствляСтся ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· Π² Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ количСство Ρ†ΠΈΠΊΠ»ΠΎΠ² ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° (пСрСмСнная iterations_between_mpc).
Π£ Π΄Π°Π½Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° Π΅ΡΡ‚ΡŒ ряд ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΉ ΠΎΡ‚ описания Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅:

  1. Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ сказано, Ρ‡Ρ‚ΠΎ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° систСмы Π’Ρ…ΠΎΠ΄-БостояниС-Π’Ρ‹Ρ…ΠΎΠ΄ Π²Ρ‹ΡˆΠ΅ строится Π½Π° основС срСднСго ΡƒΠ³Π»Π° yaw ΠΈΠ»ΠΈ $\psi$ ΠΏΠΎ всСму Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Ρƒ ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠΉ Ρ‚Ρ€Π°Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ Ρ‚Π΅Π»Π°. Π’ ΠΊΠΎΠ΄Π΅ просто бСрСтся Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΡƒΠ³ΠΎΠ» yaw.
  2. Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° Π²Ρ…ΠΎΠ΄Π° систСмы Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° считаСтся для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ шага Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°. ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° состоит ΠΈΠ· радиус-Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ†Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠΌ Ρ‚Π΅Π»Π° ΠΈ ΠΊΠΎΠ½Ρ†Π°ΠΌΠΈ Π½ΠΎΠ³, Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ Π² зависимости ΠΎΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΏΠΎΡ…ΠΎΠ΄ΠΊΠΈ Π½Π° вСсь Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚. Π’ ΠΊΠΎΠ΄Π΅ эта ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° считаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· Π½Π° основС Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ состояния ΠΈ дальшС Π½Π° Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚ Π½Π΅ мСняСтся Π½ΠΈ Π½ΠΎΠ³ΠΈ (силы), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ находятся Π² ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π΅, Π½ΠΈ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π° радиус-Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ².

Π£ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΉ эффСкт - ΠΏΡ€ΠΈ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΈ Π΅ΡΡ‚ΡŒ ΠΎΠΊΠΎΠ»ΠΎ линСйная Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ Π½Π°ΠΊΠ»ΠΎΠ½Π° корпуса ΠΎΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ скорости. Для Π΅Π΅ компСнсации Π²Π²Π΅Π΄Π΅Π½Π° простая эвристика, которая мСняСт ΠΆΠ΅Π»Π°Π΅ΠΌΡ‹ΠΉ ΡƒΠ³ΠΎΠ» Π½Π°ΠΊΠ»ΠΎΠ½Π° Ρ‚Π΅Π»Π° Π² зависимости ΠΎΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ скорости двиТСния.

  • Pitch:
$$\theta = k_{u,x} \cdot \dot{x}_{act} + k_{ox} + \alpha^*_x$$
  • Roll:
$$\phi = k_{u,y} \cdot \dot{y}_{act} + k_{oy} + \alpha^*_y$$

Π³Π΄Π΅ послСднСС слагаСмоС выраТаСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

$$\begin{equation*} \alpha^*_{x,y}=-arccos\left(\frac{n_{x,y} }{\sqrt{n_x^2 + n_y^2 + n_z^2}}\right)+\frac{\pi}{2} \end{equation*}$$

Эвристика содСрТит ΠΊΠΎΡ€Ρ€ΠΊΡƒΡ‚ΠΈΡ€ΠΎΠ²ΠΊΡƒ плоскости ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π° ΠΈ Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°: ΡƒΠ³ΠΎΠ» Π½Π°ΠΊΠ»ΠΎΠ½Π° зависимости $k_{u,x}$ ΠΈ смСщСниС $k_{ox}$. ΠšΠΎΡΡ„Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ сСриСй экспСримСнтов. Эвристика находится Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ run ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° CMPC, присвоСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ _pitch_cmd.
НаглядноС прСдставлСниС ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ сил Ρ€Π΅Π°ΠΊΡ†ΠΈΠΉ: image info Но Π² нашСй вСрсии БК Ρ‚Π΅Π»Π° ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚Π° Π²ΠΎΠΊΡ€ΡƒΠ³ оси Z Π½Π° 90 градусов ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚ΠΎΠΉ, Ρ‡Ρ‚ΠΎ Π½Π° рисункС. Π’ΠΎ Π΅ΡΡ‚ΡŒ, ось X смотрит Π²ΠΏΠ΅Ρ€Π΅Π΄, ось Y - Π²Π»Π΅Π²ΠΎ, Z Ρ‚Π°ΠΊ ΠΆΠ΅ Π²Π²Π΅Ρ€Ρ….

WBC

РСализация Ρ€Π΅ΠΆΠΈΡ‚ Π² ΠΏΠ°ΠΏΠΊΠ°Ρ… WBC ΠΈ WBC_Ctrl. Мало Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡ€ΠΎ этот ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ дошли Π΄ΠΎ Π΅Π³ΠΎ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ изучСния. ΠžΠ±Ρ‰ΠΈΠ΅ Ρ„Π°ΠΊΡ‚Ρ‹ - Ρ€Π°Π±ΠΎΡ‚Π° Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° (с частотой 500 Π“Ρ† ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ), Π±Π΅Ρ€Π΅Ρ‚ Π½Π° Π²Ρ…ΠΎΠ΄ рассчитанныС "Ρ‡Π΅Ρ€Π½ΠΎΠ²Ρ‹Π΅" силы ΠΈΠ· MPC, рассчитываСт ΠΆΠ΅Π»Π°Π΅ΠΌΡ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ Π² ΠΏΡ€ΠΈΠ²ΠΎΠ΄Π°Ρ… Π½Π° основС ΠΏΠΎΠ»Π½ΠΎΠΉ Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠΈ Ρ€ΠΎΠ±ΠΎΡ‚Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ. Π’ ΡΡ‚Π°Ρ‚ΡŒΡΡ… Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ вСрсии: WBC ΠΈ WBIC (Whole Body Controller, Whole Body Impulse Controller). Π’ ΠΊΠΎΠ΄Π΅, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ WBIC, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ рСализация ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° Π»Π΅ΠΆΠΈΡ‚ Π² Ρ„Π°ΠΉΠ»Π°Ρ… WBIC. ЀактичСски, WBC_Ctrl являСтся интСрфСйсом ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° WBIC ΠΈ ΠΌΡ‹ наблюдаСм ΠΎΠΏΠΈΡΠ°Π½Π½ΡƒΡŽ Π²Ρ‹ΡˆΠ΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ сил ΠΈΠ· МРБ ΠΈ вычислСниС ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ.
WBIC Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ с частотой 500 Π“Ρ†.
НаглядноС прСдставлСниС ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ Π΄Π²ΡƒΡ… Π½ΠΎΠΊΡ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ²: image info

Leg swing trajectory generator

РСализация находится Π² Ρ„Π°ΠΉΠ»Π΅ FootSwingTrajectory
ВраСктория Ρ„Π°Π·Ρ‹ ΠΏΠΎΠ»Π΅Ρ‚Π° Π½ΠΎΠ³ прСдставляСт собой составной сплайн Π‘Π΅Π·ΡŒΠ΅. Π—Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ X ΠΈ Y ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ - линСйная, Π° Z строится ΠΏΠΎ 3 Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌ Π½Π° основС Π΄Π²ΡƒΡ… ΠΊΡ€ΠΈΠ²Ρ‹Ρ… Π‘Π΅Π·ΡŒΠ΅. ΠŸΠ΅Ρ€Π²Π°Ρ ΠΈ вторая Ρ‚ΠΎΡ‡ΠΊΠΈ - ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° Z Π½Π°Ρ‡Π°Π»Π° ΠΈ ΠΊΠΎΠ½Ρ†Π° Ρ‚Ρ€Π°Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ, Ρ‚Ρ€Π΅Ρ‚ΡŒΡ - ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° Z Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ + высота шага. Π’Ρ€Π΅Ρ‚ΡŒΡ Ρ‚ΠΎΡ‡ΠΊΠ° находится ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠΉ, ΠΈ являСтся Π²Π΅Ρ€ΡˆΠΈΠ½ΠΎΠΉ Ρ‚Ρ€Π°Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ двиТСния Π½ΠΎΠ³ΠΈ. ВраСктория строится Π² ΠΌΠΈΡ€ΠΎΠ²ΠΎΠΉ БК ΠΈ Π² качСствС базисной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ„Π°Π·Π° пСрСноса Π½ΠΎΠ³.

Вторая Ρ‚ΠΎΡ‡ΠΊΠ° ΠΈΠ»ΠΈ Ρ‚ΠΎΡ‡ΠΊΠ°, ΠΊΡƒΠ΄Π° наступит Π½ΠΎΠ³Π°, вычисляСтся ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ эвристикС:

$$\begin{equation*} p_{step,i}=\left[p_{h,i}+R_z\left(\phi_k\right)l_i\right]+ \left[ \frac{T_{stance}}{2} \dot{p}_c+k\left(\dot{p}_c -\dot{p}_{c,d}\right)\right]+ \left[\frac{1}{2}\sqrt{\frac{z_0}{9.81}}{\dot{p}}_c\times \omega_d\right] \end{equation*}$$

Π“Π΄Π΅ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ $[\dots]$ ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ Π·Π° смСщСниС ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ†Π΅Π½Ρ‚Ρ€Π° Ρ‚Π΅Π»Π° ΠΊ ΠΏΠ»Π΅Ρ‡Ρƒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π½ΠΎΠ³ΠΈ, Π²Ρ‚ΠΎΡ€Ρ‹Π΅ $[\dots]$ скобки ΡΠ²Π»ΡΡŽΡ‚ΡΡ эвристикой Π Π°ΠΈΠ±Π΅Ρ€Ρ‚Π° с Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎ скорости ($k=0.3$), Π° послСдниС $[\dots]$ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ Ρ‚ΠΎΡ‡ΠΊΠΈ останова ΠΈΠ»ΠΈ Capture point (Π°Π½Π°Π»ΠΎΠ³ (ZMP) Zero Moment Point ΠΈΠ»ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°).

Leg Controller

РСализация находится Π² Ρ„Π°ΠΉΠ»Π΅ LegController
Класс, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ хранится Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ ΠΈ ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ΅ состояниС Π½ΠΎΠ³, ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ управлСния, расчСт ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π―ΠΊΠΎΠ±ΠΈ. НумСрация ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΎΠ² Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΎΠ³ΠΈ начинаСтся ΠΎΡ‚ ΠΏΠ»Π΅Ρ‡Π°. НумСрация Π½ΠΎΠ³ ΠΈ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΎΠ²:

  • 0 - пСрСдняя правая, ΠΏΡ€ΠΈΠ²ΠΎΠ΄Ρ‹ 0, 1, 2
  • 1 - пСрСдняя лСвая, ΠΏΡ€ΠΈΠ²ΠΎΠ΄Ρ‹ 3, 4, 5
  • 2 - задняя правая, ΠΏΡ€ΠΈΠ²ΠΎΠ΄Ρ‹ 6, 7, 8
  • 3 - задняя лСвая, ΠΏΡ€ΠΈΠ²ΠΎΠ΄Ρ‹ 9, 10, 11

Body Manager

РСализация находится Π² Ρ„Π°ΠΉΠ»Π΅ be2r_cmpc_unitree
Π‘Π°ΠΌΡ‹ΠΉ высокоуровнСвый класс, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ всС экзСмпляры Π΄Ρ€ΡƒΠ³ΠΈΡ… классов, ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ Π² конструкторы ΠΈ вызываСтся основной ΠΌΠ΅Ρ‚ΠΎΠ΄ run Ρƒ FSM. Π’ этом классС Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ROS интСрфСйс взаимодСйствия с симулятором, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ основныС колбэки. Π’ этом классС рассчитываСтся ΠΈΡ‚ΠΎΠ³ΠΎΠ²Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, отправляСмый Ρ€ΠΎΠ±ΠΎΡ‚Ρƒ. ΠœΠΎΠΌΠ΅Π½Ρ‚ для управлСния ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΎΠΌ рассчитываСтся ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅:

$$\tau = K_{p_j}(q_{des}-q_{act}) + K_{d_j}(\dot{q}_{des}-\dot{q}_{act}) + \tau_{ff_{cmd}}$$ $$\tau_{ff_{cmd}} = J^TF_{foot}$$ $$F_{foot} = K_{p_{cart}}(p_{des}-p_{act}) + K_{d_{cart}}(\dot{p}_{des}-\dot{p}_{act}) + F_{ff}$$
  • $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, ΠΏΡ€ΠΈ поднятии ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ, коэффициСнты ΠŸΠ” рСгулятора ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΎΠ² ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ Π½Π° Π½ΠΈΠΆΠ½ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ, Π° Π² ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠΉ Π΄Π»ΠΈΠ½Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π·Π°Π½ΡƒΠ»ΡΡŽΡ‚ΡΡ.
АрхитСктура запуска с симулятором: image info
АрхитСктура запуска с Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ Ρ€ΠΎΠ±ΠΎΡ‚ΠΎΠΌ:
image info

БообщСния

Π£ 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.

Odometry (Position and Orientation estimators)

РСализация находится Π² Ρ„Π°ΠΉΠ»Π΅ PositionVelocityEstimator ΠΈ OrientationEstimator
ΠžΡ†Π΅Π½ΠΊΠ° ΠΎΡ€ΠΈΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Ρ‚Π΅Π»Π° бСрСтся Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈΠ· IMU. OrientatonEstimator рассчитываСт ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π΅Π»ΠΎΠΌ ΠΈ ΠΌΠΈΡ€ΠΎΠ²ΠΎΠΉ БК. Для ΠΎΡ†Π΅Π½ΠΊΠΈ полоТСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ Калмана. Он ΠΎΡ†Π΅Π½ΠΈΠ²Π°Π΅Ρ‚ полоТСния Ρ€ΠΎΠ±ΠΎΡ‚Π° Π² ΠΌΠΈΡ€ΠΎΠ²ΠΎΠΉ БК, ΠΊΡ€ΠΎΠΌΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Z. Высота Ρ€ΠΎΠ±ΠΎΡ‚Π° оцСниваСтся ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΠΎΠ³ Π² ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π΅, поэтому, с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния "истинного" Π΄Π΅Ρ€Π΅Π²Π° TF ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ odom frame смСщаСтся ΠΏΠΎ оси Z ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ world frame. НапримСр, Ссли собака поднимаСтся ΠΏΠΎ лСстницС, Ρ‚ΠΎ odom frame Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ Π²Π²Π΅Ρ€Ρ…. Но Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ зная высоту Ρ‚Π΅Π»Π° Ρ€ΠΎΠ±ΠΎΡ‚Π° ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠΈΡ€ΠΎΠ²ΠΎΠΉ БК.
ΠžΡ†Π΅Π½ΠΊΠ° "локальной высоты" Ρ€ΠΎΠ±ΠΎΡ‚Π° Π±Ρ‹Π»Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π°. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΡ†Π΅Π½ΠΊΠ° полоТСния ΠΏΠΎ X,Y Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ Ρ€Π°Π½ΡŒΡˆΠ΅, Π° ΠΎΡ†Π΅Π½ΠΊΠ° Z ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° замСняСтся Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ. Новый Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ опрСдСляСт высоту Ρ‚Π΅Π»Π° ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ плоскости, ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Ρ‡Π΅Ρ€Π΅Π· 4 послСдниС Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π° Π½ΠΎΠ³.

Debug

РСализация находится Π² ΠΏΠ°ΠΏΠΊΠ΅ debug.
Для ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΉ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ² ΠΌΡ‹ сдСлали класс Debug. Π’ Π½Π΅Π³ΠΎ ΠΌΡ‹ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌ всю Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ состоянии Ρ€Π°Π±ΠΎΡ‚Ρ‹ систСмы ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ‚ΠΎΠΏΠΈΠΊΠΈ для построСния Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ² Π² PlotJuggler ΠΈ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² RViz.

Finite State Machine (FSM)

РСализация находится Π² ΠΏΠ°ΠΏΠΊΠ΅ fsm. Π’Π°ΠΌ ΠΆΠ΅ находится описаниС всСх состояний. Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ состояния своя ΠΏΠ°ΠΏΠΊΠ°.
ΠšΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ состояний, сдСлан для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ повСдСния Ρ€ΠΎΠ±ΠΎΡ‚Π° для Ρ€Π°Π·Π½Ρ‹Ρ… сцСнариСв использования.
ΠšΠΎΡ€ΠΎΡ‚ΠΊΠΎ ΠΏΡ€ΠΎ основныС состояния:

  • Passive - состояниС, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€ΠΎΠ±ΠΎΡ‚ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ, Ρƒ ΠΌΠΎΡ‚ΠΎΡ€ΠΎΠ² ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ исполнСния ΠΊΠΎΠΌΠ°Π½Π΄.
  • StandUp - состояниС, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€ΠΎΠ±ΠΎΡ‚ встаСт ΠΈΠ· Π»Π΅ΠΆΠ°Ρ‡Π΅Π³ΠΎ состояния для дальнСйшСй ΠΏΠΎΡ…ΠΎΠ΄ΠΊΠΈ. Π’ этом состоянии Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ импСдансный ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π»Π°ΠΏ. ЗапоминаСтся ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ всСх Π»Π°ΠΏ Π² БК ΠΏΠ»Π΅Ρ‡ ΠΈ Π·Π°Ρ‚Π΅ΠΌ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ интСрполяциСй измСняСтся ТСлаСмая ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° Z Π½Π° 25 см. Вакая рСализация Π±Ρ‹Π»Π° ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½ΠΎΠ³ΠΈ, ΠΏΠΎ сути, Π²Π΅Π΄ΡƒΡ‚ сСбя ΠΊΠ°ΠΊ ΠΏΡ€ΡƒΠΆΠΈΠ½ΠΊΠΈ. Π‘Ρ‹Π»Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° компСнсация Π³Ρ€Π°Π²ΠΈΡ‚Π°Ρ†ΠΈΠΈ, Π½ΠΎ сильно Ρ€Π°Π±ΠΎΡ‚Ρƒ это Π½Π΅ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΠ»ΠΎ.
  • BalanceStand - состояниС, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€ΠΎΠ±ΠΎΡ‚ стоит Π½Π° 4 Π½ΠΎΠ³Π°Ρ…, Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΎΡ€ΠΈΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΈ высоту Ρ‚Π΅Π»Π°.
  • Locomotion_baseline - ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ состояниС ΠΏΠΎΡ…ΠΎΠ΄ΠΊΠΈ. ΠœΡ‹ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ оставили ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΡ…ΠΎΠ΄ΠΊΡƒ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ Π½Π°ΡˆΡƒ Π²Π΅Ρ€ΡΠΈΡŽ с исходной. Π”ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ лишь Π²Ρ‹Π²ΠΎΠ΄ Π΄Π°Π½Π½Ρ‹Ρ… Π² debug.
  • Locomotion - тСстовоС состояниС, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ вСдСтся Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° слСпой ΠΏΠΎΡ…ΠΎΠ΄ΠΊΠΈ. Π’ΠΎ всСх Π΄Π΅ΠΌΠΊΠ°Ρ… использовали это состояниС.
  • LocomotionCV - состояниС с ΠΏΠΎΡ…ΠΎΠ΄ΠΊΠ°ΠΌΠΈ Π² зрячСм Ρ€Π΅ΠΆΠΈΠΌΠ΅.
  • LayDown - состояниС Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠ΅ StandUp, Π½ΠΎ с ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΌ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π½ΠΎΠ³, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π»Π΅Ρ‡ΡŒ. НС рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ это состояниС. Π›ΡƒΡ‡ΡˆΠ΅ сразу ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² состояниС Passive.

Gait scheduler

Π•ΡΡ‚ΡŒ Π΄Π²Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ: 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):
image info
НаглядноС прСдставлСниС Ρ„Π°Π·Ρ‹ ΠΏΠΎΡ…ΠΎΠ΄ΠΊΠΈ ΠΎΠ΄Π½ΠΎΠΉ Π½ΠΎΠ³ΠΈ:
image info

CV walking

Для запуска с импользованиСм зрСния ΠΈ ΠΊΠ°Ρ€Ρ‚Ρ‹ проходимости Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ: elevation_map

ΠŸΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π·Π° основу Π±Ρ‹Π»ΠΈ взяты Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ

https://github.com/mit-biomimetics/Cheetah-Software

Article

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

About

Repo for Unitree A1 robotic dog motion planning and control system based on convex MPC and WBIC algorithms. Case study on stairs climbing based on RGB-D data.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 98.1%
  • Other 1.9%