Saya mencoba meningkatkan kecepatan pembaruan IMU menggunakan panggilan layanan ~set_stream_rate. Saya mencoba menaikkan dan menurunkan tarif juga, sayangnya tidak berhasil.
Saya telah mencoba yang berikut ini:
Di terminal: rosservice call /mavros/set_stream_rate 1 200 1
(juga mencobanya dengan 0 200 1, 0 10 1, 0 10 0 dll.)
Dalam C++:
#include <mavros_msgs/StreamRate.h>
ros::ServiceClient stream_rate_client;
ros::NodeHandle nh;
stream_rate_client = nh.serviceClient<mavros_msgs::StreamRate>("/mavros/set_stream_rate");
mavros_msgs::StreamRate streamRate;
streamRate.request.stream_id = 1;
streamRate.request.message_rate = 200;
streamRate.request.on_off = true;
stream_rate_client.call(streamRate);
Tak satu pun dari ini berhasil, tidak tahu mengapa. Saya juga tidak tahu bagaimana melanjutkan dengan debugging.
Mavros: 0.25.1
ROS: Kinetik
Ubuntu: 16.04
[ ] ArduPilot
[ x ] PX4
Versi: 1.7.3
$ rosrun mavros mavros_node _fcu_url:=tcp://127.0.0.1:5760 _system_id:=2
[ INFO] [1527166997.534725386]: FCU URL: tcp://127.0.0.1:5760
[ INFO] [1527166997.538179020]: tcp0: Server address: 127.0.0.1:5760
[ INFO] [1527166997.538583530]: GCS URL: udp://@
[ INFO] [1527166997.538851787]: udp1: Bind address: 0.0.0.0:14555
[ INFO] [1527166997.582075509]: Plugin 3dr_radio loaded
[ INFO] [1527166997.587216072]: Plugin 3dr_radio initialized
[ INFO] [1527166997.587433590]: Plugin actuator_control loaded
[ INFO] [1527166997.602908470]: Plugin actuator_control initialized
[ INFO] [1527166997.608098772]: Plugin adsb loaded
[ INFO] [1527166997.624933409]: Plugin adsb initialized
[ INFO] [1527166997.625174728]: Plugin altitude loaded
[ INFO] [1527166997.629202189]: Plugin altitude initialized
[ INFO] [1527166997.629439220]: Plugin cam_imu_sync loaded
[ INFO] [1527166997.631736889]: Plugin cam_imu_sync initialized
[ INFO] [1527166997.632005870]: Plugin command loaded
[ INFO] [1527166997.656271690]: Plugin command initialized
[ INFO] [1527166997.656518171]: Plugin debug_value loaded
[ INFO] [1527166997.679747716]: Plugin debug_value initialized
[ INFO] [1527166997.680021635]: Plugin distance_sensor loaded
[ WARN] [1527166997.684616922]: DS: plugin not configured!
[ INFO] [1527166997.684730488]: Plugin distance_sensor initialized
[ INFO] [1527166997.684972781]: Plugin fake_gps loaded
[ INFO] [1527166997.728127889]: Plugin fake_gps initialized
[ INFO] [1527166997.728480748]: Plugin ftp loaded
[ INFO] [1527166997.758929019]: Plugin ftp initialized
[ INFO] [1527166997.759219651]: Plugin global_position loaded
[ INFO] [1527166997.818296662]: Plugin global_position initialized
[ INFO] [1527166997.818588156]: Plugin hil loaded
[ INFO] [1527166997.882781780]: Plugin hil initialized
[ INFO] [1527166997.883048549]: Plugin home_position loaded
[ INFO] [1527166997.903052314]: Plugin home_position initialized
[ INFO] [1527166997.903807895]: Plugin imu loaded
[ INFO] [1527166997.933612538]: Plugin imu initialized
[ INFO] [1527166997.933850257]: Plugin local_position loaded
[ INFO] [1527166997.952751657]: Plugin local_position initialized
[ INFO] [1527166997.953008414]: Plugin manual_control loaded
[ INFO] [1527166997.968141910]: Plugin manual_control initialized
[ INFO] [1527166997.968481980]: Plugin mocap_pose_estimate loaded
[ INFO] [1527166997.984059425]: Plugin mocap_pose_estimate initialized
[ INFO] [1527166997.984304531]: Plugin obstacle_distance loaded
[ INFO] [1527166997.997733823]: Plugin obstacle_distance initialized
[ INFO] [1527166997.998059268]: Plugin odom loaded
[ INFO] [1527166998.013623175]: Plugin odom initialized
[ INFO] [1527166998.013984083]: Plugin param loaded
[ INFO] [1527166998.023299249]: Plugin param initialized
[ INFO] [1527166998.023588331]: Plugin px4flow loaded
[ INFO] [1527166998.042473344]: Plugin px4flow initialized
[ INFO] [1527166998.042727126]: Plugin rangefinder loaded
[ INFO] [1527166998.045338152]: Plugin rangefinder initialized
[ INFO] [1527166998.045632059]: Plugin rc_io loaded
[ INFO] [1527166998.062006661]: Plugin rc_io initialized
[ INFO] [1527166998.062537311]: Plugin safety_area loaded
[ INFO] [1527166998.083768132]: Plugin safety_area initialized
[ INFO] [1527166998.084033551]: Plugin setpoint_accel loaded
[ INFO] [1527166998.097458792]: Plugin setpoint_accel initialized
[ INFO] [1527166998.097776863]: Plugin setpoint_attitude loaded
[ INFO] [1527166998.135016088]: Plugin setpoint_attitude initialized
[ INFO] [1527166998.135395910]: Plugin setpoint_position loaded
[ INFO] [1527166998.199004407]: Plugin setpoint_position initialized
[ INFO] [1527166998.199288389]: Plugin setpoint_raw loaded
[ INFO] [1527166998.247947782]: Plugin setpoint_raw initialized
[ INFO] [1527166998.248232176]: Plugin setpoint_velocity loaded
[ INFO] [1527166998.276827990]: Plugin setpoint_velocity initialized
[ INFO] [1527166998.277159823]: Plugin sys_status loaded
[ INFO] [1527166998.313704869]: Plugin sys_status initialized
[ INFO] [1527166998.314003064]: Plugin sys_time loaded
[ INFO] [1527166998.325176275]: TM: Timesync mode: MAVLINK
[ INFO] [1527166998.327852553]: Plugin sys_time initialized
[ INFO] [1527166998.328095534]: Plugin vfr_hud loaded
[ INFO] [1527166998.330919928]: Plugin vfr_hud initialized
[ INFO] [1527166998.331147359]: Plugin vibration loaded
[ INFO] [1527166998.335247172]: Plugin vibration initialized
[ INFO] [1527166998.335499616]: Plugin vision_pose_estimate loaded
[ INFO] [1527166998.369932485]: Plugin vision_pose_estimate initialized
[ INFO] [1527166998.370189466]: Plugin vision_speed_estimate loaded
[ INFO] [1527166998.383793912]: Plugin vision_speed_estimate initialized
[ INFO] [1527166998.384077019]: Plugin waypoint loaded
[ INFO] [1527166998.403765289]: Plugin waypoint initialized
[ INFO] [1527166998.404032333]: Plugin wind_estimation loaded
[ INFO] [1527166998.406681323]: Plugin wind_estimation initialized
[ INFO] [1527166998.406813352]: Built-in SIMD instructions: SSE, SSE2
[ INFO] [1527166998.406874153]: Built-in MAVLink package version: 2018.5.5
[ INFO] [1527166998.406924542]: Known MAVLink dialects: common ardupilotmega ASLUAV autoquad icarous matrixpilot paparazzi slugs standard uAvionix ualberta
[ INFO] [1527166998.406979693]: MAVROS started. MY ID 2.240, TARGET ID 1.1
[ INFO] [1527166998.408225699]: IMU: Attitude quaternion IMU detected!
[ INFO] [1527166998.408474430]: IMU: High resolution IMU detected!
[ INFO] [1527166999.200899783]: CON: Got HEARTBEAT, connected. FCU: PX4 Autopilot
[ INFO] [1527166999.204518434]: IMU: High resolution IMU detected!
[ INFO] [1527166999.204972608]: IMU: Attitude quaternion IMU detected!
[ INFO] [1527167000.246101700]: VER: 1.1: Capabilities 0x00000000000024ef
[ INFO] [1527167000.246399932]: VER: 1.1: Flight software: 01060500 (00000000B9C7CD26)
[ INFO] [1527167000.246488372]: VER: 1.1: Middleware software: 01060500 (00000000B9C7CD26)
[ INFO] [1527167000.246534273]: VER: 1.1: OS software: 000000c0 (0000000000000000)
[ INFO] [1527167000.246748090]: VER: 1.1: Board hardware: 0000a4a7
[ INFO] [1527167000.246867818]: VER: 1.1: VID/PID: 0525:a4a7
[ INFO] [1527167000.246908907]: VER: 1.1: UID: 3335511839343335
[ WARN] [1527167000.247388481]: CMD: Unexpected command 520, result 0
[ WARN] [1527167013.218527443]: PR: request param #452 timeout, retries left 2, and 1 params still missing
[ INFO] [1527167014.241870430]: WP: mission received
[ WARN] [1527167359.915573803]: CMD: Unexpected command 200, result 4
[ WARN] [1527168934.267074100]: TM: Clock skew detected (-763580720.440153122 s). Hard syncing clocks.
header:
seq: 3416
stamp:
secs: 1527169233
nsecs: 907997653
frame_id: ''
status:
-
level: 0
name: "mavros: FCU connection"
message: "connected"
hardware_id: "tcp://127.0.0.1:5760"
values:
-
key: "Received packets:"
value: "60196"
-
key: "Dropped packets:"
value: "0"
-
key: "Buffer overruns:"
value: "0"
-
key: "Parse errors:"
value: "0"
-
key: "Rx sequence number:"
value: "159"
-
key: "Tx sequence number:"
value: "39"
-
key: "Rx total bytes:"
value: "147758546"
-
key: "Tx total bytes:"
value: "580048"
-
key: "Rx speed:"
value: "100808.000000"
-
key: "Tx speed:"
value: "390.000000"
-
level: 0
name: "mavros: GPS"
message: "3D fix"
hardware_id: "tcp://127.0.0.1:5760"
values:
-
key: "Satellites visible"
value: "8"
-
key: "Fix type"
value: "3"
-
key: "EPH (m)"
value: "1.24"
-
key: "EPV (m)"
value: "2.39"
-
level: 0
name: "mavros: Heartbeat"
message: "Normal"
hardware_id: "tcp://127.0.0.1:5760"
values:
-
key: "Heartbeats since startup"
value: "2229"
-
key: "Frequency (Hz)"
value: "0.962947"
-
key: "Vehicle type"
value: "Quadrotor"
-
key: "Autopilot type"
value: "PX4 Autopilot"
-
key: "Mode"
value: "AUTO.RTL"
-
key: "System status"
value: "Standby"
-
level: 0
name: "mavros: System"
message: "Normal"
hardware_id: "tcp://127.0.0.1:5760"
values:
-
key: "Sensor present"
value: "0x00000000"
-
key: "Sensor enabled"
value: "0x00000000"
-
key: "Sensor helth"
value: "0x00000000"
-
key: "CPU Load (%)"
value: "77.8"
-
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: "tcp://127.0.0.1:5760"
values:
-
key: "Voltage"
value: "17.91"
-
key: "Current"
value: "0.0"
-
key: "Remaining"
value: "100.0"
---
WARNING: mavros/target_system_id not set. Used default value: 1
WARNING: mavros/target_component_id not set. Used default value: 1
NOTE: Target parameters may be unset, but that may be result of incorrect --mavros-ns option.Double check results!
OK. I got messages from 1:1.
---
Received 9307 messages, from 1 addresses
sys:comp list of messages
1:1 0, 1, 2, 266, 140, 141, 147, 24, 30, 31, 32, 33, 36, 74, 76, 83, 85, 87, 230, 231, 105, 111, 241, 242, 245
PX4 tidak mendukung pesan itu. Baca dokumen firmware PX4 tentang cara mengonfigurasi kecepatan pesan.
PX4 memiliki dukungan untuk MAV_CMD_GET_MESSAGE_INTERVAL dan MAV_CMD_SET_MESSAGE_INTERVAL.
https://mavlink.io/en/messages/common.html#MAV_CMD_GET_MESSAGE_INTERVAL
Ya, tetapi iface itu belum didukung oleh mavros (memerlukan panggilan rosapi baru).
@vooon , @dagar Terima kasih telah mengarahkan saya ke arah yang benar. Bisakah Anda menyarankan cara untuk mendapatkan perintah mavlink MAV_CMD_SET_MESSAGE_INTERVAL ke PX4?
Saya mencoba rosrun mavros mavcmd int 511 105 10000 100 1 1 1 1
, tetapi tidak berhasil. Angka-angka berdiri untuk yang berikut:
511: https://mavlink.io/en/messages/common.html#MAV_CMD_GET_MESSAGE_INTERVAL
105: https://github.com/PX4/Firmware/blob/4453e4201b7a245cff52beeb38a293161aea4c48/Tools/mavlink_px4.py#L506
1 1 1 1: Harus mengisi sesuatu, jika tidak mendapat mavcmd int: error: too few arguments
Tingkat IMU juga ditingkatkan dengan modul mavlink dari PX4 mavlink stream -u 14556 -s HIGHRES_IMU -r 100
. Tetap saja tarifnya tetap 50 ketika saya memeriksanya dengan rostopic hz /mavros/imu/data
. Apa yang perlu dilakukan di luar mavros agar topik /mavros/imu/data
lebih cepat diterbitkan?
Coba juga perintah panjang, mavcmd long 511 105 1000 0 0 0 0 0 0
Terima kasih atas balasan cepatnya @vooon
Mencoba rosrun mavros mavcmd long 511 105 1000 0 0 0 0 0
, sayangnya tarifnya masih 50.
Apa yang memicu mavros untuk mempublikasikan di /mavros/imu/data
? Saya telah menemukan bahwa data diterbitkan di sini dalam fungsi handle_attitude_quaternion
, tetapi saya belum menemukan apa yang memicu fungsi itu.
@szebedy Aero mengalirkan data melalui UDP kan? Portnya pakai apa? Mengapa Anda mencolokkan melalui TCP? mavlink stream -u 14556 -s HIGHRES_IMU -r 100
hanya akan berfungsi jika Aero benar-benar streaming melalui port UDP tersebut.
Apa yang memicu mavros untuk mempublikasikan di
/mavros/imu/data
? Saya telah menemukan bahwa data diterbitkan di sini dalam fungsihandle_attitude_quaternion
, tetapi saya belum menemukan apa yang memicu fungsi itu.
Ini dipicu ketika MAVROS menerima pesan HIGHRES_IMU
dari aliran.
@TSC21 Komentar yang sangat bagus, Pengendali Penerbangan Aero sebenarnya mengalirkan data melalui port serial (/ dev/ttyS1) ke papan komputasi. Namun, untuk membuat segalanya "lebih mudah", papan komputasi memiliki proxy yang memperlihatkan port serial sebagai soket jaringan (port 5760).
Oleh karena itu saya mencoba mavlink stream -d /dev/ttyS1 -s HIGHRES_IMU -r 100
, tetapi sayangnya kecepatan streaming tetap 50 :(
Pada PX4 data_raw
seharusnya memiliki rate yang sama dengan HIGHRES_IMU, tetapi data
menggabungkan ATTITUDE_QUATERNION
dan hr-imu, jadi coba ubah rate-nya juga.
papan komputasi memiliki proxy yang memperlihatkan port serial sebagai soket jaringan (port 5760).
Maka masalahnya mungkin ada di proxy. Saya akan menjamin bahwa kemacetan tidak ada.
Terima kasih banyak @vooon (dan @TSC21), itu berhasil!!! Jadi solusi saat ini adalah:
mavlink stream -d /dev/ttyS1 -s HIGHRES_IMU -r 100
mavlink stream -d /dev/ttyS1 -s ATTITUDE_QUATERNION -r 100
rosrun mavros mavcmd long 511 105 10000 0 0 0 0 0
rosrun mavros mavcmd long 511 31 10000 0 0 0 0 0
Apakah mungkin untuk memasukkan dua perintah ini dalam file peluncuran ROS (atau dalam node C++ ROS)?
Apakah mungkin untuk memasukkan dua perintah ini dalam file peluncuran ROS (atau dalam node C++ ROS)?
Masukkan saja:
mavlink stream -d /dev/ttyS1 -s HIGHRES_IMU -r 100
atau
mavlink stream -d /dev/ttyS1 -s ATTITUDE_QUATERNION -r 100
di https://github.com/PX4/Firmware/blob/master/ROMFS/px4fmu_common/init.d/4070_aerofc , program ulang papan Aero Anda dan reboot. Dan Anda bahkan tidak perlu menggunakan perintah ROS.
Menutup ini kemudian.
Juga hanya sebuah komentar:
Jika Anda ingin mendapatkan data dari mavros/imu/data_raw
, Anda hanya perlu meningkatkan aliran HIGHRES_IMU
. Jika Anda ingin mendapatkan dari mavros/imu/data
(sikap terfilter), Anda hanya meningkatkan dari ATTITUDE_QUATERNION
. Tidak perlu meningkatkan keduanya (karena Anda akan meningkatkan penggunaan bandwidth tanpa alasan). Anda hanya mendapatkan data dari topik yang salah sejak awal. Jika Anda mengeluarkan rostopic hz /mavros/imu/data_raw
, Anda akan melihat peningkatan pada kecepatan data.
Masukkan saja:
aliran mavlink -d /dev/ttyS1 -s HIGHRES_IMU -r 100
atau
aliran mavlink -d /dev/ttyS1 -s ATTITUDE_QUATERNION -r 100
di https://github.com/PX4/Firmware/blob/master/ROMFS/px4fmu_common/init.d/4070_aerofc , program ulang papan Aero Anda dan reboot. Dan Anda bahkan tidak perlu menggunakan perintah ROS.
Menutup ini kemudian.
@TSC21 Untuk beberapa alasan ini tidak berpengaruh, tahu mengapa? Saya memasukkan mavlink stream -d /dev/ttyS1 -s ATTITUDE_QUATERNION -r 100
ke akhir https://github.com/PX4/Firmware/blob/master/ROMFS/px4fmu_common/init.d/4070_aerofc , dibuat dengan make aerofc-v1_default
, lalu diunggah dengan make aerofc-v1_default upload
. Upload selesai, saya reboot tapi rate mavros/imu/data
tetap 50.
@TSC21 aero tidak memiliki fitur skrip extras.txt
? Pixhawk dapat menjalankan skrip extras.txt dari kartu SD, yang memungkinkan untuk mengatur streaming.
@TSC21 Untuk beberapa alasan ini tidak berpengaruh, tahu mengapa? Saya memasukkan aliran mavlink -d /dev/ttyS1 -s ATTITUDE_QUATERNION -r 100 ke akhir https://github.com/PX4/Firmware/blob/master/ROMFS/px4fmu_common/init.d/4070_aerofc , dibuat dengan make aerofc -v1_default, lalu upload dengan make aerofc-v1_default upload. Unggahan selesai, saya reboot tetapi tingkat mavros/imu/data tetap 50.
Mungkin ditimpa oleh baris ini: https://github.com/PX4/Firmware/blob/ab279d5fe9e014cec26add8a56bd5e676152b1c5/src/modules/mavlink/mavlink_main.cpp#L2042
Solusi kerja saya saat ini adalah mengganti configure_stream("ATTITUDE_QUATERNION", 50.0f);
menjadi configure_stream("ATTITUDE_QUATERNION", 100.0f);
, lalu buat dan unggah.