Mavros: Exemplo de controle externo setpoint_position / global not arming

Criado em 21 dez. 2017  ·  38Comentários  ·  Fonte: mavlink/mavros

Detalhes do problema

Estou tentando replicar o exemplo de controle externo (que está funcionando bem no gazebo), mas enviando coordenadas globais em vez de x, y, z locais.
Não consigo fazer isso, o drone entra em um loop de "Offboard Enabled", mas nunca entra em Vehicle Armed ou se move.

Este é o código que estou usando:

#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;
}

Versão e plataforma MAVROS

Mavros: 0,22
ROS: cinético
Ubuntu: 16.04

Tipo e versão do piloto automático

[] ArduPilot
[X] PX4

Versão: 1,72

Registros de nó

[ 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

Diagnóstico

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"

Verificar 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

Comentários muito úteis

Primeiro, while(ros::ok() && current_state.connected){ deve ser while(ros::ok() && !current_state.connected){ .
Além disso - https://github.com/mavlink/mavros/blob/master/mavros/src/plugins/setpoint_position.cpp#L69 - certifique-se de obter dados do tópico global_position/global .

Todos 38 comentários

Primeiro, while(ros::ok() && current_state.connected){ deve ser while(ros::ok() && !current_state.connected){ .
Além disso - https://github.com/mavlink/mavros/blob/master/mavros/src/plugins/setpoint_position.cpp#L69 - certifique-se de obter dados do tópico global_position/global .

Corrigi o loop while com o!
rostopic echo global_position / global retorna a saída correta:

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

No entanto, ainda não está funcionando. quando executo o código, ele termina sem armar ou habilitar o offboard.
O único aviso que ele produz é:

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

Tenho que traduzir do global para o local e, em seguida, enviar mavros / setpoint_position / local, caso contrário não funcionará.
Estou curioso, sou o único com este problema? Alguém é capaz de reproduzir o exemplo da aeronave fora de bordo apenas publicando em mavros / setpoint_position / global?

@mzahana, você pode orientar @danividanivi sobre o assunto acima? Obrigado

Gostaria apenas de referir que também encontrei este problema. Consegui confirmar que estava publicando no tópico correto, mas o MAVROS não parece ser capaz de traduzi-lo em uma mensagem de ponto de ajuste MAVLINK correta para o PX4. Eu verifiquei usando QGroundcontrol e só pude ver uma mensagem de setpoint sendo publicada no PX4 quando usando local.

@mzahana você pode

@ eric1221bday pergunta rápida: você obtém dados de GPS no MAVROS? Além disso, o que você quer dizer com:

mas o MAVROS não parece ser capaz de traduzi-lo em uma mensagem de ponto de ajuste MAVLINK correta para o PX4

Isso parece meio vago e não podemos depurar nenhum problema com informações como essa.

Eu estava usando o SITL e sim, a simulação de GPS estava habilitada e consegui visualizar o tópico no ROS. Quanto ao mavlink. O que eu quis dizer é simplesmente que não parecia que o ponto de ajuste global estava sendo enviado para o px4 corretamente, pois não consegui vê-lo usando o Mavlink Inspector.

Isso não deve publicar nenhum ponto de ajuste de posição global, mas sim converter de global em local e publicar como um ponto de ajuste de posição local. Portanto, você nunca verá um ponto de ajuste global.

Pude deduzir que sim e da mesma forma não consegui ver nenhum ponto de ajuste local no PX4.

Bem, isso depende de como seu nó está configurado e o que você publica ou não no MAVROS. Isso não pode ser depurado sem mais informações.

@ eric1221bday mais alguma coisa a acrescentar ou podemos fechar isso?

Vou testar novamente do meu lado e voltar para você.

Algum progresso? Estou tendo o mesmo problema e não consigo encontrar uma solução.

Certifique-se de definir o campo header.stamp. Só então funciona!

Boa tarde! Alguém poderia confirmar se a publicação no tópico / mavros / setpoint_position / global conseguiu controlar com sucesso a posição do drone? Estou tendo o mesmo problema (nenhuma resposta obtida, px4 não parece receber nenhuma mensagem), mesmo definindo o campo header.stamp

Sim, funciona para mim!

Mesmo aqui ... (não funciona para mim)

@tropappar , você se importa em compartilhar algum código de amostra. Estou executando um script semelhante ao da parte superior, mas em rqt_graph não vejo nenhum tópico sendo publicado a partir do meu nó, embora a publicação seja bem-sucedida.

Aqui está:

#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;
}

Boa tarde! Alguém poderia confirmar se a publicação no tópico / mavros / setpoint_position / global conseguiu controlar com sucesso a posição do drone? Estou tendo o mesmo problema (nenhuma resposta obtida, px4 não parece receber nenhuma mensagem), mesmo definindo o campo header.stamp

eu também, mas o tópico / mavros / setpoint_raw / global funcionou normalmente.

oi zxz0622,
Estou trabalhando em / mavros / setpoint_raw / global por cerca de 4 dias, mas não consegui mover o quadricóptero dando o valor de altitude, latitude, longitude. Você pode me dizer como você faz isso, por favor?
Você pode compartilhar os parâmetros de / mavros / setpoint_raw / global? (coordinate_frame ...)

Desculpe por desenterrar um tópico antigo, mas estou tentando fazer o mesmo. Não consigo controlar o veículo enviando pontos de ajuste de posição em _mavros / setpoint_position / global_. Armas do veículo, assenta no solo girando os rotores e desarma após o tempo limite. Posso confirmar que rostopic echo /mavros/setpoint_position/global mostra que os pontos de ajuste do meu código estão sendo publicados. Também posso confirmar que o envio de pontos de ajuste de coordenadas locais em _mavros / setpoint_position / global_ funciona perfeitamente.
Devo definir qualquer outro campo além de lat, lon e lat?

Versão e plataforma MAVROS

Mavros: mestre
ROS: melódico
Ubuntu: 18.04
Tipo e versão do piloto automático

[] ArduPilot
[X] PX4

Versão: mestre

Diagnóstico
uma amostra de eco rostópico:
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
Só por curiosidade, o campo frame_id desempenha alguma função? Eu tentei com _local_origin_ também, sem efeito.

Obrigado.

Certifique-se de publicar um ponto que esteja acima da altitude do drone. Pode parecer uma sugestão boba, mas é possível que se esqueça que a altitude do GPS pode estar muito acima da altitude local.

@swaroophangal Também estou lutando para resolver um problema semelhante com você usando um código fornecido por @tropappar acima.
Ou seja, enviando um ponto de ajuste para a posição através de "mavros / setpoint_position / global", o veículo entra com sucesso em fora de bordo e até mesmo nos braços, mas permanece no solo.
Eu tentei enviar um ponto de ajuste de posição "mavros / setpoint_raw / global" também, mas também falhei com o mesmo fenômeno (ou seja, o veículo entra com sucesso fora da placa e até mesmo arma, mas fica no chão).

@ burak-yildizoz Além disso, verifiquei novamente que o ponto publicado está acima da altitude do GPS do drone (o código fornecido por @tropappar acima resolveu isso usando "goal_position.altitude = goal_position.altitude + 5.0;"). Em particular, eu brinquei com o "+5" com outros valores, mas acabei sem sucesso.

Alguém poderia ajudar?
Obrigada!

-
Versão e plataforma MAVROS

Mavros: mestre
ROS: cinético
Ubuntu: 16.04
Tipo e versão do piloto automático

[] ArduPilot
[X] PX4

Versão: mestre

Diagnóstico
uma amostra de rostopic echo / mavros / global_position / global:
cabeçalho:
seq: 206
carimbo:
segs: 1286
nsecs: 28000000
frame_id: "base_link"
status:
status: 0
serviço: 1
latitude: 47.3977421
longitude: 8.5455932
altitude: 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 Você precisa verificar se seu fmu está recebendo os pontos de ajuste do mavlink que você está enviando.

@ Jaeyoung-Lim Olá, muito obrigado por todos os seus esforços para a comunidade Pixhawk e também pela resposta rápida.

Estou tendo problemas declarados anteriormente enquanto estava trabalhando na conversão de seu projeto "modudculab_ros" publicado anteriormente ( link), que foi criado para o controle offboard local para o controle offboard global.

Com relação ao seu comentário, "Você precisa verificar se o seu fmu está recebendo os pontos de ajuste do mavlink que você está enviando", verifiquei um parâmetro, "POSITION_TARGET_GLOBAL_INT (link) ," por meio do QGC e percebi que nenhum ponto de ajuste do mavlink foi recebido pelo fmu como você afirmou como mostrado na imagem abaixo capturada da tela QGC.

QGC

Além disso, anexei a saída de roslaunch modudculab_ros ctrl_pos_gazebo_offb.launch abaixo.

` sunghunjung2 @ gcs : ~ $ roslaunch modudculab_ros ctrl_pos_gazebo_offb.launch
... registrando em /home/sunghunjung2/.ros/log/c7421548-ea08-11ea-8a18-b052161d0343/roslaunch-gcs-16794.log
Verificando o diretório de log para uso do disco. Isso pode demorar um pouco.
Pressione Ctrl-C para interromper
Concluída a verificação do uso do disco do arquivo de log. O uso é <1 GB.

servidor roslaunch iniciado http: // gcs : 35869 /

RESUMO

PARÂMETROS

  • / mavros / conn_heartbeat: 5.0
  • / mavros / conn_timeout: 5.0
  • / mavros / fcu_url: udp: //: 14540 @ 127 ....
  • / mavros / frame_id: world
  • / mavros / gcs_url:
  • / mavros / mocap / use_pose: False
  • / mavros / mocap / use_tf: Verdadeiro
  • / mavros / startup_px4_usb_quirk: Verdadeiro
  • / mavros / target_component_id: 1
  • / mavros / target_system_id: 1
  • / rosdistro: cinético
  • / rosversion: 1.12.15

NODES
/
mavros (mavros / mavros_node)
offb_node (modudculab_ros / pub_setpoints_traj)

ROS_MASTER_URI = http: // localhost : 11311

processo [mavros-1]: iniciado com pid [16811]
processo [offb_node-2]: iniciado com pid [16812]
`

-
Com relação a esse problema, suspeito das duas partes a seguir.

SUSPEITO 1 :
Suspeito que esse problema esteja relacionado à versão MAVROS instalada em meu desktop.
Eu instalei ros-kinetic-mavros * usando o comando apt e também salvei o pacote git mavros mais recente na pasta catkin_ws / src.

SUSPEITO 2 :
Quando eu usei

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

Eu recebi a seguinte mensagem de erro

[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.

E então, eu o substituí por

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

e não resultou em nenhuma mensagem de erro. No entanto, de qualquer forma, o parâmetro "POSITION_TARGET_GLOBAL_INT" não aparece no inspetor mavlink do QGC.

Mais uma vez, muito obrigado pelo seu tempo inestimável para analisar este problema.

Não consegui resolver o problema acima, então mudei para usar mavros_msgs para puxar waypoints do QGC, inserir ângulo de guinada calculado externamente e empurrar waypoints combinados (waypoints puxados do QGC com ângulo de guinada calculado externamente).

Dessa forma, pude controlar com sucesso o MAV como queria. Muito obrigado.

@ jungx148 Essa não é a solução, apenas uma solução alternativa.

Você verificou se os pontos de ajuste que está enviando estão atingindo o fmu?

@ jungx148 É possível que o seu problema esteja relacionado a # 1414?

Alguém já chegou a alguma conclusão ??

Tentei publicar sobre esses 3 tópicos, mas sem sorte

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

NB: Estou fazendo apenas uma simulação de gazebo

Bem, recentemente encontrei este erro:

Bem, o tópico / mavros / setpoint_position / global finalmente funcionou (mas com deslocamento de altitude?). De rostopic info /mavros/setpoint_position/global descobri que o tipo de mensagem com o qual deveria trabalhar é geográfico_msgs / GeoPoseStamped não mavros_msgs / GlobalPositionTarget Não sei porque a documentação não está atualizada.

Também estou tentando fazer a mesma manobra, ou seja, publicar a mensagem mavros_msgs :: GlobalPositionTarget no tópico mavros / setpoint_raw / global e funciona bem. O drone decola e vai para o waypoint desejado. Eu queria perguntar se alguém navegou com sucesso o drone para vários waypoints e se precisamos de uma lógica para verificar se o waypoint foi alcançado.
A razão de estar perguntando isso é que não tenho certeza de como o gazebo define sua posição inicial, então quando o drone vai para qualquer lat lon alt aleatório fornecido, ele vai para aquele waypoint indefinidamente. Existe alguma maneira de verificar se esse ponto de passagem foi alcançado e, em seguida, fornecer outro ponto de passagem?
Qualquer sugestão seria muito apreciada.
Desde já, obrigado.

Também estou tentando fazer a mesma manobra, ou seja, publicar a mensagem mavros_msgs :: GlobalPositionTarget no tópico mavros / setpoint_raw / global e funciona bem. O drone decola e vai para o waypoint desejado. Eu queria perguntar se alguém navegou com sucesso o drone para vários waypoints e se precisamos de uma lógica para verificar se o waypoint foi alcançado.
A razão de estar perguntando isso é que não tenho certeza de como o gazebo define sua posição inicial, então quando o drone vai para qualquer lat lon alt aleatório fornecido, ele vai para aquele waypoint indefinidamente. Existe alguma maneira de verificar se esse ponto de passagem foi alcançado e, em seguida, fornecer outro ponto de passagem?
Qualquer sugestão seria muito apreciada.
Desde já, obrigado.

Continue publicando os pontos de ajuste da posição global até que o drone esteja dentro de uma região aceitável, como ~ 50 cm no plano xy e 10 cm no eixo z. Em seguida, publique outro ponto.

Não entendi direito. Você poderia enviar um código de amostra simples para que eu tenha uma ideia? Tentei algumas coisas, mas não funcionaram. Eixo Z 10 cm ou m?
Obrigado.

Não entendi direito. Você poderia enviar um código de amostra simples para que eu tenha uma ideia? Tentei algumas coisas, mas não funcionaram. Eixo Z 10 cm ou m?
Obrigado.

Eu escrevi apenas para lhe dar uma ideia. Inscreva-se na posição global, converta para coordenadas cartesianas ou simplesmente tenha um limite em graus de latitude / longitude em torno de 1e-6, de modo que a diferença entre o drone e o ponto desejado seja inferior a um limite. Você precisa tratar a altitude de maneira diferente, porque seu valor não está em graus, mas em metros. Se o drone estiver dentro de uma caixa, o ponto de referência foi atingido.

Atualmente, estou usando sensor_msgs :: NavSatFix para obter a posição do drone. Quando você diz, assine a posição global, está se referindo a esse assinante?
Além disso, seria muito útil se você pudesse elaborar um pouco sobre como criar um limite em graus lat / lon em torno de 0,000001 e como verificar se o drone está dentro da caixa?
Se você já o implementou, poderia compartilhar um pequeno trecho da lógica que está mencionando? Isso tornaria as coisas muito mais fáceis.
Muito obrigado.

Olá a todos,
Se alguém resolveu a navegação de um drone com vários waypoints no quadro global, poderia dar uma olhada em [ https://github.com/mavlink/mavros/issues/1553 } e me ajudar com o problema. Estou tentando implementá-lo há algumas semanas, mas não consigo chegar a uma solução. Eu só quero navegar no drone usando lat lon alt para vários waypoints.
Desde já, obrigado.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

TeixeiraRafael picture TeixeiraRafael  ·  4Comentários

y22ma picture y22ma  ·  7Comentários

Changliu52 picture Changliu52  ·  6Comentários

zhahaoyu picture zhahaoyu  ·  12Comentários

Tutorgaming picture Tutorgaming  ·  4Comentários