Использование 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

results matching ""

    No results matching ""