Mavros: Ejemplo de control externo setpoint_position / global no armado

Creado en 21 dic. 2017  ·  38Comentarios  ·  Fuente: mavlink/mavros

Detalles del problema

Estoy tratando de replicar el ejemplo de control externo (que funciona bien en la glorieta) pero enviando coordenadas globales en lugar de x, y, z locales.
No puedo hacerlo, el dron entra en un bucle de "Offboard Enabled" pero nunca entra en el vehículo armado ni se mueve en absoluto.

Este es el código que estoy 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;
}

Versión y plataforma MAVROS

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

Tipo y versión de piloto automático

[] ArduPilot
[X] PX4

Versión: 1.72

Registros de nodo

[ 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ósticos

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

Comentario más útil

Primero, while(ros::ok() && current_state.connected){ debe ser while(ros::ok() && !current_state.connected){ .
Además, https://github.com/mavlink/mavros/blob/master/mavros/src/plugins/setpoint_position.cpp#L69 , asegúrese de obtener datos del tema global_position/global .

Todos 38 comentarios

Primero, while(ros::ok() && current_state.connected){ debe ser while(ros::ok() && !current_state.connected){ .
Además, https://github.com/mavlink/mavros/blob/master/mavros/src/plugins/setpoint_position.cpp#L69 , asegúrese de obtener datos del tema global_position/global .

Corregí el bucle while con el!
rostopic echo global_position / global devuelve la salida correcta:

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

Sin embargo, todavía no funciona. cuando ejecuto el código, termina sin armar o habilitar fuera de borda.
La única advertencia que produce es:

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

Tengo que traducir de global a local y luego enviar mavros / setpoint_position / local, de lo contrario no funcionará.
Tengo curiosidad, ¿soy yo el único con este problema? ¿Alguien puede reproducir el ejemplo de la aeronave fuera de borda con solo publicarlo en mavros / setpoint_position / global?

@mzahana, ¿podrías guiar a @danividanivi sobre el tema anterior? Gracias

Solo me gustaría mencionar que también me he encontrado con este problema. Pude confirmar que estaba publicando en el tema correcto, pero MAVROS no parece poder traducirlo en un mensaje de punto de ajuste MAVLINK correcto para el PX4. Verifiqué usando QGroundcontrol y solo pude ver un mensaje de punto de ajuste publicado en el PX4 cuando usaba local.

@mzahana, ¿puedes volver a probar tu implementación y asegurarte de que funciona? Gracias

@ eric1221bday pregunta rápida: ¿obtienes datos de GPS en MAVROS? Además, ¿a qué te refieres con:

pero MAVROS no parece poder traducirlo en un mensaje de punto de ajuste MAVLINK correcto para el PX4

Esto suena un poco vago y no podemos solucionar ningún problema con información como esta.

Estaba usando SITL, y sí, la simulación de GPS estaba habilitada y pude ver el tema en ROS. En cuanto a lo de mavlink. Lo que quise decir fue simplemente que no parecía que el punto de ajuste global se estuviera enviando correctamente al px4, ya que no pude verlo usando Mavlink Inspector.

No se supone que esto publique ningún punto de ajuste de posición global, sino que se convierta de global a local y se publique como un punto de ajuste de posición local. De modo que nunca ve un punto de ajuste global.

Pude deducir que sí, y tampoco pude ver ningún punto de ajuste local desde el PX4.

Bueno, eso depende de cómo esté configurado su nodo y de lo que publique o no en MAVROS. Esto no se puede depurar sin más información.

@ eric1221bday ¿ algo más para agregar o podemos cerrar esto?

Volveré a probar esto por mi parte y me pondré en contacto contigo.

¿Cualquier progreso? Tengo el mismo problema y parece que no puedo encontrar una solución.

Asegúrese de establecer el campo header.stamp. ¡Solo entonces funciona!

¡Buenas tardes! ¿Alguien podría confirmar que publicando en el tema / mavros / setpoint_position / global han logrado controlar con éxito la posición del dron? Tengo el mismo problema (no se obtuvo respuesta, px4 no parece recibir ningún mensaje) incluso configurando el campo header.stamp

¡Sí, funciona para mí!

Lo mismo aquí ... (no me funciona)

@tropappar, ¿te importaría compartir un código de muestra? Estoy ejecutando un script similar al de la parte superior, pero en rqt_graph no veo que se publique ningún tema desde mi nodo a pesar de que se está publicando con éxito.

Aqui tienes:

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

¡Buenas tardes! ¿Alguien podría confirmar que publicando en el tema / mavros / setpoint_position / global han logrado controlar con éxito la posición del dron? Tengo el mismo problema (no se obtuvo respuesta, px4 no parece recibir ningún mensaje) incluso configurando el campo header.stamp

yo también, pero el tema / mavros / setpoint_raw / global ha funcionado normalmente.

hola zxz0622,
He estado trabajando en / mavros / setpoint_raw / global durante aproximadamente 4 días, pero no pude mover el quadcopter al dar el valor de altitud de latitud y longitud. ¿Puedes decirme cómo lo haces por favor?
¿Puedes compartir los parámetros de / mavros / setpoint_raw / global? (marco_coordenadas ...)

Perdón por desenterrar un viejo hilo, pero estoy tratando de hacer lo mismo. No puedo controlar el vehículo enviando puntos de ajuste de posición en _mavros / setpoint_position / global_. El vehículo se arma, se sienta en el suelo girando los rotores y se desarma después del tiempo de espera. Puedo confirmar que rostopic echo /mavros/setpoint_position/global muestra que los puntos de ajuste de mi código se están publicando. También puedo confirmar que el envío de puntos de ajuste de coordenadas locales en _mavros / setpoint_position / global_ funciona perfectamente.
¿Se supone que debo establecer otro campo que no sea lat, lon y lat?

Versión y plataforma MAVROS

Mavros: maestro
ROS: Melódico
Ubuntu: 18.04
Tipo y versión de piloto automático

[] ArduPilot
[X] PX4

Versión: master

Diagnósticos
una muestra de eco rostopic:
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
Solo por curiosidad, ¿el campo frame_id juega algún papel? Probé con _local_origin_ también, sin ningún efecto.

Gracias.

Asegúrese de publicar un punto que esté por encima de la altitud del dron. Puede parecer una sugerencia tonta, pero es posible que uno pueda olvidar que la altitud del GPS puede estar muy por encima de la altitud local.

@swaroophangal También estoy luchando por resolver un problema similar con usted utilizando un código proporcionado por @tropappar en lo anterior.
Es decir, al enviar un punto de ajuste a la posición a través de "mavros / setpoint_position / global", el vehículo entra con éxito en fuera de borda e incluso se arma pero se sienta en el suelo.
Traté de enviar un punto de ajuste de posición "mavros / setpoint_raw / global" también, pero también fallé con el mismo fenómeno (es decir, el vehículo entra con éxito fuera de borda e incluso se arma pero se sienta en el suelo).

@ burak-yildizoz Además, volví a verificar que el punto publicado estuviera por encima de la altitud GPS del dron (el código dado por

¿Alguien podría ayudar?
¡Gracias!

-
Versión y plataforma MAVROS

Mavros: maestro
ROS: cinético
Ubuntu: 16.04
Tipo y versión de piloto automático

[] ArduPilot
[X] PX4

Versión: master

Diagnósticos
una muestra de rostopic echo / mavros / global_position / global:
encabezamiento:
seq: 206
sello:
segundos: 1286
nsecs: 28000000
frame_id: "base_link"
estado:
estado: 0
servicio: 1
latitud: 47.3977421
longitud: 8.5455932
altitud: 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 Debe verificar si su fmu está recibiendo los puntos de ajuste mavlink que está enviando.

@ Jaeyoung-Lim Hola, muchas gracias por todos sus esfuerzos para la comunidad Pixhawk y también por la rápida respuesta.

He tenido problemas anteriormente indicados mientras trabajaba en la conversión de su proyecto ( enlace) "modudculab_ros" publicado anteriormente, que se creó para el control externo local en uno de control externo global.

Con respecto a su comentario, "Debe verificar si su fmu está recibiendo los puntos de ajuste de mavlink que está enviando", verifiqué un parámetro, "POSITION_TARGET_GLOBAL_INT (enlace) ", a través de QGC y noté que fmu no recibió puntos de ajuste de mavlink como usted indicó. como se muestra en la imagen de abajo capturada desde la pantalla QGC.

QGC

Además, adjunté la salida de roslaunch modudculab_ros ctrl_pos_gazebo_offb.launch a continuación.

` sunghunjung2 @ gcs : ~ $ roslaunch modudculab_ros ctrl_pos_gazebo_offb.launch
... iniciando sesión en /home/sunghunjung2/.ros/log/c7421548-ea08-11ea-8a18-b052161d0343/roslaunch-gcs-16794.log
Comprobando el uso del disco en el directorio de registro. Esto puede tardar un rato.
Presione Ctrl-C para interrumpir
Terminado de comprobar el uso del disco del archivo de registro. El uso es <1 GB.

inició el servidor roslaunch http: // gcs : 35869 /

RESUMEN

PARAMETROS

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

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

ROS_MASTER_URI = http: // localhost : 11311

proceso [mavros-1]: comenzó con pid [16811]
proceso [offb_node-2]: comenzó con pid [16812]
'

-
Con respecto a este tema, sospecho que las siguientes dos partes.

SOSPECHOSO 1 :
Sospecho que este problema está relacionado con la versión de MAVROS instalada en mi escritorio.
Instalé ros-kinetic-mavros * usando el comando apt y también guardé el último paquete mavros git en la carpeta catkin_ws / src.

SOSPECHOSO 2 :
Cuando usé

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

Recibí el siguiente mensaje de error

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

Y luego, lo reemplacé con

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

y no dio como resultado ningún mensaje de error. Sin embargo, de cualquier manera, el parámetro, "POSITION_TARGET_GLOBAL_INT" no aparece en el inspector de mavlink de QGC.

Nuevamente, muchas gracias por su invaluable tiempo para revisar este tema.

No pude resolver el problema anterior, por lo que cambio para usar mavros_msgs para extraer puntos de referencia de QGC, insertar un ángulo de guiñada calculado externamente y presionar puntos de ruta combinados (puntos de ruta extraídos de QGC con un ángulo de guiñada calculado externamente).

De esta manera, pude controlar MAV con éxito como quisiera. Muchas gracias.

@ jungx148 Esa no es la solución y solo una solución.

¿Ha comprobado si los puntos de ajuste que está enviando llegan a la FMU?

@ jungx148 ¿Es posible que su problema esté relacionado con # 1414?

¿Alguien ha llegado a alguna conclusión todavía?

Intenté publicar sobre estos 3 temas pero no tuve suerte

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

NB: solo estoy haciendo una simulación de cenador

Bueno, recientemente encontré este error:

Bueno, el tema / mavros / setpoint_position / global finalmente funcionó (¿pero con compensación de altitud?). Desde rostopic info /mavros/setpoint_position/global descubrí que el tipo de mensaje con el que debería estar trabajando es geo_msgs / GeoPoseStamped no mavros_msgs / GlobalPositionTarget No sé por qué la documentación no está actualizada.

También estoy tratando de hacer la misma maniobra, es decir, publicar el mensaje mavros_msgs :: GlobalPositionTarget en el tema mavros / setpoint_raw / global y funciona bien. El dron despega y se dirige al waypoint deseado. Quería preguntar si alguien ha navegado con éxito el dron a múltiples puntos de ruta y si necesitamos una lógica para verificar si se alcanzó el punto de ruta.
La razón por la que pregunto esto es que no estoy seguro de cómo la glorieta establece su posición de inicio, por lo que cuando el dron va a cualquier lat lon alt aleatorio provisto, va a ese waypoint indefinidamente. ¿Hay alguna forma de comprobar si se alcanza ese punto de ruta y luego proporcionar otro punto de ruta?
Cualquier sugerencia será muy apreciada.
Gracias por adelantado.

También estoy tratando de hacer la misma maniobra, es decir, publicar el mensaje mavros_msgs :: GlobalPositionTarget en el tema mavros / setpoint_raw / global y funciona bien. El dron despega y se dirige al waypoint deseado. Quería preguntar si alguien ha navegado con éxito el dron a múltiples puntos de ruta y si necesitamos una lógica para verificar si se alcanzó el punto de ruta.
La razón por la que pregunto esto es que no estoy seguro de cómo la glorieta establece su posición de inicio, por lo que cuando el dron va a cualquier lat lon alt aleatorio provisto, va a ese waypoint indefinidamente. ¿Hay alguna forma de comprobar si se alcanza ese punto de ruta y luego proporcionar otro punto de ruta?
Cualquier sugerencia será muy apreciada.
Gracias por adelantado.

Simplemente siga publicando puntos de ajuste de posición global hasta que el dron esté dentro de una región aceptable, como ~ 50 cm en el plano xy y 10 cm en el eje z. Luego, publique otro punto.

No lo seguí del todo. ¿Podría enviarme un código de muestra simple para que pueda tener una idea? Probé un par de cosas pero no funcionaron. Eje Z 10 cm om?
Gracias.

No lo seguí del todo. ¿Podría enviarme un código de muestra simple para que pueda tener una idea? Probé un par de cosas pero no funcionaron. Eje Z 10 cm om?
Gracias.

Lo escribí solo para darte una idea. Suscríbase a la posición global, convierta a coordenadas cartesianas o simplemente tenga un umbral en grados lat / lon alrededor de 1e-6 de modo que la diferencia entre el dron y el punto deseado sea menor que un umbral. Debe tratar la altitud de manera diferente, porque su valor no está en grados sino en metros. Si el dron está dentro de una caja, se alcanzó el punto de referencia.

Actualmente, estoy usando sensor_msgs :: NavSatFix para obtener la posición del dron. Cuando dices suscríbete a la posición global, ¿estás hablando de este suscriptor?
Además, sería realmente útil si pudiera explicar un poco cómo crear un umbral en grados lat / lon alrededor de 0.000001 y cómo verificar si el dron está dentro de la caja.
Si ya lo ha implementado, ¿podría compartir un pequeño fragmento de la lógica que está mencionando? Eso facilitaría mucho las cosas.
Muchas gracias.

Hola a todos,
Si alguien ha resuelto la navegación de un dron con múltiples puntos de referencia en el marco global, podría echar un vistazo a [ https://github.com/mavlink/mavros/issues/1553 } y ayudarme con el problema. He intentado implementarlo durante algunas semanas, pero no he podido llegar a una solución. Solo quiero navegar por el dron usando lat lon alt en múltiples waypoints.
Gracias por adelantado.

¿Fue útil esta página
0 / 5 - 0 calificaciones