1. 硬件
Arduino控制板:1个;
舵机:1个;
杜邦线:若干;
LED等:1个;使用Arduino自己带的,当收到消息时,亮;15ms后再灭。
1.1 接线方式
我的舵机长相如下:
接线方式为:舵机的Ground接Arduino的地线
Power接Arduino的5V线
Control接Arduino的9号PIN。
来张照片(略麻烦):
2 程序
#include <ros.h>
#include <std_msgs/UInt16.h>
#include <Servo.h>
ros::NodeHandle nh;
Servo myservo;
int servoPin=9;
void messageCb(std_msgs::UInt16 servo_msg){
digitalWrite(13,HIGH);
myservo.write(servo_msg.data); // tell servo to go to position in variable 'pos'
delay(15);
digitalWrite(13,LOW);
}
ros::Subscriber<std_msgs::UInt16> sub("servo_led", &messageCb );
void setup()
{
pinMode(13, OUTPUT);
myservo.attach(servoPin);
nh.initNode();
nh.subscribe(sub);
}
void loop()
{
nh.spinOnce();
delay(1);
}
程序不解释!
2.1 程序下载和运行
首先:roscore
其次:rosrun rosserial_python serial_node.py /dev/ttyACM0
/dev/ttyACM0 这个是自己的端口号
最后:rostopic pub -1 /servo_led std_msgs/UInt16