Mavros: Contoh kontrol offboard setpoint_position/global tidak mempersenjatai

Dibuat pada 21 Des 2017  ·  38Komentar  ·  Sumber: mavlink/mavros

Detail masalah

Saya mencoba mereplikasi contoh kontrol offboard (yang berfungsi dengan baik di gazebo) tetapi mengirim koordinat global alih-alih x,y,z lokal.
Saya tidak dapat melakukannya, drone memasuki loop "Offboard Enabled" tetapi tidak pernah masuk ke Vehicle Armed atau bergerak sama sekali.

Ini adalah kode yang saya gunakan:

#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 dan platform MAVROS

Mavros: 0,22
ROS: Kinetik
Ubuntu: 16.04

Jenis dan versi autopilot

[ ] ArduPilot
[X] PX4

Versi: 1.72

Log simpul

[ 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

Diagnostik

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"

Periksa 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

Komentar yang paling membantu

Pertama, while(ros::ok() && current_state.connected){ harus while(ros::ok() && !current_state.connected){ .
Juga - https://github.com/mavlink/mavros/blob/master/mavros/src/plugins/setpoint_position.cpp#L69 - pastikan Anda mendapatkan data dari topik global_position/global .

Semua 38 komentar

Pertama, while(ros::ok() && current_state.connected){ harus while(ros::ok() && !current_state.connected){ .
Juga - https://github.com/mavlink/mavros/blob/master/mavros/src/plugins/setpoint_position.cpp#L69 - pastikan Anda mendapatkan data dari topik global_position/global .

Saya mengoreksi perulangan while dengan !
rostopic echo global_position/global mengembalikan output yang benar:

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

Namun, itu masih tidak berfungsi. ketika saya menjalankan kode itu selesai tanpa mempersenjatai atau mengaktifkan offboard.
Satu-satunya peringatan yang dihasilkannya adalah:

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

Saya harus menerjemahkan dari global ke lokal dan kemudian mengirim mavros/setpoint_position/local jika tidak maka tidak akan berfungsi.
Saya ingin tahu, apakah hanya saya yang mengalami masalah ini? Apakah seseorang dapat mereproduksi contoh pesawat di luar pesawat hanya dengan menerbitkan di mavros/setpoint_position/global?

@mzahana dapatkah Anda membimbing @danividanivi tentang masalah di atas? Terima kasih

Saya hanya ingin menyebutkan bahwa saya juga mengalami masalah ini. Saya dapat mengonfirmasi bahwa saya menerbitkan ke topik yang benar, tetapi MAVROS tampaknya tidak dapat menerjemahkannya ke dalam pesan setpoint MAVLINK yang benar untuk PX4. Saya memeriksa menggunakan QGroundcontrol dan hanya dapat melihat pesan setpoint yang dipublikasikan di PX4 saat menggunakan lokal.

@mzahana dapatkah Anda menguji ulang implementasi Anda dan memastikannya berfungsi? Terima kasih

@eric1221bday pertanyaan singkat: apakah Anda mendapatkan data GPS di MAVROS? Juga apa yang Anda maksud dengan:

tetapi MAVROS tampaknya tidak dapat menerjemahkannya ke dalam pesan setpoint MAVLINK yang benar untuk PX4

Ini terdengar agak kabur dan kami tidak dapat men-debug masalah apa pun dengan informasi seperti ini.

Saya menggunakan SITL, dan ya, simulasi GPS diaktifkan dan saya dapat melihat topik dalam ROS. Adapun hal mavlink. Maksud saya hanyalah sepertinya setpoint global tidak dikirim ke px4 dengan benar, karena saya tidak dapat melihatnya menggunakan Mavlink Inspector.

Ini tidak seharusnya mempublikasikan setpoint posisi global, melainkan mengonversi dari global ke lokal dan mempublikasikan sebagai setpoint posisi lokal. Jadi Anda sebenarnya tidak pernah melihat setpoint global.

Saya dapat menyimpulkan bahwa ya, dan saya juga tidak dapat melihat setpoint lokal baik dari PX4.

Yah itu tergantung pada bagaimana simpul Anda diatur dan apa yang Anda publikasikan atau tidak ke MAVROS. Ini tidak dapat di-debug tanpa info lebih lanjut.

@eric1221bday ada lagi yang bisa ditambahkan atau bisakah kita menutup ini?

Saya akan menguji ulang ini di pihak saya dan kembali kepada Anda.

Adakah peningkatan? Saya mengalami masalah yang sama dan sepertinya tidak dapat menemukan solusi.

Pastikan Anda mengatur bidang header.stamp. Hanya kemudian bekerja!

Selamat sore! Adakah yang bisa mengkonfirmasi bahwa penerbitan ke topik /mavros/setpoint_position/global mereka telah berhasil mengontrol posisi drone? Saya mengalami masalah yang sama (tidak ada respons yang diperoleh, px4 sepertinya tidak menerima pesan apa pun) bahkan mengatur bidang header.stamp

Ya, itu bekerja untuk saya!

Sama di sini... (tidak bekerja untuk saya)

@tropappar apakah Anda keberatan berbagi beberapa contoh kode. Saya menjalankan skrip yang mirip dengan yang ada di atas, namun pada rqt_graph saya tidak melihat topik apa pun yang diterbitkan dari simpul saya meskipun berhasil diterbitkan.

Ini dia:

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

Selamat sore! Adakah yang bisa mengkonfirmasi bahwa penerbitan ke topik /mavros/setpoint_position/global mereka telah berhasil mengontrol posisi drone? Saya mengalami masalah yang sama (tidak ada respons yang diperoleh, px4 sepertinya tidak menerima pesan apa pun) bahkan mengatur bidang header.stamp

saya juga, tetapi topik /mavros/setpoint_raw/global telah bekerja dengan normal.

hai zxz0622,
Saya telah mengerjakan /mavros/setpoint_raw/global selama sekitar 4 hari tetapi saya tidak dapat memindahkan quadcopter dengan memberikan nilai ketinggian lintang bujur. Bisakah Anda memberi tahu saya bagaimana Anda melakukannya?
Bisakah Anda membagikan parameter /mavros/setpoint_raw/global ? ( koordinat_bingkai ...)

Maaf untuk menggali utas lama, tetapi saya mencoba melakukan hal yang sama. Saya tidak dapat mengontrol kendaraan dengan mengirimkan setpoint posisi di _mavros/setpoint_position/global_. Lengan kendaraan, duduk di tanah memutar rotor dan melucuti senjata setelah batas waktu. Saya dapat mengonfirmasi bahwa rostopic echo /mavros/setpoint_position/global menunjukkan bahwa setpoint dari kode saya sedang dipublikasikan. Saya juga dapat mengonfirmasi bahwa mengirim setpoint koordinat lokal pada _mavros/setpoint_position/global_ berfungsi dengan baik.
Apakah saya harus mengatur bidang lain selain lat, lon, dan lat?

Versi dan platform MAVROS

Mavros: master
ROS: Melodi
Ubuntu: 18.04
Jenis dan versi autopilot

[ ] ArduPilot
[X] PX4

Versi: master

Diagnostik
contoh gema 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
Hanya ingin tahu, apakah bidang frame_id memainkan peran apa pun? Saya mencoba dengan _local_Origin_ juga, tanpa efek.

Terima kasih.

Pastikan Anda mempublikasikan titik yang berada di atas ketinggian drone. Ini mungkin tampak sebagai saran yang konyol, tetapi mungkin saja seseorang dapat melupakan bahwa ketinggian GPS dapat berada jauh di atas ketinggian lokal.

@swaroophangal Saya juga berjuang untuk memecahkan masalah yang sama dengan Anda dengan menggunakan kode yang diberikan oleh @tropappar di atas.
Artinya, dengan mengirimkan posisi setpoint melalui "mavros/setpoint_position/global," kendaraan berhasil masuk ke offboard dan bahkan lengan tetapi duduk di tanah.
Saya mencoba mengirim setpoint posisi "mavros/setpoint_raw/global" juga, tetapi juga gagal dengan fenomena yang sama (yaitu, kendaraan berhasil masuk ke offboard dan bahkan lengan tetapi duduk di tanah.)

@burak-yildizoz Juga, saya memeriksa ulang bahwa titik yang dipublikasikan berada di atas ketinggian GPS drone (kode yang diberikan oleh @tropappar di atas menyelesaikan ini dengan menggunakan "goal_position.altitude = goal_position.altitude + 5.0;"). Secara khusus, saya bermain-main dengan "+5" dengan nilai-nilai lain tetapi berakhir tanpa hasil.

Bisakah seseorang membantu?
Terima kasih!

--
Versi dan platform MAVROS

Mavros: master
ROS: Kinetik
Ubuntu: 16.04
Jenis dan versi autopilot

[ ] ArduPilot
[X] PX4

Versi: master

Diagnostik
contoh rostopic echo /mavros/global_position/global:
kepala:
seq: 206
stempel:
detik: 1286
nsecs: 28000000
frame_id: "tautan_dasar"
status:
status: 0
layanan: 1
garis lintang: 47.3977421
garis bujur: 8.5455932
ketinggian: 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 Anda perlu memeriksa apakah fmu Anda menerima setpoint mavlink yang Anda kirim.

@Jaeyoung-Lim Halo, terima kasih banyak atas semua upaya Anda untuk komunitas Pixhawk dan juga respons cepatnya.

Saya mengalami masalah yang disebutkan sebelumnya ketika saya sedang mengerjakan konversi proyek "modudculab_ros" Anda yang diterbitkan sebelumnya ( tautan ) yang dibangun untuk kontrol offboard lokal ke salah satu kontrol offboard global.

Mengenai komentar Anda, "Anda perlu memeriksa apakah fmu Anda menerima setpoint mavlink yang Anda kirim," saya memeriksa parameter, "POSITION_TARGET_GLOBAL_INT (link) ," melalui QGC dan memperhatikan bahwa tidak ada setpoint mavlink yang diterima oleh fmu seperti yang Anda nyatakan seperti yang ditunjukkan pada gambar di bawah yang diambil dari layar QGC.

QGC

Selain itu, saya melampirkan output roslaunch modudculab_ros ctrl_pos_gazebo_offb.launch di bawah ini.

` sunghunjung2@gcs :~$ roslaunch modudculab_ros ctrl_pos_gazebo_offb.launch
... masuk ke /home/sunghunjung2/.ros/log/c7421548-ea08-11ea-8a18-b052161d0343/roslaunch-gcs-16794.log
Memeriksa direktori log untuk penggunaan disk. Ini mungkin memakan waktu cukup lama.
Tekan Ctrl-C untuk menyela
Selesai memeriksa penggunaan disk file log. Penggunaan <1GB.

memulai server roslaunch http:// gcs :35869/

RINGKASAN

PARAMETER

  • /mavros/conn_heartbeat: 5.0
  • /mavros/conn_timeout: 5.0
  • /mavros/fcu_url: udp://:14540@127....
  • /mavros/frame_id: dunia
  • /mavros/gcs_url:
  • /mavros/mocap/use_pose: Salah
  • /mavros/mocap/use_tf: Benar
  • /mavros/startup_px4_usb_quirk: Benar
  • /mavros/target_component_id: 1
  • /mavros/target_system_id: 1
  • /rosdistro: kinetik
  • /rosversion: 1.12.15

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

ROS_MASTER_URI= http://localhost :11311

proses[mavros-1]: dimulai dengan pid [16811]
proses[offb_node-2]: dimulai dengan pid [16812]
`

--
Mengenai masalah ini, saya menduga dua bagian berikut.

TERGUGAT 1 :
Saya menduga masalah ini terkait dengan versi MAVROS yang diinstal di desktop saya.
Saya menginstal ros-kinetic-mavros* menggunakan perintah apt dan juga menyimpan paket mavros git terbaru di folder catkin_ws/src.

TERGUGAT 2 :
Ketika saya menggunakan

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

Saya menerima pesan kesalahan berikut:

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

Dan kemudian, saya menggantinya dengan

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

dan itu tidak menghasilkan pesan kesalahan apa pun. Namun, dengan cara apa pun, parameter, "POSITION_TARGET_GLOBAL_INT" tidak muncul di inspektur mavlink QGC.

Sekali lagi, terima kasih banyak atas waktu Anda yang sangat berharga untuk meninjau masalah ini.

Saya tidak dapat menyelesaikan masalah di atas, jadi saya mengubah menggunakan mavros_msgs untuk menarik titik jalan dari QGC, memasukkan sudut yaw yang dihitung secara eksternal, dan mendorong titik jalan gabungan (titik jalan yang ditarik dari QGC dengan sudut yaw yang dihitung secara eksternal).

Dengan cara ini, saya berhasil mengontrol MAV seperti yang saya inginkan. Terima kasih banyak.

@ jungx148 Itu bukan solusi dan hanya solusi.

Sudahkah Anda memeriksa apakah setpoint yang Anda kirim mencapai fmu?

@jungx148 Mungkinkah masalah Anda terkait dengan #1414?

Apakah ada yang mencapai kesimpulan belum??

Saya mencoba memublikasikan 3 topik ini tetapi tidak berhasil

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

NB: Saya melakukan simulasi gazebo saja

Yah saya baru-baru ini menemukan kesalahan ini:

Nah topik /mavros/setpoint_position/global akhirnya berhasil (tetapi dengan offset ketinggian?). Dari rostopic info /mavros/setpoint_position/global Saya menemukan bahwa jenis pesan yang harus saya gunakan adalah mavros_msgs/GlobalPositionTarget Saya tidak tahu mengapa dokumentasi tidak diperbarui.

Saya juga mencoba melakukan manuver yang sama yaitu mempublikasikan pesan mavros_msgs::GlobalPositionTarget pada topik mavros/setpoint_raw/global dan berfungsi dengan baik. Drone lepas landas dan pergi ke titik arah yang diinginkan. Saya ingin bertanya apakah ada yang berhasil menavigasi drone ke beberapa titik jalan dan apakah kami memerlukan logika untuk memeriksa apakah titik jalan tercapai?
Alasan saya menanyakan hal ini adalah karena saya tidak yakin bagaimana gazebo mengatur posisi asalnya, jadi ketika drone pergi ke alt lat lon acak yang disediakan, ia pergi ke titik arah itu tanpa batas. Apakah ada cara untuk memeriksa apakah titik jalan itu tercapai dan kemudian memberikan titik jalan lain?
Setiap saran akan sangat dihargai.
Terima kasih sebelumnya.

Saya juga mencoba melakukan manuver yang sama yaitu mempublikasikan pesan mavros_msgs::GlobalPositionTarget pada topik mavros/setpoint_raw/global dan berfungsi dengan baik. Drone lepas landas dan pergi ke titik arah yang diinginkan. Saya ingin bertanya apakah ada yang berhasil menavigasi drone ke beberapa titik jalan dan apakah kami memerlukan logika untuk memeriksa apakah titik jalan tercapai?
Alasan saya menanyakan hal ini adalah karena saya tidak yakin bagaimana gazebo mengatur posisi asalnya, jadi ketika drone pergi ke alt lat lon acak yang disediakan, ia pergi ke titik arah itu tanpa batas. Apakah ada cara untuk memeriksa apakah titik jalan itu tercapai dan kemudian memberikan titik jalan lain?
Setiap saran akan sangat dihargai.
Terima kasih sebelumnya.

Tetap publikasikan setpoint posisi global hingga drone berada di dalam wilayah yang dapat diterima, seperti ~50 cm pada bidang xy dan 10 cm pada sumbu z. Kemudian, publikasikan poin lain.

Tidak cukup mengikuti. Bisakah Anda mengirim contoh kode sederhana sehingga saya bisa mendapatkan ide? Saya mencoba beberapa hal tetapi itu tidak berhasil. Sumbu Z 10cm atau m?
Terima kasih.

Tidak cukup mengikuti. Bisakah Anda mengirim contoh kode sederhana sehingga saya bisa mendapatkan ide? Saya mencoba beberapa hal tetapi itu tidak berhasil. Sumbu Z 10cm atau m?
Terima kasih.

Saya menulisnya hanya untuk memberi Anda ide. Berlangganan ke posisi global, baik mengonversi ke koordinat kartesius atau hanya sekadar memiliki ambang dalam derajat lintang/bujur sekitar 1e-6 sehingga perbedaan antara drone dan titik yang diinginkan lebih rendah dari ambang batas. Anda perlu memperlakukan ketinggian secara berbeda, karena nilainya bukan dalam derajat tetapi dalam meter. Jika drone berada di dalam kotak, titik jalan tercapai.

Saat ini, saya menggunakan sensor_msgs::NavSatFix untuk mendapatkan posisi drone. Ketika Anda mengatakan, berlangganan posisi global, apakah Anda berbicara tentang pelanggan ini?
Juga, akan sangat membantu jika Anda dapat menguraikan sedikit tentang cara membuat ambang dalam derajat lintang/bujur sekitar 0,000001 dan bagaimana cara memeriksa apakah drone ada di dalam kotak?
Jika Anda sudah menerapkannya, dapatkah Anda membagikan sedikit cuplikan logika yang Anda sebutkan? Itu akan membuat segalanya jauh lebih mudah.
Terima kasih banyak.

Halo semuanya,
Jika ada yang telah memecahkan navigasi drone dengan banyak titik arah dalam bingkai global, dapatkah Anda melihat [ https://github.com/mavlink/mavros/issues/1553 } dan bantu saya dengan masalah ini. Saya telah mencoba menerapkannya selama beberapa minggu tetapi tidak dapat menemukan solusi. Saya hanya ingin menavigasi drone menggunakan lat lon alt ke beberapa titik arah.
Terima kasih sebelumnya.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat