The STM32 board
ถ้าการใช้ Arduino ไม่เพียงพอต่อการใช้ในหุ่นยนต์ของเรา ไม่ต้องห่วง ในปัจจุบันมี ARM-based controller boards อยู่มากมาย เช่น STM32 microcontroller based ที่เรียกว่า NUCLEO
STM32 PinOut
เริ่มเขียนโปรแกรมโดยใช้ STM32 board
สมัครสมาชิกที่เว็บไซต์ mbed
https://os.mbed.com/หลังจากสมัครสมาชิกเสร็จแล้ว เข้าไปดู board ที่ระบบรองรับ
https://os.mbed.com/platforms/เราจะเลือก board ของเราได้จากหน้านี้ ในที่นี้เราจะเลือก NUCLEO F411RE board
หรือเข้าไปที่หน้านี้ https://os.mbed.com/platforms/ST-Nucleo-F411RE/เราจะเห็นปุ่ม Add to your mbed compiler อยู่ตรงทางขวาของเพจ ให้กดปุ่มเพื่อที่จะเพิ่ม board นี้เข้า mbed compiler
หลังจากเพิ่ม board เข้า compiler แล้ว เราจะเขียนโปรแกรมได้โดยการเข้าไปที่ mbed compiler หรือเข้าไปที่ https://os.mbed.com/compiler/
กดสร้างโปรแกรมใหม่ขึ้นมา เพื่อทดสอบการทำงานของ board โดยใช้โปรแกรมตัวอย่าง mbed blinkly
เปิดไฟล์ maim.cpp แล้วกด compile
หลังจากนั้นจะได้ไฟล์ binary (.bin) ซึ่งสามารถนำไปใส่ไว้ใน flash drive ของ board
ถ้าเห็นไฟสีเหลืองกระพริบๆ แสดงว่า STM32 board ของเราพร้อมสำหรับการทำ ROS Node แล้ว
เริ่มเขียนโปรแกรม STM32 board ให้เป็น ROS Node
เปิด mbed compiler ขึ้นมาหรือเข้าไปที่ https://os.mbed.com/compiler/ แล้วกด Import
ทางช่อง Search ขวามือ ให้พิมพ์คำว่า rosserial_mbed ลงไป แล้วกด Search
จากนั้นจะเห็นรายชื่อโปรแกรม ให้กดเลือกที่ rosserial_mbed_hello_world_publisher_kinetic ของ Gary Servin
และให้ Import! ที่อยู่เหนือปุ่ม Search ระบบจะเด้งหน้าต่างขึ้นมา ให้ติ๊กที่ Update all แล้วกด Import
เปิดไฟล์ main.cpp แล้วกด Compile
จากนั้นก็ทำแบบเดิมเซฟไฟล์ .bin แล้วก๊อปไปไว้ใน mbed drive
เมื่อก๊อปไฟล์เสร็จแล้ว board จะรัน code นั้นโดยอัตโนมัติ เป็นอันจบขั้นตอน เหลือแค่ทดสอบรัน ROS ทางฝั่ง PC
Start roscore : เปิด Terminal
$ roscore
Start the ROS server: เปิด Teminal tab ใหม่ขึ้นมา
$ rosrun rosserial_python serial_node.py /dev/ttyACM0
List ROS topics: เปิด Terminal tab ใหม่ขึ้นมา
$ rostopic list -v
จะเห็นว่ามี Subcribed topics ที่ชื่อว่า
/toggle_led
ขึ้นมา ซึ่งเป็นการรอสั่ง toggle led หลังจากได้รับ message ที่เป็นชนิดstd_msgs/Empty
Test toggle led:
$ rostopic pub -1 /toggle_led std_msgs/Empty "{}"
หลอดไฟสีเหลืองที่ board จะติดขึ้นมา หากใช้คำสั่งเดิมอีกครั้งหลอดไฟจะดับ
จากนี้เราสามารถเขียนโปรแกรม mbed board โดยใช้ภาษา C++ ซึ่งสามารถทำตาม Tutorials ได้จากลิ้งค์นี้ http://wiki.ros.org/rosserial_mbed/Tutorials