أهلا،
أقوم بالتحكم القائم على الرؤية والكاميرا على الطائرة بدون طيار متجهة لأسفل.
لذا فإن تقدير الموضع يكون في إطار الجسم.
لقد وجدت الموضوع / mavros / setpoint_velocity / cmd_vel يمكن استخدامه لتغيير سرعة الطائرة بدون طيار ولكن يبدو أنه في إطار NED.
هل هناك موضوع مثل / mavros / setpoint_velocity / cmd_vel لكن استخدام إطار الجسم؟
أو أحتاج إلى تحويل نقطة ضبط السرعة الخاصة بي من إطار الجسم إلى إطار NED لتنفيذه؟
حاولت العثور على شيء يمكنني استخدامه ووجدت هذا الرمز. https://github.com/weiweikong/px4_velocity_control_keyboard/blob/master/src/px4_velocity_control_node.cpp
vs_body_axis.twist.linear.x = vs.twist.linear.x * cos(uavYawENU) + vs.twist.linear.y * sin(uavYawENU);
vs_body_axis.twist.linear.y = vs.twist.linear.x * sin(uavYawENU) - vs.twist.linear.y * cos(uavYawENU);
يبدو أن هذا هو أفضل حل يمكن أن أجده.
لست متأكدًا مما إذا كان Yaw من وحدة IMU فقط أو من اندماج IMU والمغناطيسية.
هل لديك بعض التعليقات أو الأفكار حول هذا؟
مافروس: 0.17.3
ROS: نيلي
أوبونتو: 14.04
APM: المروحية V3.4-dev (fe724032)
bshang2 @ mechatronics-990 : ~ / simulation / ardupilot / ArduCopter $ roslaunch ardupilot_sitl_gazebo_plugin erlecopter_mark.launch
... تسجيل الدخول إلى /home/bshang2/.ros/log/ca9213bc-89bf-11e7-b657-1803733b65bb/roslaunch-mechatronics-990-28079.log
التحقق من دليل السجل لاستخدام القرص. هذا قد يستغرق بعض الوقت.
اضغط على Ctrl-C للمقاطعة
تم التحقق من استخدام قرص ملف السجل. الاستخدام <1 غيغابايت.
بدأ خادم roslaunch http: // mechatronics-990 : 45006 /
معلمات واضحة
المعلمات
الإيماءات
/
شرفة المراقبة (gazebo_ros / gzserver)
gazebo_gui (gazebo_ros / gzclient)
مافروس (mavros / mavros_node)
spawn_erlecopter (gazebo_ros / spawn_model)
سيد جديد بدء التشغيل التلقائي
العملية [الرئيسية]: بدأت بـ pid [28094]
ROS_MASTER_URI = http: // localhost : 11311
الإعداد / run_id إلى ca9213bc-89bf-11e7-b657-1803733b65bb
العملية [rosout-1]: بدأت بـ pid [28107]
بدأت الخدمة الأساسية [/ rosout]
عملية [mavros-2]: بدأت بـ pid [28126]
العملية [spawn_erlecopter-3]: بدأت بـ pid [28133]
عملية [gazebo-4]: بدأت بـ pid [28134]
عملية [gazebo_gui-5]: بدأت بـ pid [28151]
بدأ البرنامج النصي spawn_model
توقفت عملية [gazebo-4] [pid 28134 ، كود الخروج 255 ، cmd / home / bshang2 / simulation / ros_catkin_ws / src / gazebo_ros_pkgs / gazebo_ros / scripts / gzserver -u -e ode / home / bshang2 / simulation / ros_catkin_ws / src /ardupilot_sitl_gazebo_plugin/ardupilot_sitl_gazebo_plugin/worlds/mark_world/mark.world __name: = gazebo __log: = / home / bshang2 / .ros / log / ca9213bc-89bf-11e7-b657-18037.
ملف السجل: /home/bshang2/.ros/log/ca9213bc-89bf-11e7-b657-1803733b65bb/gazebo-4 .log[INFO] [WallTime: 1503684250.172508] [0.000000] تحميل نموذج xml من معلمة ros[INFO] [WallTime: 1503684250.176886] [0.000000] في انتظار الخدمة / شرفة المراقبة / spawn_urdf_modelتوقفت عملية [gazebo_gui-5] [pid 28151 ، رمز الخروج 255 ، cmd / home / bshang2 / simulation / ros_catkin_ws / src / gazebo_ros_pkgs / gazebo_ros / scripts / gzclient __name: = gazebo_gui __log: = / home. / bshang تسجيل الدخول / ca9213bc-89bf-11e7-b657-1803733b65bb / gazebo_gui-5.log].ملف السجل: /home/bshang2/.ros/log/ca9213bc-89bf-11e7-b657-1803733b65bb/gazebo_gui-5 .log
^ C [spawn_erlecopter-3] القتل عند الخروج
[مافروس -2] قتل عند الخروج
Traceback (أحدث مكالمة أخيرة):
ملف "/ home / bshang2 / simulation / ros_catkin_ws / src / gazebo_ros_pkgs / gazebo_ros / scripts / spawn_model" ، السطر 301 ، في
sm.callSpawnService ()
ملف "/ home / bshang2 / simulation / ros_catkin_ws / src / gazebo_ros_pkgs / gazebo_ros / scripts / spawn_model" ، السطر 267 ، في callSpawnService
initial_pose، self.reference_frame، self.gazebo_namespace)
ملف "/home/bshang2/simulation/ros_catkin_ws/src/gazebo_ros_pkgs/gazebo_ros/src/gazebo_ros/gazebo_interface.py" ، السطر 28 ، في spawn_urdf_model_client
rospy.wait_for_service (gazebo_namespace + '/ spawn_urdf_model')
ملف "/opt/ros/indigo/lib/python2.7/dist-packages/rospy/impl/tcpros_service.py" ، السطر 159 ، في wait_for_service
رفع ROSInterruptException ("rospy shutdown")
rospy.exceptions.ROSInterruptException: إيقاف تشغيل rospy
^ C [روسوت -1] قتل عند الخروج
^ ج [سيد] قتل عند الخروج
جارٍ إيقاف تشغيل شاشة المعالجة ...
... اغلاق تجهيز الشاشة كاملة
منجز
bshang2 @ mechatronics-990 : ~ / simulation / ardupilot / ArduCopter $ roslaunch ardupilot_sitl_gazebo_plugin erlecopter_mark.launch
... تسجيل الدخول إلى /home/bshang2/.ros/log/e483c856-89bf-11e7-bb61-1803733b65bb/roslaunch-mechatronics-990-28603.log
التحقق من دليل السجل لاستخدام القرص. هذا قد يستغرق بعض الوقت.
اضغط على Ctrl-C للمقاطعة
تم التحقق من استخدام قرص ملف السجل. الاستخدام <1 غيغابايت.
بدأ خادم roslaunch http: // mechatronics-990 : 41224 /
معلمات واضحة
المعلمات
الإيماءات
/
شرفة المراقبة (gazebo_ros / gzserver)
gazebo_gui (gazebo_ros / gzclient)
مافروس (mavros / mavros_node)
spawn_erlecopter (gazebo_ros / spawn_model)
سيد جديد بدء التشغيل التلقائي
العملية [الرئيسية]: بدأت بـ pid [28618]
ROS_MASTER_URI = http: // localhost : 11311
الإعداد / run_id إلى e483c856-89bf-11e7-bb61-1803733b65bb
العملية [rosout-1]: بدأت بـ pid [28631]
بدأت الخدمة الأساسية [/ rosout]
العملية [mavros-2]: بدأت بـ pid [28656]
العملية [spawn_erlecopter-3]: بدأت بـ pid [28657]
عملية [gazebo-4]: بدأت بـ pid [28674]
عملية [gazebo_gui-5]: بدأت بـ pid [28678]
بدأ البرنامج النصي spawn_model
[INFO] [WallTime: 1503684293.653120] [0.000000] تحميل نموذج xml من معلمة ros
[INFO] [WallTime: 1503684293.657344] [0.000000] في انتظار الخدمة / شرفة المراقبة / spawn_urdf_model
[INFO] [WallTime: 1503684294.260952] [0.047500] خدمة الاتصال / شرفة المراقبة / spawn_urdf_model
[INFO] [WallTime: 1503684294.855628] [0.445000] حالة النشر: SpawnModel: نموذج تم إنتاجه بنجاح
انتهت عملية [spawn_erlecopter-3] بشكل نظيف
ملف السجل: /home/bshang2/.ros/log/e483c856-89bf-11e7-bb61-1803733b65bb/spawn_erlecopter-3*.log
bshang2 @ mechatronics-990 : ~ / simulation / ardupilot / ArduCopter $ rostopic echo -n1 / Diagnostics
رأس:
تسلسلها: 6456
ختم:
ثوانى: 6817
nsecs: 500000000
frame_id: "
الحالة:
bshang2 @ mechatronics-990 : ~ / simulation / ardupilot / ArduCopter $ روسرون مافروس checkid
نعم. تلقيت رسائل من 1: 1.
تم استلام 1231 رسالة من عنوان واحد
sys: قائمة
1: 1 0 ، 1 ، 2 ، 136 ، 152 ، 150 ، 24 ، 27 ، 29 ، 30 ، 32 ، 33 ، 162 ، 163 ، 164 ، 165 ، 42 ، 173 ، 178 ، 62 ، 193 ، 74 ، 35 ، 36 ، 241 ، 116
مرحبا يا من هناك،
يمكنك استخدام setpoint_raw.
http://wiki.ros.org/mavros#mavros.2BAC8 -Plugins.setpoint_raw
في نقطة الضبط المستهدفة ، يمكنك تغيير إطار الإحداثيات.
http://docs.ros.org/api/mavros_msgs/html/msg/PositionTarget.html
بالنسبة إلى setpoint_velocity
، سأضيف إصلاحًا يسمح بالاختيار بين LOCAL_NED
و BODY_NED
، نظرًا لأنه تم ضبطه حاليًا على LOCAL_NED
(https: / /github.com/mavlink/mavros/blob/master/mavros/src/plugins/setpoint_velocity.cpp#L81). في هذه الأثناء ، يمكنك استخدام setpoint_raw
وتعيين coordinate_frame
إلى FRAME_BODY_NED
أو MAV_FRAME::BODY_NED
(يجب أن يعمل كلاهما).
شكرًا AlexisTM و @ TSC21 ردك مفيد. سأحاول ذلك لاحقًا.
@ TSC21AlexisTM شكرا لمساعدتكم! يمكنني التحكم في السرعة في هيكل الجسم الآن. تم تسجيل الفيديو: https://www.youtube.com/watch؟v=dyUQfFYX3pk&feature=youtu.be
rostopic pub /mavros/setpoint_raw/local mavros_msgs/PositionTarget '{header: {stamp: now, frame_id: "world"}, coordinate_frame: 8, type_mask: 3527, velocity: {x: 0.1, y: 0, z: 0}}' -r 10
من الجيد معرفة
مرحبا cnpcshangbo ، شكرا لك على الفيديو.
أنشر هذا لمساعدة الآخرين في إزالة الارتباك الذي كان لدي.
على الرغم من أن قناع الإطار هو FRAME_BODY_NED = 8
، يجب أن يظل أمر ROS في ENU . يتم الاهتمام بتحويل ENU -> NED بواسطة شركة mavros.
في الواقع ، من الفيديو ، السلوك هو:
مرحبًا هوانج ،
شكرا لتوضيحكم.
آسف لسماع أن الأمر استغرق منك وقتًا طويلاً.
جهودك تساعد الآخرين.
شكرا
بو
Hoang Minh Chung [email protected] 2018 年 8 17 日 周五 11:09 写道 :
مرحبًا cnpcshangbo https://github.com/cnpcshangbo ، شكرًا لك على الفيديو.
أنشر هذا لمساعدة الآخرين في إزالة الارتباك الذي كان لدي.
على الرغم من أن قناع الإطار هو "FRAME_BODY_NED = 8" ، أمر ROSيجب أن يكون في ENU . سيتم إجراء تحويل ENU -> NED بواسطة
مافروس.
في الواقع ، من الفيديو ، السلوك هو:
- س = 0.1 -> إلى اليمين
- ص = 0.1 -> للأمام
من الواضح أنه لا يزال في ENU. ومع ذلك ، فقد كلفني هذا الارتباك أسبوعًا
نتف الشعر ...-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/mavlink/mavros/issues/792#issuecomment-413745084 ، أو كتم الصوت
الخيط
https://github.com/notifications/unsubscribe-auth/AEm3NdefOViosyJKxQlf2h0ZweC8lO6uks5uRjP9gaJpZM4PDCb2
.
أليس من المفترض أن تكون x للأمام و y إلى اليسار لـ BODY و x إلى الشرق ، و y إلى الشمال في إطار الخريطةNuno؟
هل أنا محق في حقيقة أن لدينا 3 اصطلاحات هنا:
1) NED: التقدير والتحكم على متن PX4
2) ENU: تنسيق الإدخال القياسي لرسائل أوامر mavros
3) NWU: نظام إحداثيات نموذجي في ROS
لا ، لا يوجد NWU في ROS.
http://www.ros.org/reps/rep-0103.html
لا ينبغي استخدام AlexisTM شمال أو شرق لتحديد اصطلاحات الجسم ، بل توجيهات مثل الجبهة ، اليسار.
تمام. لكن إذا لم أكن مخطئًا ، أعتقد أنه لا يزال لدينا 3 اتفاقيات؟
1) NED: التحكم على متن الطائرة
2) Right-Forward-Up: كيف تفهم مافروس نقاط الضبط الأولية (السرعة)
3) Forward-Left-Up: اتفاقية ROS
hmchung نحن
لاحظ أنه يجب أن يكون هناك اتفاقيتان فقط! NED على Pixhawk و ENU: أي شيء تفعله على ROS.
Forward-Left-Up (FLU) هي اتفاقية ROS لإطار الجسم. شرق-شمال-أعلى (ENU) هو اصطلاح ROS للإطار المحلي / الكلمة.
التعليق الأكثر فائدة
بالنسبة إلى
setpoint_velocity
، سأضيف إصلاحًا يسمح بالاختيار بينLOCAL_NED
وBODY_NED
، نظرًا لأنه تم ضبطه حاليًا علىLOCAL_NED
(https: / /github.com/mavlink/mavros/blob/master/mavros/src/plugins/setpoint_velocity.cpp#L81). في هذه الأثناء ، يمكنك استخدامsetpoint_raw
وتعيينcoordinate_frame
إلىFRAME_BODY_NED
أوMAV_FRAME::BODY_NED
(يجب أن يعمل كلاهما).