Mavros: Configuração de parâmetros PX4 usando MAVROS

Criado em 31 ago. 2017  ·  10Comentários  ·  Fonte: mavlink/mavros

Oi

Estou tentando alterar alguns parâmetros em uma pilha de vôo PX4 usando MAVROS.

Sou capaz de ler o parâmetro com mavros usando
rosservice call / mavros / param / get MPC_LAND_SPEED

no entanto, não consigo defini-lo usando mavros. Eu não sei qual é a sintaxe correta

eu tentei
rosservice call / mavros / param / set MPC_LAND_SPEED '0.4'
no entanto, isso me dá um erro. Se alguem puder ajudar ficaria muito grato!

Obrigado

Sebastian

question

Comentários muito úteis

É porque você está tentando chamar o método set por meio de um serviço.

Por meio de um serviço, a maneira ROS é:

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

Todos 10 comentários

Você tentou o script mavparam ? rosrun mavros mavparam set MPC_LAND_SPEED 0.4 ?

É porque você está tentando chamar o método set por meio de um serviço.

Por meio de um serviço, a maneira ROS é:

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

Parece que você tem duas opções de trabalho @shening. Fechando

É porque você está tentando chamar o método set por meio de um serviço.

Por meio de um serviço, a maneira ROS é:
rosservice call / param / set "param_id: 'MPC_LAND_SPEED'
valor:
inteiro: 0
real: 0,4 "

Com a ajuda do método acima, um método mais exato é descrito aqui.

O comando acima comete um erro na minha tentativa. Mas funcionou depois que um espaço em branco foi adicionado antes de 'inteiro' e 'real'. E '/ mavros' adicionado como:

rosservice call / mavros / param / set "param_id: 'SENS_EN_THERMAL'
valor:
inteiro: 55
real: 0,0 "

cf) Neste editor de comentários, um espaço em branco pode ser adicionado escrevendo   vez de '' (espaço).

@bigbellmercy Este problema é aparente apenas em argumentos de linha de comando? ou isso também é verdade quando você usa chamadas rosservice sobre roscpp?

@bigbellmercy Na verdade, isso foi há 3 anos e o espaço não era óbvio, eu apenas adicionei `` `em torno dele e agora é óbvio. A maneira típica de usar o rosservice é fazer uso abusivo depara evitar erros de digitação: rir:

@bigbellmercy Este problema é aparente apenas em argumentos de linha de comando? ou isso também é verdade quando você usa chamadas rosservice sobre roscpp?

@ Jaeyoung-Lim Não consegui 'rosservice calls over roscpp' usando as linhas de comando acima.

Mas o código a seguir funciona para a alteração do parâmetro PX4 em roscpp:

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

@ Jaeyoung-Lim, quis dizer roscpp usando as chamadas de serviço ros , não usando argumentos de linha de comando

@ Jaeyoung-Lim Não consegui encontrar a solução para isso em meus testes.

Usando chamadas de serviço roscpp , também não consegui obter ou definir diretamente um parâmetro PX4. Sempre recebo o seguinte erro:

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

Existe algum prefixo para adicionar ao ID do parâmetro?

Funcionou sem problemas usando o script mavparam :
rosrun mavros mavparam -n /mavros get MPC_XY_VEL_MAX

No entanto, quero fazer isso programaticamente. Eu encontrei uma solução alternativa puxando os parâmetros para ROS, fazendo as alterações desejadas e, em seguida, empurrando-os de volta:

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!");
}
Esta página foi útil?
0 / 5 - 0 avaliações