Привет,
Я делаю управление на основе зрения, а камера на дроне смотрит вниз.
Таким образом, оценка положения находится в кадре тела.
Я обнаружил, что тему / mavros / setpoint_velocity / cmd_vel можно использовать для изменения скорости дрона, но, похоже, это в кадре NED.
Есть ли такая тема, как / mavros / setpoint_velocity / cmd_vel, но использовать рамку тела?
Или мне нужно преобразовать мою уставку скорости из корпуса в кадр NED, чтобы реализовать это?
Я попытался найти что-то, что можно было бы использовать, и нашел этот код. https://github.com/weiweikong/px4_velocity_control_keyboard/blob/master/src/px4_velocity_control_node.cpp
vs_body_axis.twist.linear.x = vs.twist.linear.x * cos(uavYawENU) + vs.twist.linear.y * sin(uavYawENU);
vs_body_axis.twist.linear.y = vs.twist.linear.x * sin(uavYawENU) - vs.twist.linear.y * cos(uavYawENU);
Кажется, это лучшее решение, которое я смог найти.
Я не уверен, происходит ли рыскание только от IMU или от слияния IMU и магнитного поля.
Есть ли у вас какие-нибудь комментарии или идеи по этому поводу?
Маврос: 0,17,3
ROS: индиго
Ubuntu: 14.04
APM: коптер V3.4-dev (fe724032)
bshang2 @ mechatronics-990 : ~ / Simulation / ardupilot / ArduCopter $ roslaunch ardupilot_sitl_gazebo_plugin erlecopter_mark.launch
... вход в /home/bshang2/.ros/log/ca9213bc-89bf-11e7-b657-1803733b65bb/roslaunch-mechatronics-990-28079.log
Проверка каталога журнала на предмет использования диска. Это может занять некоторое время.
Нажмите Ctrl-C, чтобы прервать
Завершена проверка использования диска для файла журнала. Использование <1 ГБ.
запущен сервер roslaunch http: // mechatronics
ЯСНЫЕ ПАРАМЕТРЫ
ПАРАМЕТРЫ
УЗЛЫ
/
беседка (gazebo_ros / gzserver)
gazebo_gui (gazebo_ros / gzclient)
mavros (mavros / mavros_node)
spawn_erlecopter (gazebo_ros / spawn_model)
автоматический запуск нового мастера
процесс [master]: запущен с pid [28094]
ROS_MASTER_URI = http: // локальный : 11311
установка / run_id на ca9213bc-89bf-11e7-b657-1803733b65bb
процесс [rosout-1]: запущен с pid [28107]
запущена основная служба [/ rosout]
процесс [mavros-2]: запущен с pid [28126]
процесс [spawn_erlecopter-3]: запущен с pid [28133]
процесс [gazebo-4]: запущен с pid [28134]
процесс [gazebo_gui-5]: запущен с pid [28151]
запущен скрипт spawn_model
[gazebo-4] процесс умер [pid 28134, код выхода 255, cmd / home / bshang2 / simulation / ros_catkin_ws / src / gazebo_ros_pkgs / gazebo_ros / scripts / gzserver -u -e ode / home / bshang2 / Simulation / ros_catrkin_ws / /ardupilot_sitl_gazebo_plugin/ardupilot_sitl_gazebo_plugin/worlds/mark_world/mark.world __name: = gazebo __log: = / home / bshang2 / .ros / log / ca9213bc-89bf-11e7-b657-180log4.
файл журнала: /home/bshang2/.ros/log/ca9213bc-89bf-11e7-b657-1803733b65bb/gazebo-4 .log[INFO] [WallTime: 1503684250.172508] [0.000000] Загрузка модели xml из параметра ros[INFO] [WallTime: 1503684250.176886] [0.000000] Ожидание обслуживания / беседка / spawn_urdf_model[gazebo_gui-5] процесс умер [pid 28151, код выхода 255, cmd / home / bshang2 / Simulation / ros_catkin_ws / src / gazebo_ros_pkgs / gazebo_ros / scripts / gzclient __name: = gazebo_gui __log: = / home / bshang2 / log / ca9213bc-89bf-11e7-b657-1803733b65bb / gazebo_gui-5.log].файл журнала: /home/bshang2/.ros/log/ca9213bc-89bf-11e7-b657-1803733b65bb/gazebo_gui-5 .log
^ C [spawn_erlecopter-3] убийство при выходе
[mavros-2] убийство на выходе
Отслеживание (последний вызов последний):
Файл "/ home / bshang2 / Simulation / ros_catkin_ws / src / gazebo_ros_pkgs / gazebo_ros / scripts / spawn_model", строка 301, в
sm.callSpawnService ()
Файл "/ home / bshang2 / Simulation / ros_catkin_ws / src / gazebo_ros_pkgs / gazebo_ros / scripts / spawn_model", строка 267, в callSpawnService
начальная_позиция, self.reference_frame, self.gazebo_namespace)
Файл "/home/bshang2/simulation/ros_catkin_ws/src/gazebo_ros_pkgs/gazebo_ros/src/gazebo_ros/gazebo_interface.py", строка 28, в spawn_urdf_model_client
rospy.wait_for_service (gazebo_namespace + '/ spawn_urdf_model')
Файл "/opt/ros/indigo/lib/python2.7/dist-packages/rospy/impl/tcpros_service.py", строка 159, в wait_for_service
поднять ROSInterruptException ("быстрое завершение работы")
rospy.exceptions.ROSInterruptException: отключение rospy
^ C [rosout-1] убийство при выходе
^ C [хозяин] убивает при выходе
выключение монитора обработки ...
... завершение работы монитора обработки
Выполнено
bshang2 @ mechatronics-990 : ~ / Simulation / ardupilot / ArduCopter $ roslaunch ardupilot_sitl_gazebo_plugin erlecopter_mark.launch
... вход в /home/bshang2/.ros/log/e483c856-89bf-11e7-bb61-1803733b65bb/roslaunch-mechatronics-990-28603.log
Проверка каталога журнала на предмет использования диска. Это может занять некоторое время.
Нажмите Ctrl-C, чтобы прервать
Завершена проверка использования диска для файла журнала. Использование <1 ГБ.
запущен сервер roslaunch http: // mechatronics
ЯСНЫЕ ПАРАМЕТРЫ
ПАРАМЕТРЫ
УЗЛЫ
/
беседка (gazebo_ros / gzserver)
gazebo_gui (gazebo_ros / gzclient)
mavros (mavros / mavros_node)
spawn_erlecopter (gazebo_ros / spawn_model)
автоматический запуск нового мастера
процесс [master]: запущен с pid [28618]
ROS_MASTER_URI = http: // локальный : 11311
установка / run_id на e483c856-89bf-11e7-bb61-1803733b65bb
процесс [rosout-1]: запущен с pid [28631]
запущена основная служба [/ rosout]
процесс [mavros-2]: запущен с pid [28656]
процесс [spawn_erlecopter-3]: запущен с pid [28657]
процесс [gazebo-4]: запущен с pid [28674]
процесс [gazebo_gui-5]: запущен с pid [28678]
запущен скрипт spawn_model
[INFO] [WallTime: 1503684293.653120] [0.000000] Загрузка модели xml из параметра ros
[INFO] [WallTime: 1503684293.657344] [0.000000] Ожидание обслуживания / беседка / spawn_urdf_model
[ИНФОРМАЦИЯ] [WallTime: 1503684294.260952] [0.047500] Служба звонков / беседка / spawn_urdf_model
[INFO] [WallTime: 1503684294.855628] [0.445000] Статус создания: SpawnModel: Успешно созданная модель
[spawn_erlecopter-3] процесс успешно завершен
файл журнала: /home/bshang2/.ros/log/e483c856-89bf-11e7-bb61-1803733b65bb/spawn_erlecopter-3*.log
bshang2 @ mechatronics-990 : ~ / имитация / ardupilot / ArduCopter $ rostopic echo -n1 / диагностика
заголовок:
seq: 6456
печать:
секунд: 6817
нсек: 500000000
frame_id: ''
статус:
bshang2 @ mechatronics-990 : ~ / имитация / ardupilot / ArduCopter $ rosrun mavros checkid
ОК. Получал сообщения от 1: 1.
Получено 1231 сообщение с 1 адреса
sys: составить список сообщений
1: 1 0, 1, 2, 136, 152, 150, 24, 27, 29, 30, 32, 33, 162, 163, 164, 165, 42, 173, 178, 62, 193, 74, 35, 36 , 241, 116
Привет,
Вы можете использовать setpoint_raw.
http://wiki.ros.org/mavros#mavros.2BAC8 -Plugins.setpoint_raw
На целевой уставке вы можете изменить рамку координат.
http://docs.ros.org/api/mavros_msgs/html/msg/PositionTarget.html
Для setpoint_velocity
я добавлю исправление, которое позволит выбирать между LOCAL_NED
и BODY_NED
, поскольку в настоящее время по умолчанию используется LOCAL_NED
(https: / /github.com/mavlink/mavros/blob/master/mavros/src/plugins/setpoint_velocity.cpp#L81). А пока вы можете использовать setpoint_raw
и установить coordinate_frame
на FRAME_BODY_NED
или MAV_FRAME::BODY_NED
(оба должны работать).
Спасибо @AlexisTM и @ TSC21. Ваш ответ полезен. Я попробую позже.
@ TSC21 @AlexisTM Спасибо за вашу помощь! Теперь я могу контролировать скорость в кадре тела. Видео записывается: https://www.youtube.com/watch?v=dyUQfFYX3pk&feature=youtu.be
rostopic pub /mavros/setpoint_raw/local mavros_msgs/PositionTarget '{header: {stamp: now, frame_id: "world"}, coordinate_frame: 8, type_mask: 3527, velocity: {x: 0.1, y: 0, z: 0}}' -r 10
@cnpcshangbo полезно знать
привет @cnpcshangbo , спасибо за видео.
Я публикую это, чтобы помочь другим разрешить возникшую у меня путаницу.
Несмотря на то, что маска кадра FRAME_BODY_NED = 8
, команда ROS все равно должна быть в ENU . Преобразование ENU -> NED выполняется mavros.
Фактически, из видео, поведение таково:
Привет Хоанг,
Благодарим Вас за разъяснения.
Сожалею, что это заняло у вас так много времени.
Ваши усилия помогают другим.
Спасибо
Бо
Хоанг Минь Чунг [email protected]于 2018 8 17 日 周五 上午 11:09 写道 :
привет @cnpcshangbo https://github.com/cnpcshangbo , спасибо за видео.
Я публикую это, чтобы помочь другим разрешить возникшую у меня путаницу.
Несмотря на то, что маска кадра "FRAME_BODY_NED = 8", команда ROSеще должен быть в ЕНУ . Преобразование ENU -> NED будет выполнено
mavros.
Фактически, из видео, поведение таково:
- x = 0.1 ---> вправо
- y = 0.1 ---> Вперед
Очевидно, это все еще в ЕНУ. Однако эта путаница стоила мне недели
тянуть за волосы ...-
Вы получаете это, потому что вас упомянули.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/mavlink/mavros/issues/792#issuecomment-413745084 или отключить звук
нить
https://github.com/notifications/unsubscribe-auth/AEm3NdefOViosyJKxQlf2h0ZweC8lO6uks5uRjP9gaJpZM4PDCb2
.
Разве это не должно быть x вперед и y слева для BODY и x на восток, y на север во фрейме карты @Nuno?
Итак, я прав, что на самом деле у нас есть 3 соглашения:
1) NED: бортовая оценка и контроль PX4
2) ENU: стандартный формат ввода для командных сообщений mavros
3) NWU: Типичная система координат в ROS
Нет. В ROS нет NWU.
http://www.ros.org/reps/rep-0103.html
@AlexisTM north или east не должны использоваться для обозначения условных обозначений тела, а должны использоваться для ориентации, например, спереди, слева.
Хорошо. Но если я не ошибаюсь, я думаю, у нас еще есть 3 конвенции?
1) NED: бортовое управление
2) Right-Forward-Up: как mavros понимает исходные (скоростные) уставки
3) Вперед-влево-вверх: соглашение ROS
@hmchung Мы используем заданные значения скорости во фрейме карты, и это ENU (соглашение ROS)
Обратите внимание, что должно быть только 2 условных обозначения! NED на Pixhawk и ENU: все, что вы делаете на ROS.
Вперед-влево-вверх (FLU) - это стандарт ROS для корпуса. Восток-Север-Вверх (ENU) - это соглашение ROS для локального / словарного фрейма.
Самый полезный комментарий
Для
setpoint_velocity
я добавлю исправление, которое позволит выбирать междуLOCAL_NED
иBODY_NED
, поскольку в настоящее время по умолчанию используетсяLOCAL_NED
(https: / /github.com/mavlink/mavros/blob/master/mavros/src/plugins/setpoint_velocity.cpp#L81). А пока вы можете использоватьsetpoint_raw
и установитьcoordinate_frame
наFRAME_BODY_NED
илиMAV_FRAME::BODY_NED
(оба должны работать).