Pada tutorial kali ini kita akan mencoba untuk mengontrol sebuah servo melalui ros, kita akan membuat sebuah pogram pada arduino ide yang mampu menerima data dari ros yang kemudian mengirimkan datanya ke arduino melalui komunikasi serial.
Untuk lebih jelasnya ikuti langkah berikut:
#1 Hubungkan servo dengan arduino anda seperti berikut, disini saya menggunakan ardunio uno,
- Kabel kuning servo → pin 9 arduino
- Kabel merah servo → pin 5V arduino
- Kabel hitam servo → pin gnd arduino
#2 Copy koding berikut pada arduino anda
#if (ARDUINO >= 100) #include <Arduino.h> #else #include <WProgram.h>
#endif #include <Servo.h> #include <ros.h> #include <std_msgs/UInt16.h> ros::NodeHandle nh; Servo servo; void servo_cb( const std_msgs::UInt16& cmd_msg){ servo.write(cmd_msg.data); digitalWrite(13, HIGH-digitalRead(13)); //toggle led } ros::Subscriber<std_msgs::UInt16> sub("servo", servo_cb); void setup(){ pinMode(13, OUTPUT); nh.initNode(); nh.subscribe(sub); servo.attach(9); //attach it to pin 9 } void loop(){ nh.spinOnce(); delay(1); }
#3 Compile dan upload koding diatas
#4 Kemudian jalankan ROS anda dengan perintah "roscore"
roscore
#5 Kemudian jalankan node rosserial client yang berfungsi untuk menerima dan mengirimkan data, pastikan anda memilih port yang sesuai dengan port arduino anda, disini port arduino saya yaitu /def/ttyACM0
rosrun rosserial_python serial_node.py /dev/ttyACM0
Jika keluar seperti diatas maka arduino anda berhasil terhubung dengan ros
#6 Kemudian untuk menggerakan servo melaui ros, buka terminal baru, kemudian ketikkan perintah berikut
rostopic pub /servo std_msgs/UInt16 0
Saat anda menjalankan perintah diatas maka servo anda akan berputar ke arah 0 derajat, anda dapat menggati akan 0 dengan angka lain dari 0 samapi 180, jika anda menggetikkan 90 maka servo aka bergerak ke posisi 90 derajat
- rostopic pub merupakan perintah ros untuk mengirimkan data melalui topic,
- servo merupakan nama topic yang diterima oleh arduino, topic servo sendiri sudah kita definisikan pada bagian "ros::Subscriber<std_msgs::UInt16> sub("servo", servo_cb);"
- std_msgs/UInt16 merupakan tipe topic dari servo
- 0 merupakan data yang akan dikirimkan
0 Komentar