J'essaie d'augmenter le taux de mise à jour de l'IMU à l'aide de l'appel de service ~set_stream_rate. J'ai également essayé d'augmenter et de diminuer le taux, malheureusement sans succès.
J'ai essayé ce qui suit :
Dans un terminal : rosservice call /mavros/set_stream_rate 1 200 1
(j'ai aussi essayé avec 0 200 1, 0 10 1, 0 10 0 etc.)
En 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);
Aucun de ceux-ci n'a fonctionné, je ne sais pas pourquoi. Je ne sais pas non plus comment procéder au débogage.
Mavros : 0.25.1
ROS : cinétique
Ubuntu : 16.04
[ ] ArduPilot
[x] PX4
Version : 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 ne prend pas en charge ce message. Lisez la documentation du micrologiciel PX4 sur la façon de configurer les taux de message.
PX4 prend en charge MAV_CMD_GET_MESSAGE_INTERVAL et MAV_CMD_SET_MESSAGE_INTERVAL.
https://mavlink.io/en/messages/common.html#MAV_CMD_GET_MESSAGE_INTERVAL
Oui, mais cet iface n'est pas encore pris en charge par mavros (nécessite un nouvel appel rosapi).
@vooon , @dagar Merci de
J'ai essayé rosrun mavros mavcmd int 511 105 10000 100 1 1 1 1
, mais sans succès. Les chiffres correspondent aux éléments suivants :
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 : J'ai dû faire le plein de quelque chose, sinon j'ai eu mavcmd int: error: too few arguments
A également augmenté le taux de l'IMU avec le module mavlink de PX4 mavlink stream -u 14556 -s HIGHRES_IMU -r 100
. Pourtant, le taux reste de 50 lorsque je le vérifie avec rostopic hz /mavros/imu/data
. Que faut-il faire en dehors de mavros pour publier le sujet /mavros/imu/data
plus rapidement ?
Essayez aussi la commande longue, mavcmd long 511 105 1000 0 0 0 0 0 0
Merci pour la réponse rapide @vooon
J'ai essayé rosrun mavros mavcmd long 511 105 1000 0 0 0 0 0
, malheureusement le tarif est toujours de 50.
Qu'est-ce qui pousse mavros à publier sur /mavros/imu/data
? J'ai trouvé que les données sont publiées ici dans la fonction handle_attitude_quaternion
, mais je n'ai pas trouvé ce qui déclenche cette fonction.
@szebedy, l'Aero diffuse les données via UDP, n'est-ce pas ? Quel est le port qu'il utilise ? Pourquoi utilisez-vous plutôt TCP ? mavlink stream -u 14556 -s HIGHRES_IMU -r 100
ne fonctionnera que si l'Aero diffuse réellement via ce port UDP.
Qu'est-ce qui pousse mavros à publier sur
/mavros/imu/data
? J'ai trouvé que les données sont publiées ici dans la fonctionhandle_attitude_quaternion
, mais je n'ai pas trouvé ce qui déclenche cette fonction.
Il se déclenche lorsque MAVROS reçoit un message HIGHRES_IMU
du flux.
@TSC21 Très bonne remarque, le contrôleur de vol Aero diffuse en fait les données via un port série (/dev/ttyS1) vers la carte de calcul. Cependant, pour rendre les choses "plus faciles", la carte de calcul dispose d'un proxy qui expose le port série en tant que socket réseau (port 5760).
J'ai donc essayé mavlink stream -d /dev/ttyS1 -s HIGHRES_IMU -r 100
, mais malheureusement le taux de streaming reste 50 :(
Sur PX4, data_raw
devrait avoir le même tarif que HIGHRES_IMU, mais data
combine ATTITUDE_QUATERNION
et hr-imu, alors essayez aussi de changer son tarif.
la carte de calcul a un proxy qui expose le port série en tant que socket réseau (port 5760).
Ensuite, le problème peut être sur le proxy. Je garantirais que le goulot d'étranglement n'est pas là.
Merci beaucoup @vooon (et @TSC21), ça a fait l'affaire !!! Les solutions actuelles sont donc :
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
Est-il possible d'inclure ces deux commandes dans un fichier de lancement ROS (ou dans un nœud C++ ROS) ?
Est-il possible d'inclure ces deux commandes dans un fichier de lancement ROS (ou dans un nœud C++ ROS) ?
Il suffit de mettre :
mavlink stream -d /dev/ttyS1 -s HIGHRES_IMU -r 100
ou
mavlink stream -d /dev/ttyS1 -s ATTITUDE_QUATERNION -r 100
dans https://github.com/PX4/Firmware/blob/master/ROMFS/px4fmu_common/init.d/4070_aerofc , reprogrammez votre carte Aero et redémarrez-la. Et vous n'aurez même pas besoin d'utiliser les commandes ROS.
Je ferme ça alors.
Juste une remarque aussi :
Si vous souhaitez obtenir des données de mavros/imu/data_raw
, il vous suffit d'augmenter le flux de HIGHRES_IMU
. Si vous voulez obtenir à partir de mavros/imu/data
(attitude filtrée), vous augmentez simplement de ATTITUDE_QUATERNION
. Pas besoin d'augmenter pour les deux (car vous augmenteriez l'utilisation de la bande passante sans raison). Vous obteniez simplement les données du mauvais sujet en premier lieu. Si vous aviez émis rostopic hz /mavros/imu/data_raw
, vous auriez vu l'augmentation du débit de données.
Il suffit de mettre :
flux mavlink -d /dev/ttyS1 -s HIGHRES_IMU -r 100
ou
flux mavlink -d /dev/ttyS1 -s ATTITUDE_QUATERNION -r 100
dans https://github.com/PX4/Firmware/blob/master/ROMFS/px4fmu_common/init.d/4070_aerofc , reprogrammez votre carte Aero et redémarrez-la. Et vous n'aurez même pas besoin d'utiliser les commandes ROS.
Je ferme ça alors.
@TSC21 Pour une raison quelconque, cela n'a eu aucun effet, une idée pourquoi? J'ai inséré mavlink stream -d /dev/ttyS1 -s ATTITUDE_QUATERNION -r 100
à la fin de https://github.com/PX4/Firmware/blob/master/ROMFS/px4fmu_common/init.d/4070_aerofc , construit avec make aerofc-v1_default
, puis téléchargé avec make aerofc-v1_default upload
. L'upload se termine, je reboot mais le taux de mavros/imu/data
reste à 50.
@TSC21 aero n'a pas de fonction de script extras.txt
? Pixhawk peut exécuter le script extras.txt à partir de la carte SD, ce qui permet de configurer des flux.
Ce n'est pas le cas. https://github.com/intel-aero/meta-intel-aero/issues/286
@TSC21 Pour une raison quelconque, cela n'a eu aucun effet, une idée pourquoi? J'ai inséré mavlink stream -d /dev/ttyS1 -s ATTITUDE_QUATERNION -r 100 à la fin de https://github.com/PX4/Firmware/blob/master/ROMFS/px4fmu_common/init.d/4070_aerofc , construit avec make aerofc -v1_default, puis téléchargé avec make aerofc-v1_default upload. Le téléchargement se termine, je redémarre mais le taux de mavros/imu/data reste à 50.
Peut-être qu'il est écrasé par cette ligne : https://github.com/PX4/Firmware/blob/ab279d5fe9e014cec26add8a56bd5e676152b1c5/src/modules/mavlink/mavlink_main.cpp#L2042
Ma solution de travail actuelle consiste à remplacer configure_stream("ATTITUDE_QUATERNION", 50.0f);
par configure_stream("ATTITUDE_QUATERNION", 100.0f);
, puis à créer et à télécharger.