Последние несколько месяцев мы с командой работали над тем, чтобы в полной мере использовать OSDK DJI. Мы используем ROS-оболочку в нашем приложении. Мы работали с ROS Melodi c.
Мы успешно изучили и экспериментировали почти со всеми его аспектами, за исключением одного: командование позиция смещения.
Сначала несколько Настройка - просто чтобы исключить некоторые предложения по этому поводу. Мы запускаем это перед использованием элемента управления topi c:
roslaunch dji_sdk sdk.launch
rosservice call /dji_sdk/set_local_pos_ref
rosservice call /dji_sdk/drone_task_control "task: 4"
rosservice call /dji_sdk/sdk_control_authority "control_enable: 1"
В двух словах, мы запускаем оболочку OSDK ROS, устанавливаем локальную систему отсчета в текущую позицию дрона, отправляем команду взлета и затем предоставьте Бортовому компьютеру контроль.
Вот тогда и начнется проблема. Я могу разбить проблему до этих двух команд, но ни одна из них не работает должным образом:
rostopic pub /dji_sdk/flight_control_setpoint_generic sensor_msgs/Joy '{header: auto, axes: [10.0, 0.0, 3.0, 0.0, 145.0]}' -s -r 5
Или:
rostopic pub /dji_sdk/flight_control_setpoint_generic sensor_msgs/Joy '{header: auto, axes: [10.0, 0.0, 3.0, 0.0, 145.0]}' -s -1
Первая продолжает публиковать топи c в 5 Гц и second публикует его только один раз.
Первый обновляет заданное значение, отталкивая его от дрона и, следовательно, никогда не достигая своей цели. Мы попробовали это, думая, что это будет интерпретировано как заданное значение в локальном кадре, который мы установили, но, похоже, оно будет установлено в кадре, определяемом положением дрона, когда он получает сообщение.
Второй отправляет его один раз , Дрон начинает двигаться к заданному значению, однако примерно через секунду он перестает двигаться. Я полагаю, что существует отказоустойчивая система, позволяющая остановить его движение, если оно не получает обновления.
Я прошу вашей помощи найти правильный способ использования этого элемента управления topi c или, возможно, найти ошибку в нашей интерпретации. Спасибо за помощь!