Mavros: mengekspos bitfield local_position_setpoint

Dibuat pada 17 Okt 2015  ·  21Komentar  ·  Sumber: mavlink/mavros

Ini untuk membahas implementasi yang disarankan yang diusulkan di https://github.com/PX4/Firmware/pull/3004#issuecomment -148916149

Plugin setpoint posisi/kecepatan/percepatan saat ini secara internal mengatur bitfield dari fungsi set_position_target_local_ned. Karena pixhawk memungkinkan kontrol individual pengontrol horizontal dan vertikal (misalnya menggunakan pengontrol kecepatan untuk XY dan pengontrol posisi untuk Z, untuk menahan ketinggian), mengekspos bitfield memungkinkan lebih banyak kasus penggunaan.

Kesulitan yang saya lihat adalah bahwa ini akan memerlukan pesan ROS khusus (mungkin, yang menggabungkan geometri_msgs/Accel, geometri_msgs/Twist dan geometri_msgs/Pose) yang tidak standar. Jika ini dilakukan, saya akan bertujuan untuk menjaga agar topik Accel/Twist/Pose individu standar dapat digunakan.

Ini bahkan skenario yang sangat umum. Sebenarnya, saya hanya akan senang dengan, misalnya, memperluas plugin setpoint kecepatan untuk memungkinkan menahan XY atau Z sambil mengontrol yang lain melalui kecepatan (mis. kontrol untuk sumbu itu). Saya tidak bisa memikirkan kasus penggunaan lain. Siapa pun?

feature request plugin

Komentar yang paling membantu

Apakah masalah ini masih dilacak? Saya tertarik untuk mengontrol Vx, Vy dan Pz. Namun, saya tidak yakin apakah itu diterapkan sepenuhnya, atau tidak? Juga bagaimana cara menggunakan topik ini? Maksud saya bagaimana mengatur type_mask untuk menunjukkan vx, vy, pz?

Jika vx, vy, pz, tidak diimplementasikan di sisi FCU (PX4), maka solusinya adalah masuk ke mode Altitude, dan kontrol RC_IN untuk roll pitch untuk mengontrol kecepatan horizontal.

Semua 21 komentar

Saya masih tidak melihat masalah dengan pesan khusus. Ini adalah antarmuka "khusus", dan ROS tidak mendukungnya. Topik lama akan tetap sama. Jika ada yang ingin menggunakan bitmask, beralih ke topik/pesan yang berbeda itu mudah.
Tetapi seperti yang disarankan @vooon, kita harus melihat filter pesan: http://wiki.ros.org/message_filters

Apa yang Anda lebih baik: mengekspos jenis topeng atau banyak pada bidang bool abaikan?

Untuk saat ini saya membuka topeng tipe + mengabaikan konstanta.

Satu hal yang saya tidak suka di bools - mereka dikodekan ke dalam byte. Tapi lebih bersahabat dengan manusia...

Mengapa bilangan bulat 16 bit tidak sama dengan konstanta? Itu sepele untuk "|"
konstanta, dan ini dapat didefinisikan sebagai bagian dari pesan ros.

Untuk memperjelas, tidak ada yang seperti ini sekarang, bukan? Maksudku,
haruskah saya mengusulkan plugin baru untuk ini?

Pada hari Rabu, 21 Okt 2015 jam 12:43 PM, Vladimir Ermakov < [email protected]

menulis:

Untuk saat ini saya membuka topeng tipe + mengabaikan konstanta.

Satu hal yang saya tidak suka di bools - mereka dikodekan ke dalam byte. Tapi itu
lebih bersahabat dengan manusia...


Balas email ini secara langsung atau lihat di GitHub
https://github.com/mavlink/mavros/issues/402#issuecomment -149937951.

@v01d Saya pikir @vooon sudah ada di sana, lihat 37d2507c7573a69a0f7056497f756a8f4ab481fe

Selain itu, pesan tersebut dapat memublikasikan kembali pesan POSITION_TARGET_LOCAL_NED.

Untuk saat ini saya pikir type_mask memerlukan lebih sedikit kode di pihak saya :) dan lebih sedikit untuk didokumentasikan.

Oke!

Pada hari Rabu, 21 Okt 2015 jam 14:15, Andreas Daniel Antener <
[email protected]> menulis:

@v01d https://github.com/v01d Saya pikir @vooon https://github.com/vooon
sudah ada di sana, lihat 37d2507
https://github.com/mavlink/mavros/commit/37d2507c7573a69a0f7056497f756a8f4ab481fe


Balas email ini secara langsung atau lihat di GitHub
https://github.com/mavlink/mavros/issues/402#issuecomment -149966297.

Hal berikutnya: mungkin lebih baik membuat plugin baru (alasannya sama dengan setpoint_position/velocity).
Tapi saya tidak bisa membayangkan nama yang bagus :)

setpoint_campuran?

Pada hari Rabu, 21 Okt 2015 jam 15:10, Vladimir Ermakov [email protected]
menulis:

Hal berikutnya: mungkin lebih baik untuk membuat plugin baru (alasannya sama dengan untuk
setpoint_position/kecepatan).
Tapi saya tidak bisa membayangkan nama yang bagus :)


Balas email ini secara langsung atau lihat di GitHub
https://github.com/mavlink/mavros/issues/402#issuecomment -149981060.

Tidak, campur apa? posisi + sikap? Tidak, jadi perlu nama lain. setpoint_combined - digabungkan apa?
setpoint_position_target - sedikit terlalu panjang.

setpoint_multi? setpoint_custom? setpoint_mask? setpoint_cartesian?
setpoint_linear?

=)

pd: http://imgs.xkcd.com/comics/permanence.png

Pada Kamis, 22 Okt 2015 pukul 18.53, Vladimir Ermakov [email protected]
menulis:

Tidak, campur apa? posisi + sikap? Tidak, jadi perlu nama lain.
setpoint_combined - digabungkan apa?
setpoint_position_target - sedikit terlalu panjang.


Balas email ini secara langsung atau lihat di GitHub
https://github.com/mavlink/mavros/issues/402#issuecomment -150366905.

Hm, setpoint_raw !

@v01d , @AndreasAntener selesai, tetapi belum diuji.

Terima kasih banyak, saya harap saya bisa menguji ini segera.

Diperiksa dengan PX4 SITL. Saya hanya melihat loopback, tetapi penangan topik terlalu sederhana untuk bug :).

@vooon Baru saja melakukan tes menggunakan setpoint posisi dengan type_mask dan berfungsi dengan baik :) Terima kasih lagi.

Rupanya, mengekspos bitfield tidak membuat sedikit perbedaan pada mavlink_receiver.cpp. Saya mencoba menggunakan setpoint_raw untuk mengontrol Vx, Vz, dan Pz, tetapi tidak responsif. Berikut ini tampaknya menjadi alasan untuk itu:

Jika APAPUN bit pengabaian diatur untuk posisi, kecepatan, atau percepatan, bool pengabaian diatur dan keseluruhan posisi, kecepatan, atau bagian akselerasi diabaikan. Itu belum memungkinkan memilih dan memilih. Lihat dua fragmen kode di bawah yang terdapat dalam fungsi MavlinkReceiver::handle_message_set_position_target_local_ned.

/* convert mavlink type (local, NED) to uORB offboard control struct */
        offboard_control_mode.ignore_position = (bool)(set_position_target_local_ned.type_mask & 0x7);
        offboard_control_mode.ignore_velocity = (bool)(set_position_target_local_ned.type_mask & 0x38);
        offboard_control_mode.ignore_acceleration_force = (bool)(set_position_target_local_ned.type_mask & 0x1C0);
        bool is_force_sp = (bool)(set_position_target_local_ned.type_mask & (1 << 9));
        /* yaw ignore flag mapps to ignore_attitude */
        offboard_control_mode.ignore_attitude = (bool)(set_position_target_local_ned.type_mask & 0x400);
        /* yawrate ignore flag mapps to ignore_bodyrate */
        offboard_control_mode.ignore_bodyrate = (bool)(set_position_target_local_ned.type_mask & 0x800);

Beberapa baris lebih jauh ke bawah ...

/* set the local pos values */
if (!offboard_control_mode.ignore_position) {
    pos_sp_triplet.current.position_valid = true;
    pos_sp_triplet.current.x = set_position_target_local_ned.x;
    pos_sp_triplet.current.y = set_position_target_local_ned.y;
    pos_sp_triplet.current.z = set_position_target_local_ned.z;
} else {
    pos_sp_triplet.current.position_valid = false;
}

/* set the local vel values */
if (!offboard_control_mode.ignore_velocity) {
    pos_sp_triplet.current.velocity_valid = true;
    pos_sp_triplet.current.vx = set_position_target_local_ned.vx;
    pos_sp_triplet.current.vy = set_position_target_local_ned.vy;
    pos_sp_triplet.current.vz = set_position_target_local_ned.vz;
} else {
    pos_sp_triplet.current.velocity_valid = false;
}

/* set the local acceleration values if the setpoint type is 'local pos' and none
     * of the accelerations fields is set to 'ignore' */
if (!offboard_control_mode.ignore_acceleration_force) {
    pos_sp_triplet.current.acceleration_valid = true;
    pos_sp_triplet.current.a_x = set_position_target_local_ned.afx;
    pos_sp_triplet.current.a_y = set_position_target_local_ned.afy;
    pos_sp_triplet.current.a_z = set_position_target_local_ned.afz;
    pos_sp_triplet.current.acceleration_is_force =
    is_force_sp;

} else {
    pos_sp_triplet.current.acceleration_valid = false;
}

@locustcox ya, dan APM misalnya hanya menginginkan satu kombinasi khusus untuk sikap sp.

pada masalah yang berbeda, saya akhirnya menggabungkan https://github.com/PX4/Firmware/pull/3405 ke PX4. Tidak menyelesaikan masalah Anda @locustcox

Apakah masalah ini masih dilacak? Saya tertarik untuk mengontrol Vx, Vy dan Pz. Namun, saya tidak yakin apakah itu diterapkan sepenuhnya, atau tidak? Juga bagaimana cara menggunakan topik ini? Maksud saya bagaimana mengatur type_mask untuk menunjukkan vx, vy, pz?

Jika vx, vy, pz, tidak diimplementasikan di sisi FCU (PX4), maka solusinya adalah masuk ke mode Altitude, dan kontrol RC_IN untuk roll pitch untuk mengontrol kecepatan horizontal.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat