التعليق الذي تحتاجه لنشر التحويل بالطريقة الأخرى غير صحيح.
يجب استخدام واحد فقط من هؤلاء:
سوف يقاتلون مع بعضهم البعض ويتسببون في تعويضات مستمرة بحيث يفوز آخر شخص تم تلقيه في أي وقت. من المحتمل أن يكون الإصدار الأول الذي تم اختباره قد تسبب في فصل الشجرة عن طريق الإصلاح غير المقصود وإضافة المكالمة الثانية التي أخفتها.
وأثناء النظر في هذا الرمز. من الأنظف والأكثر كفاءة نشر ناقل للتحويلات الثابتة للاستفادة من الإغلاق بدلاً من نشر سلسلة من التحويلات الفردية.
لقد طرحنا هذا هنا من قبل: https://github.com/mavlink/mavros/pull/1252#issuecomment -503084522
@ TSC21 لمعلوماتك
jkflyingbaumanta هل يا رفاق محاولة لاختبار في حالة وجود قضية الطابع الزمني مع إزالة الناشر مكررة؟
tfoote لقد كنت محقًا في تعليقك على القضية رقم 388 . يبدو أن حلقة tf في mavros مسؤولة عن الحصول دائمًا على tf في ros :: Time :: now ().
لقد قمت بوضع مستمع tf في كود التجنب الذي قام باسترداد التحويلات في الطابع الزمني لآخر pointcloud وفي ros :: Time :: now () وقمت بطباعة كلا التحويلين. عندما كانت الطائرة بدون طيار تتحرك ، كنت أتوقع أن تكون التحولات مختلفة قليلاً. باستخدام Mavros 0.29.2. كان كلا التحولين متطابقين دائمًا حتى لو اعتقدت أن الطوابع الزمنية لم تكن كذلك. باستخدام Mavros PR # 1252 ، كانت التحويلات مختلفة.
حسنًا ، أظن أن سبب عدم عمل رمز المكون الإضافي odom
يرجع إلى قيود غامضة على الموضوعات المغلقة - لا يمكنك نشر رسائل مختلفة إلى موضوع مغلق من نفس العملية.
راجع https://github.com/ros/ros_comm/issues/146 و https://answers.ros.org/question/261815/how-can-i-access-all-static-tf2-transforms/.
الحل البديل لذلك هو إنشاء متجه لجميع التحويلات ونشرها في لقطة واحدة (قم بالتمرير إلى وظيفة TF2 المتخصصة http://docs.ros.org/melodic/api/tf2_ros/html/c++/classtf2__ros_1_1StaticTransformBroadcaster.html#a83d0664cb0cc85688b60a2236 )