Mavros: ضبط معلمات PX4 باستخدام MAVROS

تم إنشاؤها على ٣١ أغسطس ٢٠١٧  ·  10تعليقات  ·  مصدر: mavlink/mavros

أهلا

أحاول تغيير بعض المعلمات على مكدس طيران PX4 باستخدام MAVROS.

أنا قادر على قراءة المعلمة باستخدام mavros
استدعاء rosservice / mavros / param / الحصول على MPC_LAND_SPEED

ومع ذلك ، فأنا غير قادر على ضبطه باستخدام mavros. أنا لا أعرف ما هو النحو الصحيح

حاولت
استدعاء rosservice / mavros / param / set MPC_LAND_SPEED "0.4"
ومع ذلك فإنه يعطيني خطأ. إذا كان بإمكان أي شخص المساعدة ، سأكون ممتنًا جدًا!

شكرا لك

سيباستيان

question

التعليق الأكثر فائدة

هذا لأنك تحاول الاتصال بالطريقة المحددة عبر خدمة ما.

عبر الخدمة ، طريقة 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 ؟

هذا لأنك تحاول الاتصال بالطريقة المحددة عبر خدمة ما.

عبر الخدمة ، طريقة ROS هي:

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

يبدو أن لديك خياران للعمل @ shening. إغلاق

هذا لأنك تحاول الاتصال بالطريقة المحددة عبر خدمة ما.

عبر الخدمة ، طريقة ROS هي:
استدعاء rosservice / param / set "param_id: 'MPC_LAND_SPEED'
القيمة:
عدد صحيح: 0
حقيقي: 0.4 "

من مساعدة الطريقة المذكورة أعلاه ، يتم وصف طريقة أكثر دقة هنا.

الأمر أعلاه يخطئ في تجربتي. لكنها نجحت بعد إضافة مسافة فارغة قبل "عدد صحيح" و "حقيقي". تمت إضافة "/ mavros" على النحو التالي:

استدعاء rosservice / mavros / param / مجموعة "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 التقييمات