在樹梅派上跑ROS控制Arduino Servo

Harry
May 6, 2021

--

實操影片:YouTube

樹莓派版本:Raspberry Pi 4B 4GB

操作系統:Ubuntu 18.04 LTS

ROS版本:melodic

使用連接方式:USB

Arduino型號:Arduino Mega2560

馬達型號:SG90 servo

I/O
Ubuntu18.04LTS 桌面

第一步:在樹莓派上開啟Arduino IDE,Arduino板子接好,燒入以下code

Arduino Code:

#if defined(ARDUINO) && 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); //set servo angle, should be from 0-180
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);
}

第二步:快捷鍵 CTRL+ALT+T 開啟Terminal(終端)

開啟終端

接著輸入以下指令來開啟roscore

roscore
roscore 指令

第三步:開第二個Terminal

open sec Terminal

之後輸入以下指令,來搭起樹莓派與Arduino的通訊節點

rosrun rosserial_python serial_node.py _port:=/dev/你的USB口號碼

這個USB口,可以在Arduino IDE找到,我目前設備是在/dev/ttyACM0

第四步:開啟第三個Terminal

輸入以下指令來送出馬達運動角度到Arduino上

rostopic pub servo std_msgs/UInt16  角度

角度值 0 到 180 (度)

push angle 0 to arduino

按CTRL+C可以結束一個node,在用新指令來驅動他運動

在這邊用0度跟180度來回測試

push angle 180 to arduino

--

--