Skip to content

amburkoff/be2r_cmpc_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

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages