Mavros: Teleoperasi joystick

Dibuat pada 25 Agu 2014  ·  72Komentar  ·  Sumber: mavlink/mavros

Dalam terikat. Akan membutuhkan bantuan di bagian RC override.

extras feature request

Komentar yang paling membantu

@vooon melakukan tes sekarang. Peta sumbu saya berbeda, itu mudah diubah, tetapi saya melihat bahwa beberapa saluran terbalik. Anda juga harus menambahkan parameter untuk membalikkan saluran, tanpa harus pergi ke mode kontrol dan melakukan sesuatu seperti z=-yaw .

Catatan: dalam kasus saya, peta sumbu saya adalah:

axes_map = {
    'roll': 3,
    'pitch': 2,
    'yaw': 0,
    'throttle': 1
}

dan dalam mode kontrol vel:

twist.twist.linear = Vector3(x=-roll, y=pitch, z=throttle)
twist.twist.angular = Vector3(z=-yaw)

Semua 72 komentar

Saya pikir lebih baik bukan plugin, tetapi node skrip yang menggunakan plugin rc_io.

Apakah itu termasuk hal-hal setpoint?

Saya tidak terlalu terbiasa dengan skrip seperti yang Anda lihat, saya lebih suka plugin. Tapi saya bisa mengirimkan ini sebagai plugin dan kemudian Anda bisa mengubahnya menjadi skrip jika Anda mau.

Hanya saja saya tidak ingin kode duplikat yang sudah ada (dan berfungsi).

Saya pikir node ini harus berlangganan topik joystick dan menghasilkan pesan rc override (atau setpoint).
Kirimkan saya data apa yang harus saya kirim ke rc/setpoint dan saya menulis skrip (peta saluran dll).

Oke saya akan segera melakukannya

@vooon mengirimi Anda email sekarang ;)

Oke, saya akan melihatnya besok.

Tentu :+1: Terima kasih!

Saya dapat menambahkan simpul serupa yang saya miliki untuk ini jika diperlukan. @TSC21

@tonybaltovski tolong kirimkan ke saya. Saya pikir itu contoh yang berguna, tapi mungkin itu harus di ekstra.

@tonybaltovski Saya sudah memulai sebuah plugin, yang saya kirimkan ke @vooon sehingga dapat mengadaptasi seperti yang dia inginkan. Itu hampir siap untuk kontrol setpoint, tetapi bagian RC override saya serahkan ke @vooon.

Ini statusnya apa? Saya benar-benar ingin menggunakannya untuk menguji setpoint juga :)

Mungkin besok...

@TSC21 Ini hanya bukti konsep, tetapi harus berfungsi.

Saya akan mencobanya, terima kasih! :) Tapi prioritas saya adalah menguji setpoint menggunakan joystick. Jika Anda dapat menambahkan kemungkinan kontrol posisi dan kecepatan, saya akan berterima kasih.

Untuk kecepatan, kirim cmd_vel sebagai TwistStamped untuk berlangganan setpoint_velocity ;

Kontrol posisi sederhana: alih-alih cmd_vel ia mengirim position sebagai PoseStamped tetapi ini harus menjadi kasus tertentu - ia harus menjumlahkan nilai posisi sebelumnya yang dikirim sehingga dapat menambah atau mengurangi posisi (jadi nilai x , y , z tidak terbatas pada -1..1; yang dibatasi adalah nilai yang ditambahkan nilai terakhir; jadi jika joystick selalu mengirim +1 , dalam setiap iterasi jumlahnya +1 -> satu-satunya keraguan yang saya miliki di sini adalah jika kita harus membatasi laju dalam kasus ini, jadi iterasi tidak menaikkan nilai dengan cepat).
Yang ini berlangganan setpoint_position .

Pembaruan: mengenai topik /joy : Saya tidak dapat mengambil data apa pun dari joystick saya menggunakan skrip mavteleop . Tetapi menggunakan peluncuran universal_teleop saya bisa. Jadi pasti ada yang kurang di scriptnya.

Anda menjalankan joy_node?

rosrun joy joy_node

2014-08-27 18:17 GMT+04:00 TSC21 [email protected] :

Pembaruan: mengenai topik /joy: Saya tidak dapat mengambil data apa pun dari
joystick saya menggunakan skrip mavteleop. Tetapi menggunakan universal_teleop
luncurkan aku bisa. Jadi pasti ada yang kurang di scriptnya.


Balas email ini secara langsung atau lihat di GitHub
https://github.com/vooon/mavros/issues/133#issuecomment -53578566.

Tidak! Ya itu bekerja sekarang. Lupa joy_node . Tidak bisakah itu dimasukkan pada skrip yang akan diluncurkan?

Ok sekarang tentang penggantian itu sendiri: echoing /mavros/rc/override tidak mendapatkan data apa pun karena Anda lupa awalan / sini:

override_pub = rospy.Publisher(args.mavros_ns + "/rc/override", OverrideRCIn, queue_size=10)

Perlu memperbaiki itu atau saya membuat PR.
Tapi tetap saja tidak ada RC overriding di FCU, karena motornya bahkan tidak mengubah kecepatannya. Akan terus memeriksa apa yang terjadi.

@vooon RC /rc/override , yang dilanggan oleh rc_io.cpp . Menggemakan /mavros/rc/override memberi saya perubahan nilai saluran tetapi tidak ada yang terjadi di sisi FCU (tidak ada perubahan putaran motor).

Prioritas saya bukanlah RC override, meskipun saya ingin mengaturnya. Tapi sepertinya saya tidak bisa menemukan apa masalahnya. Sementara itu, bisakah Anda menerapkan kecepatan setpoint dan kontrol posisi? (berdasarkan komentar di atas yang saya lakukan mengenai spesifikasi kontrol semacam ini)
Terima kasih!

Saya memiliki masalah yang sama dengan penggantian RC. FCU tidak menggunakannya.

@tonybaltovski dapatkah Anda mencoba men-debug alasannya? Saya sibuk dengan beberapa hal lain tentang POSCTL.

Ketika saya menguji override dengan APM saya menemukan, bahwa itu diam-diam turun jika pesan override berasal dari system_id != SYSID_MYGCS (default: 255).

Jadi saya mengubahnya menjadi 1 (default mavros) dan berfungsi. Atau kita bisa mengubah mavros system_id.

Jadi apa yang salah? system_id atau comp_id ? Apa yang dibutuhkan dalam kasus PX4?

Mungkin PX4 tidak menangani pesan RC override, saya tidak dapat menemukan handler untuk pesan MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE .

Mungkin PX4 tidak menangani pesan RC override, saya tidak dapat menemukan handler untuk pesan MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE .

Ya sepertinya tidak. Sayang sekali, saya pikir kita bisa meminta implementasi, tetapi saya lebih suka membuat setpoint berfungsi. Bisakah Anda membantu @vooon ?
Terima kasih sebelumnya!

@vooon Saya akan mencobanya lagi di APM saya besok dan memberi tahu Anda.

Saya akan mencoba melakukannya besok.

Terima kasih banyak @vooon!

@TSC21 Saya hampir selesai, tetapi kontrol posisi sangat kotor. Perlu mengulanginya untuk pengintegrasian waktu-konstan.

Terima kasih @vooon! :D setelah Anda selesai, tolong peringatkan saya! Saya akan senang untuk menguji ini!

Anda sudah dapat menguji semua mode kecuali -pos (dan mungkin -vel ).

@vooon melakukan tes sekarang. Peta sumbu saya berbeda, itu mudah diubah, tetapi saya melihat bahwa beberapa saluran terbalik. Anda juga harus menambahkan parameter untuk membalikkan saluran, tanpa harus pergi ke mode kontrol dan melakukan sesuatu seperti z=-yaw .

Catatan: dalam kasus saya, peta sumbu saya adalah:

axes_map = {
    'roll': 3,
    'pitch': 2,
    'yaw': 0,
    'throttle': 1
}

dan dalam mode kontrol vel:

twist.twist.linear = Vector3(x=-roll, y=pitch, z=throttle)
twist.twist.angular = Vector3(z=-yaw)

Gunakan parameter ~axes_scale/<name> untuk membalikkan (atur ke -1.0).

Oh ok, tidak memeriksa itu. Terima kasih!

Bisakah Anda mengintegrasikan rosrun joy joy_node pada peluncuran skrip alih-alih menambahkannya ke file launch ?

@vooon hal lain yang perlu bekerja: node harus selalu mengirimkan data, bahkan jika itu 0.0, yaitu misalnya, cmd_vel harus selalu menerbitkan bahkan jika kita tidak memindahkan swtiches pada joystick, karena mode OFFBOARD memiliki batas waktu 0,5 detik dan terus-menerus menerima data untuk tetap berada dalam mode itu atau sebaliknya ke mode sebelumnya!

Apa yang saya lihat adalah ketika kita menyetel saluran ke suatu nilai, cmd_vel hanya mengirimkan nilai itu sekali. Implementasi PX4 harus terus-menerus menerima data, jadi saya pikir apa yang bisa dilakukan adalah cmd_vel selalu mengirim nilai saluran sebelumnya, kecuali ketika menerima nilai baru. Nilai baru itu disimpan dan dikirim terus-menerus sampai nilai baru saluran disetel (tentu saja menggunakan stik analog).

Tambahkan ini ke file peluncuran Anda untuk joy node <param name="~autorepeat_rate" value="5" />

Terima kasih @tonybaltovski yang berhasil! Tetapi saya masih tidak dapat mengubah parameter menggunakan file peluncuran. Begini tampilan file peluncuran saya:

<launch>
    <!-- vim: ft=roslaunch -->
    <!-- example launch script for PX4 teleop -->

    <arg name="fcu_url" default="serial:///dev/ttyACM0:57600" />
    <arg name="gcs_url" default="" />
    <arg name="tgt_system" default="1" />
    <arg name="tgt_component" default="50" />

    <node pkg="mavros" type="mavros_node" name="mavros" required="true" clear_params="true" output="screen">
        <param name="fcu_url" value="$(arg fcu_url)" />
        <param name="gcs_url" value="$(arg gcs_url)" />
        <param name="target_system_id" value="$(arg tgt_system)" />
        <param name="target_component_id" value="$(arg tgt_component)" />

        <!-- px4 blacklist -->
        <rosparam command="load" file="$(find mavros)/launch/px4_blacklist.yaml" />

        <!-- enable heartbeat send and reduce timeout -->
        <param name="conn_heartbeat" value="5.0" />
        <param name="conn_timeout" value="10.0" />
        <!-- enable mavlink autostart on USB port -->
        <param name="startup_px4_usb_quirk" value="true" />

        <!-- joystick axis parameters -->

        <!-- joystick axis map -->
        <param name="~axes_map/roll" value="3" />
        <param name="~axes_map/pitch" value="2" />
        <param name="~axes_map/yaw" value="0" />
        <param name="~axes_map/throttle" value="1" />

        <!-- joystick axis scale -->
        <param name="~axes_scale/roll" value="-1.0" />
        <param name="~axes_scale/pitch" value="" />
        <param name="~axes_scale/yaw" value="-1.0" />
        <param name="~axes_scale/throttle" value="" />

    </node>

    <node pkg="joy" type="joy_node" name="joy" required="true">
        <param name="~/autorepeat_rate" value="50" />
    </node> 
</launch>

Mungkin karena ini adalah skrip mavros_extras ? Tetapi mengeluarkan rosparam list / Saya mendapatkan:

/joy/autorepeat_rate
/mavros/axes_map/pitch
/mavros/axes_map/roll
/mavros/axes_map/throttle
/mavros/axes_map/yaw
/mavros/axes_scale/pitch
/mavros/axes_scale/roll
/mavros/axes_scale/throttle
/mavros/axes_scale/yaw

Jadi saya tidak mengerti mengapa itu tidak mengubah param.

By the way @vooon , seharusnya axis dan bukan axes ;) Saya akan melakukan koreksi itu dan membuat PR jika Anda mau.

Pembaruan: Tuhan, ketidaktahuan saya. sumbu adalah jamak dari sumbu (jadi tidak apa-apa)

Pembaruan: jika saya melakukan rosparam get /mavros/axes_map/pitch Saya mendapatkan 2 seperti yang seharusnya, jadi saya pikir itu mungkin sesuatu di mavteleop .

Jika saya melakukannya sebagai gantinya:

load_map(axes_map, '/mavros/axes_map/')
load_map(axes_scale, '/mavros/axes_scale/')
load_map(button_map, '/mavros/button_map/')

pada rosrun mavteleop :

[ERROR] [WallTime: 1409327711.720875] bad callback: <function joy_cb at 0xa5ce9cc>
Traceback (most recent call last):
  File "/opt/ros/hydro/lib/python2.7/dist-packages/rospy/topics.py", line 682, in _invoke_callback
    cb(msg)
  File "/home/vision/vision_ros_ws/src/mavros/mavros_extras/scripts/mavteleop", line 187, in joy_cb
    pitch = get_axis(joy, 'pitch')
  File "/home/vision/vision_ros_ws/src/mavros/mavros_extras/scripts/mavteleop", line 92, in get_axis
    return j.axes[axes_map[n]] * axes_scale[n]
TypeError: can't multiply sequence by non-int of type 'float'

Oke masalahnya selesai! Inilah yang saya lakukan:
Pada file peluncuran saya punya:

<!-- joystick axis scale -->
        <param name="~axes_scale/roll" value="-1.0" />
        <param name="~axes_scale/pitch" value="" />
        <param name="~axes_scale/yaw" value="-1.0" />
        <param name="~axes_scale/throttle" value="" />

yang memberikan kesalahan urutan perkalian sebelumnya. diubah menjadi:

<!-- joystick axis scale -->
        <param name="~axes_scale/roll" value="-1.0" />
        <param name="~axes_scale/pitch" value="1.0" />
        <param name="~axes_scale/yaw" value="-1.0" />
        <param name="~axes_scale/throttle" value="1.0" />

Langganan diselesaikan dengan mengubah mavteleop dengan ini:

load_map(axes_map, '/mavros/axes_map/')
load_map(axes_scale, '/mavros/axes_scale/')
load_map(button_map, '/mavros/button_map/')

Akan melakukan PR segera.

PR selesai di #143.

Saya bingung bentuk jamak dari sumbu.

Anda menerapkan parameter ke simpul yang salah. Saya jelas melakukan skrip startup.

Anda menerapkan parameter ke simpul yang salah. Saya jelas melakukan skrip startup.

Ya sekarang saya mengerti! Terima kasih! Akan membatalkan PR kemudian.

Penggunaan:

  1. mulai koneksi FCU: roslaunch mavros px4.launch
  2. mulai operasi jarak jauh: roslaunch mavros_extras teleop.launch

Atau buat peluncuran Anda sendiri dengan <include file="..."> untuk kedua file.

Penggunaan:
mulai koneksi FCU: roslaunch mavros px4.launch
mulai operasi jarak jauh: roslaunch mavros_extras teleop.launch

Terima kasih! Akan mencoba kemudian!

Bekerja dengan baik sekarang :) hanya perlu mengubah yaml dan selesai (periksa 289fa6c - seharusnya roll bot poll ). Sekarang saya akan menguji ini di GCS HIL untuk melihat bagaimana kelanjutannya. Apa yang harus dilakukan pada bagian position @vooon?

Saya sedang mempersiapkan untuk penerbangan akhir pekan, jadi dalam todo..

Saya sedang mempersiapkan untuk penerbangan akhir pekan, jadi dalam todo..

Jika Anda menunjukkan myabe, saya dapat mencobanya

Saya akan memperbaiki kesalahan ketik.
Juga perlu menambahkan batas RC pemuatan dari params FCU.

Omong-omong, perhatikan bahwa PX4Firmware memiliki 500 garpu!

Omong-omong, perhatikan bahwa PX4Firmware memiliki 500 garpu!

:D Tidak mengherankan mengingat komunitas besar yang menggunakan proyek turunan Pixhawk dan PX4.

Hanya ingin mengomentari ini. Saya akan menulis sesuatu seperti ketika saya melihat masalah ini. Ini seperti komunitas membaca pikiran saya :D. Diuji, bekerja seperti pesona.

@pmukherj Bisakah Anda menguraikan langkah-langkah singkat tentang bagaimana Anda membuatnya bekerja pada sistem yang bersih. Saya akan memperluas, menguji, dan mengadaptasi untuk memasukkan ini ke dalam wiki.
Terima kasih.

@mhkabir Saya pikir tempat terbaik di wiki - halaman tutorial (saat ini tidak ada di ruang mavros).

@vooon maksud saya wiki PX4 :) Saya dapat menambahkan catatan ke README.

Tentu saja! Saya ingin memastikan bahwa saya tidak mengambil langkah yang berlebihan (memperbarui firmware ke versi dev mungkin tidak diperlukan, dll.). Saya akan menulis sesuatu hari ini.

@mhkabir Saya tidak bisa terbang hari ini karena cuaca buruk di Kanada, tetapi saat pengujian bangku saya perhatikan bahwa ketika perintah r,p,y yang tidak nol dikirim (menggunakan joystick) tidak ada perubahan yang terdengar pada tenaga motor. Saat saya mengontrol dorongan (melalui joystick f710), saya dapat mendengar motor mendengung ke atas dan ke bawah. Saat saya mengayunkan bodi quadrotor, saya bisa mendengar motor mendengung dan mencoba mengimbanginya. Namun, ketika saya memberikan perintah ar,p,y yang besar untuk menargetkan melalui perintah setpoint/attitude tidak ada kompensasi seperti itu yang terdengar. Apakah ada pesan umpan balik yang diterapkan sebagai bagian dari mavros, sesuatu yang mengakui perintah yang sedang dilaksanakan (mungkin kekuatan motor individu atau sesuatu?).
Saya ingin memastikan ini berfungsi sebelum saya mendokumentasikannya, dan lebih suka membuktikannya di bangku daripada melalui kecelakaan: P.

@pmukherj Bisa tolong IM saya di Gitter atau Hangouts ([email protected]). Mari kita berjalan dengan ini. Saya butuh info lebih lanjut tentang penyiapan Anda.
Ada pesan LOCAL_POSITION_TARGET_NED dan pesan ATTITUDE_TARGET yang tidak ada di mavros. Saya akan menambalnya sebagai bagian dari refactoring kode yang ingin kita lakukan untuk plugin setpoint. Juga untuk aliran target pengontrol ini, Anda perlu mengalirkannya secara eksplisit di sisi PX4.
Kontrol offboard bersifat eksperimental, dan plugin ini belum teruji, jadi saya belum yakin di mana ada yang salah. Saya membutuhkan lebih banyak data.

Maaf, Benar, saya sedang sibuk melakukan beberapa penerbangan DAQ.
Jadi, ATTITUDE_TARGET terdengar persis seperti yang saya butuhkan untuk memastikan pixhawk mencoba mencapai perintah joystick yang saya kirimkan. Saya memiliki 3DR, pixhawk dengan komputer yang lebih besar terpasang di pesawat (tumpukan px4 bekerja sangat baik btw, hanya kehilangan beberapa mode penerbangan).

Saya dapat memeriksanya atau apakah Anda memiliki garpu dengan implementasi ini?

@pmukherj Saya sedang mencari untuk mendapatkan target sikap dan posisi ke dalam plugin visualiser saya. Ada beberapa masalah, jadi saya menyelesaikannya.
Komputer pendamping onboard apa yang Anda gunakan?
Mengenai target, Anda tidak benar-benar perlu menerapkan apa pun. Cukup gunakan jembatan UDP yang kami miliki di mavros dan tambal tautan ke QGC di komputer pengembangan Anda. Anda dapat melihat dan merencanakan semuanya di sana.

Maaf! Pindah kantor di tahun baru.
Saya menguji dengan semua jenis komputer (odroid, TK1, dll.). Saya akan mencoba menggunakan jembatan UDP.
Saya kira saya dapat menggunakan salah satu koneksi telemetri ke pixhawk? Selain komputer pendamping, saya juga memiliki koneksi nirkabel ke salah satu port telemetri (seperti standar dengan 3DR pixhawk).

Ya. Diverifikasi bahwa setpoint benar-benar berfungsi! Setpoint internal menerimanya, dan output pengontrol juga terlihat. Sekarang untuk tes penerbangan :). Doakan saya.

@pmukherj Anda dapat menghubungkan pendamping ke port TELEM2 Anda dan memulainya melalui extras.txt di kartu microSD Anda.
Bagus bahwa setpoint berfungsi. Semoga sukses dengan penerbangannya.
Silakan periksa: http://www.pixhawk.org/dev/ros/mavros_offboard
Di bagian bawah ada baris kode kosong, di mana Anda harus menambahkan perintah mavros yang Anda gunakan untuk mengubah ke mode offboard (sebagai opsi untuk orang-orang jika mereka mau)

Juga, bisakah Anda menambahkan pesanan untuk pengujian penerbangan di sini: http://www.pixhawk.org/dev/offboard_control/testing

Masukkan saja poinnya, dan saya akan membersihkannya.

@vooon Plugin joystick berfungsi dengan baik, tetapi macet terlalu parah jika salah satu sumbu tidak ditemukan atau di luar jangkauan, dll.

Kami dapat menambahkan batasan min/maks.

Perhatikan bahwa itu bukan plugin, node.js.

Benar ;)
Saya pikir saya akan melakukannya sebagai plugin, karena skrip/python tampaknya agak membingungkan + tidak dapat diandalkan.

Saya tidak ingin plugin karena itu menciptakan kembali roda. Penulisan ulang maksimum dari python ke C++.
Tapi benar-benar tidak diperlukan ketika mavteleop berjalan di desctop dan mengontrol mavros OBC.

@vooon apakah Anda sudah memikirkan cara untuk menyelesaikan ini ?

Apakah halaman ini membantu?
0 / 5 - 0 peringkat