Mavros: Настройка параметров PX4 с помощью MAVROS

Созданный на 31 авг. 2017  ·  10Комментарии  ·  Источник: mavlink/mavros

Привет

Я пытаюсь изменить некоторые параметры в стеке полета PX4 с помощью MAVROS.

Я могу прочитать параметр с помощью mavros, используя
вызов rosservice / mavros / param / получить MPC_LAND_SPEED

однако я не могу установить его с помощью mavros. Я не знаю, какой у него правильный синтаксис

Я пытался
вызов rosservice / mavros / param / set MPC_LAND_SPEED '0.4'
однако это дает мне ошибку. Если кто может помочь буду очень признателен!

Спасибо

Себастьян

question

Самый полезный комментарий

Это потому, что вы пытаетесь вызвать метод set через службу.

Через службу способ ROS:

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

Все 10 Комментарий

Вы пробовали mavparam скрипт? rosrun mavros mavparam set MPC_LAND_SPEED 0.4 ?

Это потому, что вы пытаетесь вызвать метод set через службу.

Через службу способ ROS:

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

Кажется, у вас есть два рабочих варианта @shing. Закрытие

Это потому, что вы пытаетесь вызвать метод set через службу.

Через службу способ ROS:
вызов rosservice / param / set "param_id: 'MPC_LAND_SPEED'
ценить:
целое число: 0
реальный: 0,4 дюйма

Более точный способ описан здесь с помощью описанного выше метода.

Приведенная выше команда делает ошибку в моем испытании. Но это сработало после того, как перед «целым» и «реальным» был добавлен пробел. И '/ mavros' добавил примерно так:

вызов rosservice / mavros / param / set "param_id: 'SENS_EN_THERMAL'
ценить:
целое число: 55
реальный: 0,0 "

cf) В этом редакторе комментариев можно добавить пробел, написав   вместо '' (пробел).

@bigbellmercy Эта проблема очевидна только в аргументах командной строки? Или это также верно, когда вы используете звонки rosservice через roscpp?

@bigbellmercy Действительно, это было 3 года назад, и пространство не было очевидным, я просто добавил `` вокруг него, и теперь это очевидно. Типичный способ, которым я использую rosservice, - это злоупотреблениечтобы не допустить опечаток: смеется:

@bigbellmercy Эта проблема очевидна только в аргументах командной строки? Или это также верно, когда вы используете звонки rosservice через roscpp?

@ Jaeyoung-Lim Мне не удалось выполнить «вызовы rosservice через roscpp», используя приведенные выше командные строки.

Но приведенный ниже код работает для изменения параметра PX4 в roscpp:

system("rosrun mavros mavparam set SENS_EN_THERMAL 55");

@ Jaeyoung-Lim Я имел в виду roscpp, используя вызовы службы ros , а не аргументы командной строки

@ Jaeyoung-Lim Я не смог найти решение этой проблемы в своих испытаниях.

Используя вызовы службы roscpp , мне также не удалось напрямую получить или установить параметр PX4. У меня всегда возникала следующая ошибка:

[/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

Есть ли какой-нибудь префикс для добавления к идентификатору параметра?

Сработало без проблем с использованием скрипта
rosrun mavros mavparam -n /mavros get MPC_XY_VEL_MAX

Однако я хочу сделать это программно. Я нашел обходной путь, перетащив параметры в ROS, внося желаемые изменения, а затем вернув их обратно:

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!");
}
Была ли эта страница полезной?
0 / 5 - 0 рейтинги