Использование Optical Flow
При использовании технологии Optical Flow возможен полет в режиме POSCTL и автономные полеты (режим OFFBOARD) по камере, направленной вниз, за счет измерения сдвигов текстуры поверхности пола.
Включение
Для работы Optical Flow необходим подключенный и настроенный лазерный дальномер.
Включите Optical Flow в файле ~/catkin_ws/src/clover/clover/launch/clover.launch
:
<arg name="optical_flow" default="true"/>
Optical Flow публикует данные в топик /mavros/px4flow/raw/send
. Кроме того, в топик /optical_flow/debug
публикуется визуализация, которую можно просмотреть с помощью web_video_server.
Для правильной работы модуль камеры должен быть корректно подключен и сконфигурирован.
Настройка полетного контроллера
При использовании сборки PX4 для Клевера необходимые параметры PX4 применятся автоматически.
При использовании LPE (параметр SYS_MC_EST_GROUP
= local_position_estimator, attitude_estimator_q
):
LPE_FUSION
– включены флажки fuse optical flow и flow gyro compensation.LPE_FLW_QMIN
– 10.LPE_FLW_SCALE
– 1.0.LPE_FLW_R
– 0.2.LPE_FLW_RR
– 0.0.SENS_FLOW_ROT
– No rotation (отсутствие поворота).SENS_FLOW_MAXHGT
– 4.0 (для дальномера VL53L1X)SENS_FLOW_MINHGT
– 0.0 (для дальномера VL53L1X)- Опционально:
LPE_FUSION
– включен флажок pub agl as lpos down (см. конфигурирование дальномера.
При использовании EKF2 (параметр SYS_MC_EST_GROUP
= ekf2
):
EKF2_AID_MASK
– включен флажок use optical flow.EKF2_OF_DELAY
– 0.EKF2_OF_QMIN
– 10.EKF2_OF_N_MIN
– 0.05.EKF2_OF_N_MAX
- 0.2.SENS_FLOW_ROT
– No rotation (отсутствие поворота).SENS_FLOW_MAXHGT
– 4.0 (для дальномера VL53L1X)SENS_FLOW_MINHGT
– 0.0 (для дальномера VL53L1X)- Опционально:
EKF2_HGT_MODE
– range sensor (см. конфигурирование дальномера).
Для проверки правильности всех настроек можно воспользоваться утилитой selfcheck.py
.
Полет в POSCTL
Настройте POSCTL как один из полетных режимов PX4. Переведите в режим POSCTL.
Автономный полет
Автономный полет возможен с использованием модуля simple_offboard.
Пример взлета на высоту 1.5 м и удержание позиции:
navigate(z=1.5, frame_id='body', auto_arm=True)
Полет вперед на 1 м:
navigate(x=1, frame_id='body')
Полет назад на 1 м (относительно предыдущей целевой точки):
navigate(x=-1, frame_id='navigate_target')
При использовании Optical Flow возможна также навигация по ArUco-маркерам, в том числе используя VPE.
Дополнительные настройки
Если коптер нестабильно удерживает позицию, попробуйте увеличить коэффициенты P PID-регулятора по скорости – параметры MPC_XY_VEL_P
и MPC_Z_VEL_P
.
Если коптер нестабильно удерживает высоту, попробуйте увеличить коэффициент MPC_Z_VEL_P
или лучше подобрать газ висения – MPC_THR_HOVER
.
Если коптер уплывает по рысканью, попробуйте:
- перекалибровать гироскопы;
- перекалибровать магнитометр;
- попробовать разные значения параметра
EKF2_MAG_TYPE
, который определяет, каким образом данные с магнитометра используются в EKF2; - изменять значения параметров
EKF2_MAG_NOISE
,EKF2_GYR_NOISE
,EKF2_GYR_B_NOISE
.
Для более хороших результатов выполняйте перекалибровку гироскопов непосредственно перед взлетом, используя соответствующий сниппет.
Если коптер уплывает по высоте, попробуйте:
- повысить значение коэффициента
MPC_Z_VEL_P
; - изменить значение параметра
MPC_THR_HOVER
; - выставить
MPC_ALT_MODE
= 2 (Terrain following).
При использовании Optical Flow максимальная горизонтальная скорость дополнительно ограничивается. За это косвенно отвечает параметр SENS_FLOW_MAXR
(максимальная достоверная "угловая скорость" оптического потока). При нормальном полёте горизонтальная скорость будет регулироваться так, чтобы показания Optical Flow не превышали 50% значения данного параметра.
Неисправности
При появлении в QGC ошибок типа EKF INTERNAL CHECKS
попробуйте перезагрузить EKF2. Для этого наберите в MAVLink-консоли:
ekf2 stop
ekf2 start