Mavros: MAVROSを使用したPX4パラメーターの設定

作成日 2017年08月31日  ·  10コメント  ·  ソース: mavlink/mavros

やあ

MAVROSを使用してPX4フライトスタックのいくつかのパラメータを変更しようとしています。

mavrosを使用してパラメータを読み取ることができます
rosservice call / mavros / param / get MPC_LAND_SPEED

ただし、mavrosを使用して設定することはできません。 彼の正しい構文が何であるかわかりません

私は試した
rosservice call / 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" 

@sheningには2つの作業オプションがあるようです。 閉鎖

これは、サービスを介してsetメソッドを呼び出そうとしているためです。

サービスを介したROSの方法は次のとおりです。
rosservice call / param / set "param_id: 'MPC_LAND_SPEED'
価値:
整数:0
実数:0.4 "

上記の方法の助けを借りて、より正確な方法をここで説明します。

上記のコマンドは私の試行でエラーになります。 ただし、「integer」と「real」の前に空白が追加された後は機能しました。 そして、「/ mavros」は次のように追加されました:

rosservice call / mavros / param / set "param_id: 'SENS_EN_THERMAL'
価値:
整数:55
実数:0.0 "

cf)このコメントエディタでは、 ''(スペース)の代わりに 書くことで、空白スペースを追加できます。

@bigbellmercyこの問題はコマンドライン引数でのみ明らかですか? または、roscppを介してrosservice呼び出しを使用する場合にも、これは当てはまりますか?

@bigbellmercy確かに、それは3年前のことで、スペースは明確ではありませんでした。その周りに `` `を追加しただけで、今では明白です。 私がrosserviceを使用する典型的な方法は、悪用することです。タイプミスを防ぐために:笑い:

@bigbellmercyこの問題はコマンドライン引数でのみ明らかですか? または、roscppを介してrosservice呼び出しを使用する場合にも、これは当てはまりますか?

@ Jaeyoung-Lim上記のコマンドラインを使用して「roscppを介したrosservice呼び出し」に失敗しました。

ただし、以下のコードは、roscppのPX4パラメーターの変更に対して機能します。

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

@ Jaeyoung-Limコマンドライン引数を使用せずにrosサービス呼び出しを使用してroscppを意味しました

@ Jaeyoung-リム私は私の試験でそれの解決策を見つけることができませんでした。

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

パラメータIDに追加するプレフィックスはありますか?

mavparamスクリプトを使用すると問題なく動作しました。
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 評価