salut
J'essaie de modifier certains paramètres sur une pile de vol PX4 à l'aide de MAVROS.
Je suis capable de lire le paramètre avec mavros en utilisant
appel rosservice /mavros/param/get MPC_LAND_SPEED
Cependant, je ne suis pas en mesure de le définir à l'aide de mavros. Je ne sais pas quelle est la syntaxe correcte
J'ai essayé
appel rosservice /mavros/param/set MPC_LAND_SPEED '0.4'
cependant cela me donne une erreur. Si quelqu'un peut m'aider, je serais très reconnaissant !
Merci
Sébastien
Avez-vous essayé le script mavparam
? rosrun mavros mavparam set MPC_LAND_SPEED 0.4
?
C'est parce que vous essayez d'appeler la méthode set via un service.
Via un service, la voie ROS c'est :
rosservice call /param/set "param_id: 'MPC_LAND_SPEED'
value:
integer: 0
real: 0.4"
Il semble que vous ayez deux options de travail @shening. Fermeture
C'est parce que vous essayez d'appeler la méthode set via un service.
Via un service, la voie ROS c'est :
rosservice appel /param/set "param_id: 'MPC_LAND_SPEED'
valeur:
entier : 0
réel : 0.4"
À l'aide de la méthode ci-dessus, une méthode plus exacte est décrite ici.
La commande ci-dessus fait une erreur dans mon essai. Mais cela a fonctionné après l'ajout d'un espace vide avant « entier » et « réel ». Et '/mavros' ajouté comme :
rosservice call /mavros/param/set "param_id: 'SENS_EN_THERMAL'
valeur:
entier : 55
réel : 0,0"
cf) Dans cet éditeur de commentaires, un espace peut être ajouté en écrivant
au lieu de ' '(espace).
@bigbellmercy Ce problème
@bigbellmercy En effet, c'était il y a 3 ans et l'espace n'était pas évident, j'ai juste ajouté ``` autour et maintenant c'est évident. La façon typique dont j'utilise rosservice est de faire un usage abusif de
@bigbellmercy Ce problème
@Jaeyoung-Lim J'ai échoué à « appels rosservice sur roscpp » en utilisant les lignes de commande ci-dessus.
Mais le code ci-dessous fonctionne pour le changement de paramètre PX4 dans roscpp :
system("rosrun mavros mavparam set SENS_EN_THERMAL 55");
@Jaeyoung-Lim Je voulais dire roscpp en utilisant les appels de service ros , sans utiliser d'arguments de ligne de commande
@Jaeyoung-Lim Je n'ai pas trouvé la solution dans mes essais.
En utilisant les appels de service roscpp , je n'ai pas non plus pu obtenir ou définir directement un paramètre PX4. J'ai toujours l'erreur suivante :
[/mavros:std_plugins::ParamPlugin::get_cb]: PR: Unknown parameter to get: MPC_XY_VEL_MAX
[/mavros:std_plugins::ParamPlugin::set_cb]: PR: Unknown parameter to set: MPC_XY_VEL_MAX
Y a-t-il un préfixe à ajouter à l'ID du paramètre ?
Cela a fonctionné sans problème en utilisant le script mavparam :
rosrun mavros mavparam -n /mavros get MPC_XY_VEL_MAX
Cependant, je veux le faire par programme. J'ai trouvé une solution de contournement en tirant les paramètres vers ROS, en apportant les modifications souhaitées, puis en les repoussant tous :
ServiceClient pull_client = nh.serviceClient<mavros_msgs::ParamPull>("mavros/param/pull");
pull_client.waitForExistence();
mavros_msgs::ParamPull pull;
if (pull_client.call(pull)) {
if (pull.response.success) {
ROS_DEBUG("Pulled %d parameters from FCU", pull.response.param_received);
nh.setParam("mavros/param/MPC_XY_VEL_MAX", max_velocity);
ServiceClient push_client = nh.serviceClient<mavros_msgs::ParamPush>("mavros/param/push");
push_client.waitForExistence();
mavros_msgs::ParamPush push;
if (push_client.call(push)) {
if (push.response.success)
ROS_DEBUG("Pushed %d parameters to FCU", push.response.param_transfered);
else
ROS_ERROR("Failed push parameters to FCU, cannot set maximum horizontal velocity!");
}
else {
ROS_ERROR("Failed to push parameters to FCU, cannot set maximum horizontal velocity!");
}
}
else {
ROS_ERROR("Failed to pull parameters from FCU, cannot set maximum horizontal velocity!");
}
}
else {
ROS_ERROR("Failed to pull parameters from FCU, cannot set maximum horizontal velocity!");
}
Commentaire le plus utile
C'est parce que vous essayez d'appeler la méthode set via un service.
Via un service, la voie ROS c'est :