Mavros: Réglage des paramètres PX4 à l'aide de MAVROS

Créé le 31 août 2017  ·  10Commentaires  ·  Source: mavlink/mavros

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

question

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 :

rosservice call /param/set "param_id: 'MPC_LAND_SPEED'
value:
  integer: 0
  real: 0.4" 

Tous les 10 commentaires

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 depour éviter les fautes de frappe :rire:

@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!");
}
Cette page vous a été utile?
0 / 5 - 0 notes