Rosserial و STM32

نظام التشغيل ROS الآلي هو منصة قوية إلى حد ما لإنشاء أنظمة روبوتية ، والتي تشمل كل ما هو ضروري لتطوير مشاريعك من أبسط مكونات البرامج المسماة "العقد" وبروتوكول تبادل البيانات إلى بيئة المحاكاة لمنصة Gazebo الآلية. في الغالب يتم استخدام ROS بالاقتران مع هذه المتحكمات الدقيقة على منصة Arduino. الإنترنت مليء بجميع أنواع البرامج التعليمية على مجموعة من ROS و Arduino.

لا توجد معلومات حاليًا عن استخدام نظام التشغيل ROS الآلي جنبًا إلى جنب مع متحكم STM32. الإنترنت مليء فقط بالأسئلة.



ابدأ


للعمل مع STM32 نحتاج إلى STM32CubeMX و SystemworkbenchforSTM32. هناك الكثير من المعلومات حول تثبيتها على الشبكة ، ونحن لن نتطرق إلى ذلك.

لتكوين وحدة التحكم ، انتقل إلى STM32CubeMX

إنشاء مشروع جديد.



سنختار متحكمًا ، لدي STM32f103c8t6.



في المحيط ، نشير إلى أن مرنان الكوارتز الخارجي متصل ، ولدينا 2 منهم



قم بتكوين الاستنتاجات التي يمكنك من خلالها تمكين تصحيح وحدة التحكم (إذا نظرنا إلى الأمام ، إذا كان المشروع في C ++ ، فقد لا يعمل التصحيح)



دعونا تكوين منفذ 13 الإخراج C ، يتم توصيل الصمام المدمج في ذلك.



إعداد دبابيس UART.



انتقل إلى Lock_configuration وقم بإجراء الإعدادات كما في الصورة.



دعنا ننتقل إلى تكوين أكثر تفصيلا من المحيط


UART

تحديد سعر تبادل البيانات.



إعداد DMA.





تكوين المقاطعة ، تحتاج إلى تحديد مقاطعة عمومية على UART



إعداد GPIO




إعداد بناء المشروع




نحن في انتظار أن نلتقي



نفتح المشروع



إنشاء مشروع لـ Workbench System لـ STM32


بعد أن فتحت هذا المشروع في SW4STM32 ، بعد إضافة بعض التحكم الطرفية ، وتجميعه ، وامض وحدة التحكم ، لم أحصل على أي نتيجة.

لذلك ، نقوم بإنشاء مشروع جديد وفقًا للتعليمات التالية ، وننقل التهيئة التي حصلت عليها STM32CubeMX.

إنشاء مشروع لـ Workbench System لـ STM32


1) انقر فوق ملف> جديد> مشروع C

2) مشروع C
1) أدخل اسم المشروع
2) حدد نوع المشروع: Executable> Ac6 STM32 MCU Project
3) حدد أدوات: Ac6 STM32 MCU GCC
4) انقر فوق "التالي"



3) اختيار متحكم
1) انقر فوق "إنشاء لوحة مخصصة جديدة"
1) حفظ تعريف مجلس جديد
2) أدخل اسم اللوحة الجديدة: STM32F103
3) اختر لوحة رقاقة: STM32F1
4) حدد MSU: STM32F103RCTx
5) انقر فوق موافق.
2) حدد اللوحة التي أنشأتها للتو!
1) حدد سلسلة: STM32F1
2) اختر لوحة: STM32F103
3) انقر فوق "التالي"



4) نحن نربط المكتبات HAL



5) انقر فوق "إنهاء"

إضافة الملفات


انسخ محتويات src وملفات inc التي أنشأها المكعب في ملفاتنا ، وانسخ أيضًا STM32F103C8Tx_FLASH.ld



لاختبار صحة STM32 نفسها والرمز في حلقة أثناء ، اكتب الأسطر التالية

HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13); HAL_Delay(100); 

نحن هنا فقط وميض الصمام.

أثناء التجميع ، قد تحدث مشاكل في ملف stm32f1xx_hal_msp.c

تم إصلاح الخطأ المرتبط بوظيفة الفراغ HAL_MspInit (void) كما يلي.
افتح المجلد مع مكتبة HAL_Driver ، وانتقل إلى / src ، وافتح الملف stm32f1xx_hal_msp_template.c وقم بالتعليق على نفس الوظيفة:



إعادة التجمع (يجب التجميع دون أخطاء)

نسيت أن أذكر أداة st-flash اللازمة لبرامج التحكم الثابتة.

 $ sudo apt-get install cmake $ sudo apt-get install libusb-1.0.0 $ git clone github.com/texane/stlink.git $ cd stlink $ make release $ cd build/Release; sudo make install $ sudo ldconfig 

باستخدام رابط ST

فحص الكشف عن وصلة ST:

 $ st-info —probe 

استجابة لذلك ، يجب أن نرى شيئًا مثل:

 Found 1 stlink programmers serial: 563f7206513f52504832153f openocd: "\x56\x3f\x72\x06\x51\x3f\x52\x50\x48\x32\x15\x3f" flash: 262144 (pagesize: 2048) sram: 65536 chipid: 0x0414 descr: F1 High-density device 

لمسح وحدة التحكم ، انتقل إلى مجلد مشروعنا وفلاش وحدة التحكم من خلال الأمر التالي:

 cd workspace/ros_stm32_2/ st-flash write Debug/ros_stm32_2.bin 0x8000000 

تم الفحص كل شيء يعمل. نحن نمضي قدما.

نظرًا لأن مكتبات ROS مكتوبة بلغة C ++ ، فإننا نترجم مشروعنا إلى مشروع C ++ ، ونغير تنسيق main.c ، stm32f1xx_hal_msp.c ، ملفات stm32f1xx_it.c في .cpp

نحن نقوم باستنساخ مستودع التخزين الخاص بي مع نمو المكتبات والملفات الضرورية للعمل في النظام الأساسي STM32.

 git clone https://gitlab.com/ivliev123/ros_lib 

أدخل المجلد المستنسخ في المشروع





دعنا نذهب إلى إعدادات المشروع (الخصائص) ، أولاً وقبل كل شيء ، قم بتوصيل المكتبة ، اذهب ...







تغيير التصميم





نقوم بتنفيذ التحسين





حسنًا ، سنقوم الآن بإجراء بعض التغييرات على main.cpp ، نظرًا لأنها فارغة تقريبًا ، فإن أول ما نقوم به هو توصيل مكتبة ROS ، والمكتبات للتفاعل مع موضوعات ROS ، أو بالأحرى أنواع بيانات هذه المواضيع.

 #include <ros.h> #include <std_msgs/String.h> #include <std_msgs/UInt16.h> 

قم بإنشاء عقدة تنشر هذا الموضوع وتقبله

 void led_cb( const std_msgs::UInt16& cmd_msg){ HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13); } ros::NodeHandle nh; std_msgs::String str_msg; ros::Publisher chatter("chatter", &str_msg); ros::Subscriber<std_msgs::UInt16> sub("led", led_cb); 

تهيئة العقدة والمواضيع الرئيسية.

  nh.initNode(); nh.advertise(chatter); nh.subscribe(sub); 

نضيف أيضًا متغيرات للعمل مع الوقت وما سننشره.

 const char * hello = "Hello World!!"; int chatter_interval = 1000.0 / 2; int chatter_last = HAL_GetTick(); 

في حين حلقة ، سيكون لدينا ما يلي. سننشر العبارة بعد وقت معين.

  if (nh.connected()) { if(HAL_GetTick() - chatter_last > chatter_interval) { str_msg.data = hello; chatter.publish(&str_msg); chatter_last = HAL_GetTick(); } } nh.spinOnce(); 

وضع مشروع

قد تظهر الأخطاء التالية:







إعادة تجميع وفلاش.

الآن تتفاعل مباشرة مع ROS.
في محطة واحدة ، قم بتشغيل ROS.

 roscore 

في المدى التالي العقدة.

 rosrun rosserial_python serial_node.py /dev/ttyUSB0 

نحصل على ما يلي

 [INFO] [1551788593.109252]: ROS Serial Python Node [INFO] [1551788593.124198]: Connecting to /dev/ttyUSB0 at 57600 baud [INFO] [1551788595.233498]: Requesting topics... [INFO] [1551788595.258554]: Note: publish buffer size is 2048 bytes [INFO] [1551788595.259532]: Setup publisher on chatter [std_msgs/String] [INFO] [1551788595.275572]: Note: subscribe buffer size is 2048 bytes [INFO] [1551788595.276682]: Setup subscriber on led [std_msgs/UInt16] 

بعد ذلك ، في نافذة طرفية جديدة ، انظر إلى الموضوعات

 rostopic list 

نحصل على المواضيع التالية:

 /chatter /diagnostics /led /rosout /rosout_agg 

في موضوع الثرثرة ، تقوم وحدة التحكم بنشر العبارة.

يمكننا الاستماع إليها من خلال الفريق

 rostopic echo /chatter 



الآن إرسال البيانات إلى الموضوع بقيادة الولايات المتحدة.

 rostopic pub /led std_msgs/UInt16 "data: 0" 

وعلينا تغيير حالة الصمام.

Source: https://habr.com/ru/post/ar443022/


All Articles