Mavros: جويستيك عن بعد

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

في ملزمة. ستحتاج إلى بعض المساعدة في جزء تجاوز اتفاقية روتردام.

extras feature request

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

vooon تجري اختبارا الآن. خريطة المحاور الخاصة بي مختلفة ، ومن السهل تغييرها ، لكني أرى أن بعض القنوات معكوسة. يجب عليك أيضًا إضافة معلمة لعكس القناة ، دون الحاجة إلى الانتقال إلى وضع التحكم والقيام بشيء مثل z=-yaw .

ملاحظة: في حالتي ، خريطة المحور الخاصة بي هي:

axes_map = {
    'roll': 3,
    'pitch': 2,
    'yaw': 0,
    'throttle': 1
}

وفي وضع التحكم في السرعة:

twist.twist.linear = Vector3(x=-roll, y=pitch, z=throttle)
twist.twist.angular = Vector3(z=-yaw)

ال 72 كومينتر

أعتقد أنه من الأفضل ألا يكون مكونًا إضافيًا ، ولكن عقدة البرنامج النصي التي تستخدم المكون الإضافي rc_io.

هل سيشمل ذلك الاشياء setpoint؟

لست معتادًا جدًا على البرامج النصية كما رأيت ، فأنا أفضل حقًا مكونًا إضافيًا. لكن يمكنني إرسال هذا إليك كمكوِّن إضافي ثم يمكنك تحويله إلى برنامج نصي إذا كنت تريد ذلك.

فقط لا أريد رمزًا مكررًا موجودًا بالفعل (ويعمل).

أعتقد أن هذه العقدة يجب أن تشترك في موضوع عصا التحكم وتنتج رسائل تجاوز RC (أو نقطة الضبط).
أرسل لي من فضلك البيانات التي يجب أن أرسلها إلى RC / setpoint وأكتب البرنامج النصي (خريطة القناة وما إلى ذلك).

حسنًا ، سأفعل ذلك على الفور

vooon أرسل لك البريد الإلكتروني الآن ؛)

حسنًا ، سأراه غدًا.

متأكد: +1: شكرا!

يمكنني إضافة عقدة مماثلة لدي لهذا إذا لزم الأمر. @ TSC21

tonybaltovski من فضلك أرسلها لي. أعتقد أنه مثال مفيد ، لكن ربما يجب أن يكون في إضافات.

tonybaltovski لقد بدأت بالفعل vooon حتى يتمكن من التكيف بالطريقة التي يريدها. كان جاهزًا تقريبًا للتحكم في نقطة الضبط ، لكن جزء تجاوز RC تركته لـvooon.

ما هو الوضع في هذا؟ أود حقًا الحصول على يد المساعدة في هذا الأمر لاختبار نقاط الضبط أيضًا :)

ربما غدا...

@ TSC21 إنه مجرد دليل على المفهوم ، لكن يجب أن يعمل.

سأحاول ، شكرا! :) لكن أولويتي هي اختبار نقاط الضبط باستخدام عصا التحكم. إذا كان بإمكانك إضافة إمكانية التحكم في الموقع والسرعة ، فسأكون ممتنًا.

للسرعة ، أرسل cmd_vel كـ TwistStamped ليتم الاشتراك بواسطة setpoint_velocity ؛

التحكم في المركز بسيط: بدلاً من cmd_vel يرسل position كـ PoseStamped لكن يجب أن تكون هذه حالة معينة - يجب أن تقوم بجمع قيمة المركز السابق المرسلة لذلك يمكن زيادة أو إنقاص المركز (لذا فإن قيم x ، y ، z لا تقتصر على -1..1 ؛ ما يقتصر هو القيمة المضافة إلى القيمة الأخيرة ؛ لذلك إذا كان ذراع التحكم يرسل دائمًا +1 ، فإنه في كل تكرار يتم جمعه +1 -> الشك الوحيد الذي يساورني هنا هو إذا كان علينا تحديد السعر في هذه الحالة ، التكرارات لا تصل بعض القيم للصيام).
هذا واحد مشترك بـ setpoint_position .

تحديث: بخصوص موضوع /joy : لا يمكنني استرداد أي بيانات من عصا التحكم الخاصة بي باستخدام البرنامج النصي mavteleop . ولكن يمكنني استخدام إطلاق universal_teleop . لذلك يجب أن يكون هناك شيء مفقود في النص.

تقوم بتشغيل joy_node؟

rosrun joy joy_node

2014-08-27 18:17 GMT + 04: 00 TSC21 [email protected] :

تحديث: بخصوص موضوع / joy: لا يمكنني استرجاع أي بيانات من
عصا التحكم الخاصة بي باستخدام البرنامج النصي mavteleop. لكن باستخدام Universal_teleop
إطلاق أستطيع. لذلك يجب أن يكون هناك شيء مفقود في النص.

-
قم بالرد على هذا البريد الإلكتروني مباشرة أو قم بعرضه على GitHub
https://github.com/vooon/mavros/issues/133#issuecomment -53578566.

لا! نعم إنه يعمل الآن. نسيت joy_node . ألا يمكن تضمين ذلك في البرنامج النصي الذي سيتم إطلاقه؟

حسنًا الآن فيما يتعلق بالتجاوز نفسه: لم يكن تكرار /mavros/rc/override يحصل على أي بيانات لأنك نسيت البادئة / هنا:

override_pub = rospy.Publisher(args.mavros_ns + "/rc/override", OverrideRCIn, queue_size=10)

أحتاج إلى تصحيح ذلك أو أقوم بإجراء العلاقات العامة.
ولكن لا يزال هناك تجاوز RC على FCU ، لأن المحركات لا تغير السرعة حتى. سوف تستمر في التحقق مما يحدث.

vooon RC تجاوز إنه لا يعمل. يتم نشر البرنامج النصي على /rc/override ، والذي يشترك فيه rc_io.cpp . يعطيني صدى /mavros/rc/override قيم القناة المتغيرة ولكن لا شيء يحدث على جانب FCU (لا يتغير دوران المحرك).

أولويتي ليست تجاوز RC ، على الرغم من أنني أرغب في إعدادها. لكن يبدو أنني لا أستطيع أن أجد ما هي المشكلة. في غضون ذلك ، هل يمكنك تنفيذ سرعة نقطة الضبط والتحكم في الموقع من فضلك؟ (بناءً على التعليق أعلاه الذي قمت به بخصوص مواصفات هذا النوع من التحكم)
شكرا!

لدي نفس المشكلة مع تجاوز RC. FCU لا تستخدمه.

tonybaltovski هل يمكنك محاولة تصحيح السبب؟ أنا مشغول ببعض الأشياء الأخرى المتعلقة بـ POSCTL.

عندما أختبر التجاوزات مع APM وجدت أنه يسقط بصمت إذا كانت رسالة التجاوز تأتي من system_id! = SYSID_MYGCS (افتراضي: 255).

لذلك قمت بتغييره إلى 1 (افتراضيات mavros) وهو يعمل. أو يمكننا تغيير mavros system_id.

إذن ما هو الخطأ؟ system_id أو comp_id ؟ ما المطلوب في حالة PX4؟

ربما لا يتعامل PX4 مع رسائل تجاوز RC ، لا يمكنني العثور على معالج لرسالة MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE .

ربما لا يتعامل PX4 مع رسائل تجاوز RC ، لا يمكنني العثور على معالج لرسالة MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE .

نعم لا يبدو ذلك. حسنًا ، سيئ جدًا ، أعتقد أنه يمكننا أن نطلب التنفيذ ، لكنني أفضل تشغيل النقاط المحددة. هل يمكنك تقديم يد vooon من فضلك؟
شكرا لك مقدما!

vooon سأجربها مرة أخرى على APM الخاص بي غدًا

سأحاول القيام بذلك غدا.

شكرا جزيلاvooon!

@ TSC21 انتهيت تقريبا ، ولكن السيطرة على الموقف قذرة جدا. تحتاج إلى إعادته للتكامل المستمر.

شكراvooon! : D عندما تكون قد انتهيت من كل شيء ، يرجى تحذيرني! سأكون سعيدا لاختبار هذا!

يمكنك بالفعل اختبار جميع الأوضاع باستثناء -pos (وربما -vel ).

vooon تجري اختبارا الآن. خريطة المحاور الخاصة بي مختلفة ، ومن السهل تغييرها ، لكني أرى أن بعض القنوات معكوسة. يجب عليك أيضًا إضافة معلمة لعكس القناة ، دون الحاجة إلى الانتقال إلى وضع التحكم والقيام بشيء مثل z=-yaw .

ملاحظة: في حالتي ، خريطة المحور الخاصة بي هي:

axes_map = {
    'roll': 3,
    'pitch': 2,
    'yaw': 0,
    'throttle': 1
}

وفي وضع التحكم في السرعة:

twist.twist.linear = Vector3(x=-roll, y=pitch, z=throttle)
twist.twist.angular = Vector3(z=-yaw)

استخدم المعلمة ~axes_scale/<name> لعكس الاتجاه (اضبطها على -1.0).

أوه حسنًا ، لم تتحقق من ذلك. شكرا!

هل يمكنك دمج rosrun joy joy_node عند تشغيل البرنامج النصي بدلاً من إضافته إلى ملف launch ؟

vooon شيء آخر يجب أن يعمل: يجب أن ترسل العقدة البيانات دائمًا ، حتى لو كانت 0.0 ، على سبيل المثال ، cmd_vel يجب أن تنشر دائمًا حتى إذا لم ننقل swtiches على عصا التحكم ، لأن الوضع OFFBOARD لديه مهلة 0.5 ثانية ، وكذلك لاستقبال البيانات باستمرار للبقاء في هذا الوضع أو أنه ينعكس إلى الوضع السابق!

ما أراه هو أنه عندما نقوم بتعيين قناة على قيمة ، فإن cmd_vel يرسل هذه القيمة مرة واحدة فقط. يحتاج تطبيق PX4 إلى تلقي البيانات باستمرار ، لذلك أعتقد أن ما يمكن عمله هو cmd_vel يرسل دائمًا قيمة القناة السابقة ، إلا عندما يتلقى قيمة جديدة. يتم تخزين هذه القيمة الجديدة ويتم إرسالها باستمرار حتى يتم تعيين قيمة جديدة للقناة (باستخدام العصي التناظرية خارج المسار).

أضف هذا إلى ملف التشغيل الخاص بك لعقدة الفرح <param name="~autorepeat_rate" value="5" />

شكرا tonybaltovski التي عملت! لكن ما زلت لا أستطيع تغيير المعلمات باستخدام ملف التشغيل. إليك كيف يبدو ملف التشغيل الخاص بي:

<launch>
    <!-- vim: ft=roslaunch -->
    <!-- example launch script for PX4 teleop -->

    <arg name="fcu_url" default="serial:///dev/ttyACM0:57600" />
    <arg name="gcs_url" default="" />
    <arg name="tgt_system" default="1" />
    <arg name="tgt_component" default="50" />

    <node pkg="mavros" type="mavros_node" name="mavros" required="true" clear_params="true" output="screen">
        <param name="fcu_url" value="$(arg fcu_url)" />
        <param name="gcs_url" value="$(arg gcs_url)" />
        <param name="target_system_id" value="$(arg tgt_system)" />
        <param name="target_component_id" value="$(arg tgt_component)" />

        <!-- px4 blacklist -->
        <rosparam command="load" file="$(find mavros)/launch/px4_blacklist.yaml" />

        <!-- enable heartbeat send and reduce timeout -->
        <param name="conn_heartbeat" value="5.0" />
        <param name="conn_timeout" value="10.0" />
        <!-- enable mavlink autostart on USB port -->
        <param name="startup_px4_usb_quirk" value="true" />

        <!-- joystick axis parameters -->

        <!-- joystick axis map -->
        <param name="~axes_map/roll" value="3" />
        <param name="~axes_map/pitch" value="2" />
        <param name="~axes_map/yaw" value="0" />
        <param name="~axes_map/throttle" value="1" />

        <!-- joystick axis scale -->
        <param name="~axes_scale/roll" value="-1.0" />
        <param name="~axes_scale/pitch" value="" />
        <param name="~axes_scale/yaw" value="-1.0" />
        <param name="~axes_scale/throttle" value="" />

    </node>

    <node pkg="joy" type="joy_node" name="joy" required="true">
        <param name="~/autorepeat_rate" value="50" />
    </node> 
</launch>

ربما سبب هذا هو نص mavros_extras ؟ لكن بإصدار rosparam list / أحصل على:

/joy/autorepeat_rate
/mavros/axes_map/pitch
/mavros/axes_map/roll
/mavros/axes_map/throttle
/mavros/axes_map/yaw
/mavros/axes_scale/pitch
/mavros/axes_scale/roll
/mavros/axes_scale/throttle
/mavros/axes_scale/yaw

لذلك لا أستطيع أن أفهم لماذا لا يغير البارامتر.

بالمناسبة vooon ، يجب أن يكون axis وليس axes ؛) سأقوم بهذا التصحيح وأقوم بعمل علاقات عامة إذا أردت.

تحديث: الله جهلي. المحاور هي جمع المحور (لذلك لا بأس كما هي)

تحديث: إذا قمت بعمل rosparam get /mavros/axes_map/pitch أحصل على 2 كما هو مفترض ، لذلك أعتقد أنه قد يكون شيئًا على mavteleop .

إذا فعلت ذلك بدلاً من ذلك:

load_map(axes_map, '/mavros/axes_map/')
load_map(axes_scale, '/mavros/axes_scale/')
load_map(button_map, '/mavros/button_map/')

على rosrun mavteleop :

[ERROR] [WallTime: 1409327711.720875] bad callback: <function joy_cb at 0xa5ce9cc>
Traceback (most recent call last):
  File "/opt/ros/hydro/lib/python2.7/dist-packages/rospy/topics.py", line 682, in _invoke_callback
    cb(msg)
  File "/home/vision/vision_ros_ws/src/mavros/mavros_extras/scripts/mavteleop", line 187, in joy_cb
    pitch = get_axis(joy, 'pitch')
  File "/home/vision/vision_ros_ws/src/mavros/mavros_extras/scripts/mavteleop", line 92, in get_axis
    return j.axes[axes_map[n]] * axes_scale[n]
TypeError: can't multiply sequence by non-int of type 'float'

حسنًا ، تم حل المشكلة! هذا ما فعلته:
في ملف التشغيل ، كان لدي:

<!-- joystick axis scale -->
        <param name="~axes_scale/roll" value="-1.0" />
        <param name="~axes_scale/pitch" value="" />
        <param name="~axes_scale/yaw" value="-1.0" />
        <param name="~axes_scale/throttle" value="" />

والذي كان يعطي الخطأ السابق في ضرب التسلسل. تغير إلى:

<!-- joystick axis scale -->
        <param name="~axes_scale/roll" value="-1.0" />
        <param name="~axes_scale/pitch" value="1.0" />
        <param name="~axes_scale/yaw" value="-1.0" />
        <param name="~axes_scale/throttle" value="1.0" />

تم حل الاشتراك بتغيير mavteleop بهذا:

load_map(axes_map, '/mavros/axes_map/')
load_map(axes_scale, '/mavros/axes_scale/')
load_map(button_map, '/mavros/button_map/')

سوف تفعل العلاقات العامة قريبا.

تم إجراء العلاقات العامة في # 143.

لقد كنت في حيرة من أمري بصيغة الجمع للمحاور.

يمكنك تطبيق المعلمات على عقدة خاطئة. من الواضح أنني فعلت سيناريو بدء التشغيل.

https://github.com/vooon/mavros/commit/289fa6c18113f6c0c1e1764cf4e5c37fd5abf9e2

(بدأ قبل العلاقات العامة الخاصة بك).

يمكنك تطبيق المعلمات على عقدة خاطئة. من الواضح أنني فعلت سيناريو بدء التشغيل.

نعم الان فهمت! شكرا! سيتم إلغاء العلاقات العامة بعد ذلك.

استعمال:

  1. بدء اتصال FCU: roslaunch mavros px4.launch
  2. بدء التشغيل عن بعد: roslaunch mavros_extras teleop.launch

أو أنشئ إطلاقك الخاص باستخدام <include file="..."> لكلا الملفين.

استعمال:
بدء اتصال FCU: roslaunch mavros px4.launch
بدء التشغيل عن بعد: roslaunch mavros_extras teleop.launch

شكرا! سأحاول بعد ذلك!

يعمل بشكل جيد الآن :) كان عليه فقط تغيير yaml وتم الانتهاء (تحقق من 289fa6c - يجب أن يكون roll bot poll ). الآن سأختبر هذا على GCS HIL لمعرفة كيف ستسير الأمور. ما الذي يجب عمله في الجزء position vooon؟

أنا أستعد لرحلات نهاية الأسبوع ، لذا يجب القيام بذلك ..

أنا أستعد لرحلات نهاية الأسبوع ، لذا يجب القيام بذلك ..

إذا أشرت إلى myabe يمكنني المحاولة

سوف أصلح الخطأ المطبعي.
تحتاج أيضًا إلى إضافة حدود تحميل RC من معلمات FCU.

بالمناسبة ، لاحظت للتو أن PX4Firmware به 500 تفرع!

بالمناسبة ، لاحظت للتو أن PX4Firmware به 500 تفرع!

: D لا يفاجئ بالنظر إلى المجتمع الضخم الذي يستخدم مشاريع Pixhawk و PX4 المشتقة.

أردت فقط التعليق على هذا. كنت على وشك كتابة شيء مثل تمامًا كما رأيت هذه المشكلة. مثل المجتمع اقرأ رأيي: د. تم اختباره ، ويعمل مثل السحر.

pmukherj هل يمكنك من فضلك تحديد خطوات موجزة حول كيفية عمل هذا على نظام نظيف. سأقوم بالتوسع والاختبار والتكيف لإدخال هذا في الويكي.
شكرا.

mhkabir أعتقد أن أفضل مكان في الويكي - صفحات الدروس (غير موجودة حاليًا في مساحة mavros).

vooon قصدت PX4 wiki :) يمكنني إضافة ملاحظة إلى README.

أَكِيدْ! أريد أن أتأكد من أنني لم أتخذ أي خطوات زائدة عن الحاجة (ربما لم تكن ترقية البرنامج الثابت إلى إصدار المطور مطلوبة وما إلى ذلك). سأكتب شيئا اليوم.

mhkabir لم أستطع الطيران اليوم بسبب سوء الأحوال الجوية في كندا ، لكن أثناء اختبار مقاعد البدلاء لاحظت أنه عند إرسال أمر r ، p ، y غير صفري (باستخدام عصا التحكم) لا يوجد تغيير مسموع في قوة المحرك. عندما أتحكم في الدفع (من خلال عصا التحكم f710) ، يمكنني سماع صوت المحركات لأعلى ولأسفل. عندما أقوم بتأرجح جسم المحرك الرباعي حوله ، يمكنني سماع صوت المحركات ومحاولة التعويض. ومع ذلك ، عندما أعطي الأمر ar ، p ، y كبيرًا للاستهداف من خلال أمر نقطة الضبط / الموقف ، فلن يتم سماع مثل هذا التعويض. هل هناك أي رسائل ملاحظات تم تنفيذها كجزء من mavros ، وهو شيء يقر بتنفيذ أمر ما (ربما القوى الحركية الفردية أو شيء من هذا القبيل؟).
أريد التأكد من أن هذا يعمل قبل أن أقوم بتوثيقه ، وأفضل إثباته على مقعد ثم من خلال تحطم: P.

pmukherj هل يمكنك من فضلك مراسلتي على Gitter أو Hangouts ([email protected]). دعنا نسير مع هذا. أنا بحاجة إلى مزيد من المعلومات حول الإعداد الخاص بك.
توجد رسالة LOCAL_POSITION_TARGET_NED ورسالة ATTITUDE_TARGET ليستا في mavros. سوف أقوم بتصحيحه كجزء من إعادة بناء الكود الذي نريد القيام به للإضافات setpoint. أيضًا بالنسبة إلى التدفقات المستهدفة لوحدة التحكم هذه ، تحتاج إلى دفقها بشكل صريح على جانب PX4.
التحكم في Offboard هو تجريبي ، وهذا البرنامج المساعد لم يتم اختباره ، لذلك لست متأكدًا من أين تسوء الأمور حتى الآن. أحتاج المزيد من البيانات.

آسف ، حسنًا ، لقد كنت مشغولًا في القيام ببعض رحلات DAQ.
لذا ، يبدو ATTITUDE_TARGET بالضبط مثل ما أحتاجه للتأكد من أن pixhawk يحاول الحصول على أوامر عصا التحكم التي أرسلها. لدي 3DR ، pixhawk مع جهاز كمبيوتر أكبر مثبت على متن الطائرة (تعمل حزمة px4 بشكل رائع بالمناسبة ، فقط في عداد المفقودين بعض أوضاع الطيران).

يمكنني النظر في ذلك أو هل لديك مفترق مع تنفيذ هذا؟

pmukherj أنا أتطلع إلى الحصول على أهداف الموقف والموضع في البرنامج المساعد visualiser الخاص بي. توجد بعض مشكلات tf ، لذا فأنا أقوم بحلها.
ما هو الكمبيوتر المصاحب على متن الطائرة الذي تستخدمه؟
فيما يتعلق بالأهداف ، لا تحتاج حقًا إلى تنفيذ أي شيء. ما عليك سوى استخدام جسر UDP الموجود لدينا على mavros وتصحيح الرابط من خلال QGC على جهاز الكمبيوتر الخاص بك. يمكنك عرض ورسم كل شيء هناك.

آسف! نقل المكاتب على مدى سنوات جديدة.
أنا أختبر مع جميع أنواع أجهزة الكمبيوتر (Odroids و TK1's وما إلى ذلك). سآخذ صدعًا في استخدام جسر UDP.
أظن أنه يمكنني استخدام أي من اتصالات القياس عن بعد في pixhawk؟ بالإضافة إلى الكمبيوتر المصاحب ، لدي أيضًا اتصال لاسلكي بأحد منافذ القياس عن بُعد (كما هو قياسي مع 3DR pixhawk).

نعم. تم التحقق من أن نقاط الضبط تعمل بالفعل! تقبله نقاط الضبط الداخلية ، وتكون مخرجات وحدة التحكم مرئية أيضًا. الآن لاختبارات الطيران :). تمنى لي الحظ.

pmukherj يمكنك توصيل الرفيق بمنفذ TELEM2 وتشغيله عبر extras.txt في بطاقة microSD الخاصة بك.
جيد أن نقاط الضبط تعمل. حظا سعيدا مع الرحلات الجوية.
يرجى التحقق من: http://www.pixhawk.org/dev/ros/mavros_offboard
يوجد في الجزء السفلي سطر رمز فارغ ، حيث يجب عليك إضافة الأمر mavros الذي استخدمته للتغيير إلى وضع offboard (كخيار للأشخاص إذا كانوا يريدون)

أيضًا ، هل يمكنك إضافة طلب اختبار الطيران هنا: http://www.pixhawk.org/dev/offboard_control/testing

فقط ضع النقاط ، وسأقوم بتنظيفها.

vooon يعمل المكون الإضافي

يمكننا إضافة حد أدنى / أقصى.

لاحظ أنه لم يكن مكونًا إضافيًا ، عقدة.

حقيقي ؛)
أعتقد أنني سأفعل ذلك كمكوِّن إضافي ، حيث يبدو البرنامج النصي / python مربكًا إلى حد ما + غير موثوق به.

لا أريد البرنامج المساعد لأنه يعيد اختراع العجلة. الحد الأقصى لإعادة الكتابة من لغة python إلى C ++.
ولكن في الحقيقة ليست هناك حاجة عندما يعمل mavteleop على سطح المكتب ويتحكم في مافروس OBC.

vooon هل فكرت بطريقة لحل هذا ؟

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات