Mavros: Пример внешнего управления setpoint_position / global not arming

Созданный на 21 дек. 2017  ·  38Комментарии  ·  Источник: mavlink/mavros

Детали проблемы

Я пытаюсь воспроизвести пример внешнего управления (который отлично работает в беседке), но отправляю глобальные координаты вместо локальных x, y, z.
Я не могу этого сделать, дрон входит в цикл «Offboard Enabled», но никогда не переходит в режим «Vehicle Armed» или вообще не двигается.

Это код, который я использую:

#include <ros/ros.h>
#include <geometry_msgs/PoseStamped.h>
#include <mavros_msgs/SetMode.h>
#include <mavros_msgs/CommandBool.h>
#include <mavros_msgs/State.h>
#include <mavros_msgs/GlobalPositionTarget.h>

mavros_msgs::State current_state;
void state_cb(const mavros_msgs::State::ConstPtr& msg){
    current_state = *msg;
}

int main(int argc, char **argv)
{
    ros::init(argc, argv, "offb_node");
    ros::NodeHandle nh;

    ros::Subscriber state_sub = nh.subscribe<mavros_msgs::State>
            ("mavros/state", 10, state_cb);
    //ros::Publisher local_pos_pub = nh.advertise<geometry_msgs::PoseStamped>
    //        ("mavros/setpoint_position/local", 10);
    ros::Publisher global_pos_pub = nh.advertise<mavros_msgs::GlobalPositionTarget>
            ("mavros/setpoint_position/global", 10);
    ros::ServiceClient arming_client = nh.serviceClient<mavros_msgs::CommandBool>
            ("mavros/cmd/arming");
    ros::ServiceClient set_mode_client = nh.serviceClient<mavros_msgs::SetMode>
            ("mavros/set_mode");

    //the setpoint publishing rate MUST be faster than 2Hz
    ros::Rate rate(20.0);

    // wait for FCU connection
    while(ros::ok() && current_state.connected){
        ros::spinOnce();
        rate.sleep();
    }

    geometry_msgs::PoseStamped pose;
    pose.pose.position.x = 0;
    pose.pose.position.y = 0;
    pose.pose.position.z = 2;

    mavros_msgs::GlobalPositionTarget target;
    target.latitude = 42.3005867;
    target.longitude = -6.73246288;
    target.altitude = 288;

    //send a few setpoints before starting
    for(int i = 100; ros::ok() && i > 0; --i){
        //local_pos_pub.publish(pose);
        global_pos_pub.publish(target);
        ros::spinOnce();
        rate.sleep();
    }

    mavros_msgs::SetMode offb_set_mode;
    offb_set_mode.request.custom_mode = "OFFBOARD";

    mavros_msgs::CommandBool arm_cmd;
    arm_cmd.request.value = true;

    ros::Time last_request = ros::Time::now();

    while(ros::ok()){
        if( current_state.mode != "OFFBOARD" &&
            (ros::Time::now() - last_request > ros::Duration(5.0))){
            if( set_mode_client.call(offb_set_mode) &&
                offb_set_mode.response.mode_sent){
                ROS_INFO("Offboard enabled");
            }
            last_request = ros::Time::now();
        } else {
            if( !current_state.armed &&
                (ros::Time::now() - last_request > ros::Duration(5.0))){
                if( arming_client.call(arm_cmd) &&
                    arm_cmd.response.success){
                    ROS_INFO("Vehicle armed");
                }
                last_request = ros::Time::now();
            }
        }

        //local_pos_pub.publish(pose);
        global_pos_pub.publish(target);



        ros::spinOnce();
        rate.sleep();
    }

    return 0;
}

Версия и платформа МАВРОС

Маврос: 0,22
ROS: кинетическая
Ubuntu: 16.04

Тип и версия автопилота

[] ArduPilot
[X] PX4

Версия: 1.72

Журналы узлов

[ INFO] [1513871636.932979892, 18.704000000]: Offboard enabled
[ INFO] [1513871642.007625263, 23.756000000]: Offboard enabled
[ INFO] [1513871647.086730559, 28.802000000]: Offboard enabled
[ INFO] [1513871652.230028795, 33.854000000]: Offboard enabled
[ INFO] [1513871657.324560463, 38.904000000]: Offboard enabled
[ INFO] [1513871662.405701045, 43.952000000]: Offboard enabled
[ INFO] [1513871667.482897607, 49.002000000]: Offboard enabled
[ INFO] [1513871672.582290375, 54.054000000]: Offboard enabled
[ INFO] [1513871677.688265367, 59.104000000]: Offboard enabled
[ INFO] [1513871682.756627458, 64.152000000]: Offboard enabled
[ INFO] [1513871687.861573086, 69.204000000]: Offboard enabled
[ INFO] [1513871692.928765643, 74.252000000]: Offboard enabled
[ INFO] [1513871698.006964586, 79.304000000]: Offboard enabled
[ INFO] [1513871703.113995111, 84.354000000]: Offboard enabled
[ INFO] [1513871708.205142370, 89.404000000]: Offboard enabled
[ INFO] [1513871713.332829113, 94.454000000]: Offboard enabled
[ INFO] [1513871718.443985089, 99.504000000]: Offboard enabled

Диагностика

header: 
  seq: 58
  stamp: 
    secs: 53
    nsecs:         0
  frame_id: ''
status: 
  - 
    level: 0
    name: "mavros: FCU connection"
    message: "connected"
    hardware_id: "udp://:14540<strong i="17">@localhost</strong>:14557"
    values: 
      - 
        key: "Received packets:"
        value: "19548"
      - 
        key: "Dropped packets:"
        value: "0"
      - 
        key: "Buffer overruns:"
        value: "0"
      - 
        key: "Parse errors:"
        value: "0"
      - 
        key: "Rx sequence number:"
        value: "94"
      - 
        key: "Tx sequence number:"
        value: "108"
      - 
        key: "Rx total bytes:"
        value: "808043"
      - 
        key: "Tx total bytes:"
        value: "26524"
      - 
        key: "Rx speed:"
        value: "15016.000000"
      - 
        key: "Tx speed:"
        value: "510.000000"
  - 
    level: 0
    name: "mavros: GPS"
    message: "3D fix"
    hardware_id: "udp://:14540<strong i="18">@localhost</strong>:14557"
    values: 
      - 
        key: "Satellites visible"
        value: "10"
      - 
        key: "Fix type"
        value: "3"
      - 
        key: "EPH (m)"
        value: "0.00"
      - 
        key: "EPV (m)"
        value: "0.00"
  - 
    level: 0
    name: "mavros: Heartbeat"
    message: "Normal"
    hardware_id: "udp://:14540<strong i="19">@localhost</strong>:14557"
    values: 
      - 
        key: "Heartbeats since startup"
        value: "48"
      - 
        key: "Frequency (Hz)"
        value: "0.900000"
      - 
        key: "Vehicle type"
        value: "Quadrotor"
      - 
        key: "Autopilot type"
        value: "PX4 Autopilot"
      - 
        key: "Mode"
        value: "AUTO.LOITER"
      - 
        key: "System status"
        value: "Standby"
  - 
    level: 0
    name: "mavros: System"
    message: "Normal"
    hardware_id: "udp://:14540<strong i="20">@localhost</strong>:14557"
    values: 
      - 
        key: "Sensor present"
        value: "0x00000000"
      - 
        key: "Sensor enabled"
        value: "0x00000000"
      - 
        key: "Sensor helth"
        value: "0x00000000"
      - 
        key: "CPU Load (%)"
        value: "0.0"
      - 
        key: "Drop rate (%)"
        value: "0.0"
      - 
        key: "Errors comm"
        value: "0"
      - 
        key: "Errors count #1"
        value: "0"
      - 
        key: "Errors count #2"
        value: "0"
      - 
        key: "Errors count #3"
        value: "0"
      - 
        key: "Errors count #4"
        value: "0"
  - 
    level: 0
    name: "mavros: Battery"
    message: "Normal"
    hardware_id: "udp://:14540<strong i="21">@localhost</strong>:14557"
    values: 
      - 
        key: "Voltage"
        value: "12.15"
      - 
        key: "Current"
        value: "-1.0"
      - 
        key: "Remaining"
        value: "100.0"
  - 
    level: 2
    name: "mavros: Time Sync"
    message: "No events recorded."
    hardware_id: "udp://:14540<strong i="22">@localhost</strong>:14557"
    values: 
      - 
        key: "Timesyncs since startup"
        value: "0"
      - 
        key: "Frequency (Hz)"
        value: "0.000000"
      - 
        key: "Last dt (ms)"
        value: "-9.905652"
      - 
        key: "Mean dt (ms)"
        value: "0.000000"
      - 
        key: "Last system time (s)"
        value: "48.740659000"
      - 
        key: "Time offset (s)"
        value: "4.147428739"

Проверить ID

OK. I got messages from 1:1.

---
Received 5370 messages, from 1 addresses
sys:comp   list of messages
  1:1     0, 1, 2, 140, 141, 147, 24, 30, 31, 32, 33, 74, 76, 77, 85, 87, 102, 230, 105, 111, 241, 242, 245

PX4 question setpoint

Самый полезный комментарий

Во-первых, while(ros::ok() && current_state.connected){ должно быть while(ros::ok() && !current_state.connected){ .
Также - https://github.com/mavlink/mavros/blob/master/mavros/src/plugins/setpoint_position.cpp#L69 - убедитесь, что вы получаете данные из темы global_position/global .

Все 38 Комментарий

Во-первых, while(ros::ok() && current_state.connected){ должно быть while(ros::ok() && !current_state.connected){ .
Также - https://github.com/mavlink/mavros/blob/master/mavros/src/plugins/setpoint_position.cpp#L69 - убедитесь, что вы получаете данные из темы global_position/global .

Я исправил цикл while с помощью!
rostopic echo global_position / global возвращает правильный результат:

header: 
  seq: 283
  stamp: 
    secs: 193
    nsecs: 832815640
  frame_id: "base_link"
status: 
  status: 0
  service: 1
latitude: 42.3005867
longitude: -6.7324631
altitude: 2120.89452234
position_covariance: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
position_covariance_type: 1

Однако это все еще не работает. когда я запускаю код, он завершается без постановки на охрану или включения за бортом.
Единственное предупреждение, которое он выдает:

[ WARN] [1514991840.139563807, 7583.766000000]: SPG: sp not sent.
INFO  [tone_alarm] negative
[ WARN] [1514991840.303175629, 7583.928000000]: CMD: Unexpected command 176, result 1

Мне нужно перевести с глобального на локальный, а затем отправить в mavros / setpoint_position / local, иначе это не сработает.
Мне любопытно, это я единственный с этой проблемой? Может ли кто-нибудь воспроизвести пример с бортовым самолетом, просто опубликовав его в mavros / setpoint_position / global?

@mzahana, не могли бы вы помочь @danividanivi по указанному выше вопросу? Спасибо

Я просто хотел бы отметить, что я тоже столкнулся с этой проблемой. Мне удалось подтвердить, что я публикую в правильной теме, но MAVROS, похоже, не может преобразовать это в правильное сообщение уставки MAVLINK для PX4. Я проверил с помощью QGroundcontrol и смог увидеть только сообщение о заданном значении, публикуемое на PX4 при использовании локального.

@mzahana, можете ли вы повторно протестировать свою реализацию и убедиться, что она работает? Спасибо

@ eric1221bday быстрый вопрос: вы получаете данные GPS на MAVROS? И что вы имеете в виду под:

но MAVROS, похоже, не может преобразовать его в правильное сообщение уставки MAVLINK для PX4

Это звучит довольно расплывчато, и мы не можем отладить какую-либо проблему с такой информацией.

Я использовал SITL, и да, было включено моделирование GPS, и я смог просмотреть эту тему в ROS. Что касается мавлинка. Я имел в виду просто то, что не было похоже, что глобальная уставка отправляется на px4 правильно, так как я не мог увидеть ее с помощью Mavlink Inspector.

Это не должно публиковать какую-либо глобальную уставку положения, а скорее преобразовывать из глобального в локальное и публиковать как локальную уставку положения. Таким образом, вы на самом деле никогда не увидите глобальной уставки.

Я смог сделать вывод, что да, и я точно так же не смог увидеть никаких локальных уставок ни с PX4.

Что ж, это зависит от того, как настроен ваш узел и что вы публикуете или нет в MAVROS. Это не может быть отлажено без дополнительной информации.

@ eric1221bday что-нибудь еще добавить или мы можем закрыть это?

Я еще раз протестирую это на своей стороне и вернусь к вам.

Какой-либо прогресс? У меня такая же проблема, и я не могу найти решения.

Убедитесь, что вы установили поле header.stamp. Только тогда это работает!

Добрый день! Может ли кто-нибудь подтвердить, что публикация в теме / mavros / setpoint_position / global, по их мнению, успешно контролировала положение дрона? У меня такая же проблема (ответ не получен, px4, похоже, не получает никаких сообщений) даже при установке поля header.stamp

Да, у меня работает!

То же самое и здесь ... (у меня не работает)

@tropappar не могли бы вы поделиться образцом кода. Я запускаю сценарий, аналогичный приведенному выше, но на rqt_graph я не вижу каких-либо тем, публикуемых с моего узла, даже если он успешно публикуется.

Ну вот:

#include <ros/ros.h>
#include <mavros_msgs/CommandBool.h>
#include <mavros_msgs/SetMode.h>
#include <mavros_msgs/State.h>
#include <mavros_msgs/GlobalPositionTarget.h>
#include <sensor_msgs/NavSatFix.h>

// global variables
mavros_msgs::State current_state;
sensor_msgs::NavSatFix global_position;
bool global_position_received = false;

// callback functions
void globalPosition_cb(const sensor_msgs::NavSatFix::ConstPtr& msg) {
    global_position = *msg;
    global_position_received = true;
    ROS_INFO_ONCE("Got global position: [%.2f, %.2f, %.2f]", msg->latitude, msg->longitude, msg->altitude);
}

void state_cb(const mavros_msgs::State::ConstPtr& msg) {
    current_state = *msg;
}

// main function
int main(int argc, char **argv) {
    ros::init(argc, argv, "test");
    ros::NodeHandle nh;

    ros::ServiceClient arming_client = nh.serviceClient < mavros_msgs::CommandBool > ("mavros/cmd/arming");
    ros::ServiceClient set_mode_client = nh.serviceClient < mavros_msgs::SetMode > ("mavros/set_mode");
    ros::Subscriber state_sub = nh.subscribe < mavros_msgs::State > ("mavros/state", 10, state_cb);
    ros::Subscriber global_pos_sub = nh.subscribe < sensor_msgs::NavSatFix > ("mavros/global_position/global", 1, globalPosition_cb);
    ros::Publisher goal_pos_pub = nh.advertise < mavros_msgs::GlobalPositionTarget > ("mavros/setpoint_position/global", 10);

    ros::Rate rate(10);

    // wait for fcu connection
    while (ros::ok() && !current_state.connected) {
        ROS_INFO_ONCE("Waiting for FCU connection...");
        ros::spinOnce();
        rate.sleep();
    }
    ROS_INFO("FCU connected");

    // wait for position information
    while (ros::ok() && !global_position_received) {
        ROS_INFO_ONCE("Waiting for GPS signal...");
        ros::spinOnce();
        rate.sleep();
    }
    ROS_INFO("GPS position received");

    // set target position
    mavros_msgs::GlobalPositionTarget goal_position;
    goal_position.latitude = global_position.latitude;
    goal_position.longitude = global_position.longitude;
    goal_position.altitude = global_position.altitude;

    // send a few setpoints before starting
    for (int i=0; i<20; ++i) {
        goal_position.header.stamp = ros::Time::now();
        goal_pos_pub.publish(goal_position);
        ros::spinOnce();
        rate.sleep();
    }

    // set mode
    mavros_msgs::SetMode offb_set_mode;
    offb_set_mode.request.base_mode = 0;
    offb_set_mode.request.custom_mode = "OFFBOARD";
    if (set_mode_client.call(offb_set_mode) && offb_set_mode.response.mode_sent) {
        ROS_INFO("OFFBOARD enabled");
    } else {
        ROS_ERROR("Failed to set OFFBOARD");
    }

    // arm
    mavros_msgs::CommandBool arm_cmd;
    arm_cmd.request.value = true;
    if (arming_client.call(arm_cmd) && arm_cmd.response.success) {
        ROS_INFO("Vehicle armed");
    } else {
        ROS_ERROR("Arming failed");
    }

    // take off to 5m above ground
    goal_position.altitude = goal_position.altitude + 5.0;
    while (ros::ok()) {
        goal_position.header.stamp = ros::Time::now();
        goal_pos_pub.publish(goal_position);
        ros::spinOnce();
        ROS_INFO_THROTTLE(1, "At altitude %.2f", global_position.altitude);
        rate.sleep();
    }

    return 0;
}

Добрый день! Может ли кто-нибудь подтвердить, что публикация в теме / mavros / setpoint_position / global, по их мнению, успешно контролировала положение дрона? У меня такая же проблема (ответ не получен, px4, похоже, не получает никаких сообщений) даже при установке поля header.stamp

у меня тоже, но тема / mavros / setpoint_raw / global работала нормально.

привет zxz0622,
Я работал над / mavros / setpoint_raw / global около 4 дней, но я не мог переместить квадрокоптер, указав значение широты, долготы и высоты. Подскажите, пожалуйста, как вы это делаете?
Можете ли вы поделиться параметрами / mavros / setpoint_raw / global? (кадр_координаты ...)

Извините за то, что откопал старую ветку, но я пытаюсь сделать то же самое. Я не могу управлять автомобилем, отправляя заданные значения положения в _mavros / setpoint_position / global_. Автомобиль вооружается, садится на землю, вращает роторы и снимает с охраны по истечении тайм-аута. Я могу подтвердить, что rostopic echo /mavros/setpoint_position/global показывает, что уставки из моего кода публикуются. Я также могу подтвердить, что отправка локальных заданных значений координат на _mavros / setpoint_position / global_ работает отлично.
Могу ли я установить какое-либо другое поле, кроме lat, lon и lat?

Версия и платформа МАВРОС

Маврос: мастер
ROS: мелодичный
Ubuntu: 18.04
Тип и версия автопилота

[] ArduPilot
[X] PX4

Версия: master

Диагностика
образец ростопического эха:
header: seq: 10 stamp: secs: 1861 nsecs: 652000000 frame_id: "base_footprint" pose: position: latitude: 19.1345485 longitude: 72.9122298 altitude: -48.3160189477 orientation: x: 0.0 y: 0.0 z: 0.0 w: 0.0
Просто любопытно, а поле frame_id играет какую-то роль? Я тоже пробовал с _local_origin_, но безрезультатно.

Спасибо.

Убедитесь, что вы публикуете точку, которая находится над высотой дрона. Это может показаться глупым предложением, но можно забыть, что высота по GPS может быть намного выше местной.

@swaroophangal Я также @tropappar выше.
То есть, посылая позицию уставки через "mavros / setpoint_position / global", транспортное средство успешно входит в режим offboard и даже в руки, но садится на землю.
Я также попытался отправить заданное значение положения "mavros / setpoint_raw / global", но тоже потерпел неудачу с тем же феноменом (т. Е. Транспортное средство успешно входит в положение вне борта и даже вооружается, но остается на земле).

@ burak-yildizoz Кроме того, я перепроверил, что опубликованная точка находится выше GPS-высоты дрона (код, указанный @tropappar выше, решил это с помощью "goal_position.altitude = goal_position.altitude + 5.0;"). В частности, я поигрался с «+5» с другими значениями, но безуспешно.

Может кто-нибудь помочь?
Спасибо!

-
Версия и платформа МАВРОС

Маврос: мастер
ROS: кинетическая
Ubuntu: 16.04
Тип и версия автопилота

[] ArduPilot
[X] PX4

Версия: master

Диагностика
образец rostopic echo / mavros / global_position / global:
заголовок:
seq: 206
печать:
сек: 1286
нсек: 28000000
frame_id: "base_link"
статус:
статус: 0
сервис: 1
широта: 47.3977421
долгота: 8.5455932
высота: 535.327916774
position_covariance: [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]
position_covariance_type: 2

rqt_graph
rqt_graph

@ jungx148 Вам необходимо проверить, получает ли ваш fmu заданные значения mavlink, которые вы отправляете.

@ Jaeyoung-Lim Здравствуйте, большое спасибо за все ваши усилия для сообщества Pixhawk, а также за быстрый ответ.

У меня возникли ранее указанные проблемы, когда я работал над преобразованием вашего ранее опубликованного проекта "modudculab_ros" ( ссылка), который был построен для локального внешнего управления, в проект глобального внешнего управления.

Что касается вашего комментария: «Вам необходимо проверить, получает ли ваш fmu заданные значения mavlink, которые вы отправляете», я проверил параметр «POSITION_TARGET_GLOBAL_INT (link) » через QGC и заметил, что fmu действительно не получил заданные значения mavlink, как вы заявили как показано на рисунке ниже, снятом с экрана QGC.

QGC

Кроме того, ниже я приложил вывод roslaunch modudculab_ros ctrl_pos_gazebo_offb.launch .

` sunghunjung2 @ gcs : ~ $ roslaunch modudculab_ros ctrl_pos_gazebo_offb.launch
... вход в /home/sunghunjung2/.ros/log/c7421548-ea08-11ea-8a18-b052161d0343/roslaunch-gcs-16794.log
Проверка каталога журнала на предмет использования диска. Это может занять некоторое время.
Нажмите Ctrl-C, чтобы прервать
Завершена проверка использования диска для файла журнала. Использование <1 ГБ.

запущен сервер roslaunch http: // gcs : 35869 /

РЕЗЮМЕ

ПАРАМЕТРЫ

  • / mavros / conn_heartbeat: 5.0
  • / mavros / conn_timeout: 5.0
  • / mavros / fcu_url: udp: //: 14540 @ 127 ....
  • / mavros / frame_id: мир
  • / mavros / gcs_url:
  • / mavros / mocap / use_pose: ложь
  • / mavros / mocap / use_tf: Верно
  • / mavros / startup_px4_usb_quirk: Верно
  • / mavros / target_component_id: 1
  • / mavros / target_system_id: 1
  • / rosdistro: кинетический
  • / rosversion: 1.12.15

УЗЛЫ
/
mavros (mavros / mavros_node)
offb_node (modudculab_ros / pub_setpoints_traj)

ROS_MASTER_URI = http: // локальный : 11311

процесс [mavros-1]: запущен с pid [16811]
процесс [offb_node-2]: запущен с pid [16812]
`

-
Что касается этого вопроса, я подозреваю следующие две части.

ПОДОЗРЕНИЕ 1 :
Я подозреваю, что эта проблема связана с установленной на моем рабочем столе версией MAVROS.
Я установил ros-kinetic-mavros * с помощью команды apt, а также сохранил последний пакет mavros git в папке catkin_ws / src.

ПОДОЗРЕНИЕ 2 :
Когда я использовал

ros::Publisher goal_pos_pub = nh.advertise < mavros_msgs::GlobalPositionTarget > ("mavros/setpoint_position/global", 10); ,

Я получил следующее сообщение об ошибке

[ERROR] [1598713832.833795288, 426.168000000]: Client [/mavros] wants topic /mavros/setpoint_position/global to have datatype/md5sum [geographic_msgs/GeoPoseStamped/cc409c8ed6064d8a846fa207bf3fba6b], but our version has [mavros_msgs/GlobalPositionTarget/076ded0190b9e045f9c55264659ef102]. Dropping connection.

А затем я заменил его на

ros::Publisher goal_pos_pub = nh.advertise < mavros_msgs::GlobalPositionTarget > ("geographic_msgs/GeoPoseStamped", 10);

и это не привело ни к какому сообщению об ошибке. Однако в любом случае параметр «POSITION_TARGET_GLOBAL_INT» не отображается в инспекторе mavlink QGC.

Еще раз спасибо за ваше бесценное время, чтобы изучить этот вопрос.

Я не смог решить указанную выше проблему, поэтому я перехожу на использование mavros_msgs для извлечения путевых точек из QGC, вставки рассчитанного извне угла рыскания и добавления комбинированных путевых точек (вытянутые путевые точки из QGC с рассчитанным извне углом рыскания).

Таким образом, я мог успешно управлять MAV, как я хотел. Большое спасибо.

@ jungx148 Это не решение, а просто обходной путь.

Вы проверили, достигают ли отправляемые вами уставки fmu?

@ jungx148 Возможно ли, что ваша проблема связана с # 1414?

Кто-нибудь еще пришел к какому-либо выводу ??

Я пробовал публиковать по этим трем темам, но безуспешно

"/ mavros / setpoint_raw / global"
"/ mavros / setpoint_raw / target_global"
"/ mavros / setpoint_position / global"

NB: я делаю только симуляцию беседки

Ну, недавно я обнаружил эту ошибку:

Ну тема / mavros / setpoint_position / global наконец-то rostopic info /mavros/setpoint_position/global я узнал, что тип сообщения, с которым я должен работать, - это geographic_msgs / GeoPoseStamped, а не mavros_msgs / GlobalPositionTarget. Я не знаю, почему документация не обновляется.

Я также пытаюсь выполнить тот же маневр, то есть опубликовать сообщение mavros_msgs :: GlobalPositionTarget в теме mavros / setpoint_raw / global, и оно отлично работает. Дрон взлетает и направляется к желаемой путевой точке. Я хотел спросить, успешно ли провел дрон на нескольких путевых точках и нужна ли нам логика, чтобы проверить, достигнута ли путевая точка?
Причина, по которой я спрашиваю об этом, заключается в том, что я не уверен, как беседка устанавливает свое исходное положение, поэтому, когда дрон переходит на любую предоставленную случайную широту и высоту, он перемещается к этой путевой точке на неопределенное время. Есть ли способ проверить, достигнута ли эта путевая точка, а затем указать другую путевую точку?
Любые предложения будут очень признательны.
Заранее спасибо.

Я также пытаюсь выполнить тот же маневр, то есть опубликовать сообщение mavros_msgs :: GlobalPositionTarget в теме mavros / setpoint_raw / global, и оно отлично работает. Дрон взлетает и направляется к желаемой путевой точке. Я хотел спросить, успешно ли провел дрон на нескольких путевых точках и нужна ли нам логика, чтобы проверить, достигнута ли путевая точка?
Причина, по которой я спрашиваю об этом, заключается в том, что я не уверен, как беседка устанавливает свое исходное положение, поэтому, когда дрон переходит на любую предоставленную случайную широту и высоту, он перемещается к этой путевой точке на неопределенное время. Есть ли способ проверить, достигнута ли эта путевая точка, а затем указать другую путевую точку?
Любые предложения будут очень признательны.
Заранее спасибо.

Просто продолжайте публиковать глобальные уставки положения, пока дрон не окажется внутри приемлемой области, например, ~ 50 см в плоскости xy и 10 см по оси z. Затем опубликуйте еще одну точку.

Не совсем понял. Не могли бы вы прислать простой образец кода, чтобы я мог понять? Я попробовал пару вещей, но это не сработало. Ось Z 10см или м?
Спасибо.

Не совсем понял. Не могли бы вы прислать простой образец кода, чтобы я мог понять? Я попробовал пару вещей, но это не сработало. Ось Z 10см или м?
Спасибо.

Я написал это, чтобы дать вам представление. Подпишитесь на глобальное положение, либо конвертируйте в декартовы координаты, либо просто задайте порог в градусах широты / долготы около 1e-6, чтобы разница между дроном и желаемой точкой была меньше порогового значения. К высоте нужно относиться по-другому, потому что ее значение не в градусах, а в метрах. Если дрон находится внутри коробки, точка пути достигнута.

В настоящее время я использую sensor_msgs :: NavSatFix, чтобы получить положение дрона. Когда вы говорите, подписывайтесь на глобальную позицию, вы имеете в виду этого подписчика?
Кроме того, было бы действительно полезно, если бы вы могли немного подробнее рассказать о том, как создать порог в градусах широты / долготы около 0,000001 и как проверить, находится ли дрон внутри коробки?
Если вы уже реализовали это, не могли бы вы поделиться небольшим фрагментом логики, о которой вы говорите? Так было бы намного проще.
Большое спасибо.

Привет всем,
Если кто-то решил навигацию дрона с несколькими путевыми точками в глобальном фрейме, не могли бы вы взглянуть на [ https://github.com/mavlink/mavros/issues/1553 } и помочь мне с этой проблемой. Я пытался реализовать это в течение нескольких недель, но не могу найти решение. Я просто хочу перемещать дрон, используя широту и долготу, к нескольким путевым точкам.
Заранее спасибо.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги