让我们首先来看一下如何在ROS中使用Arduino。
现在其实我们已经一步一步迈入实用阶段了。使用传感器是创建你自己机器人的第一步。
Arduino环境的搭建
Arduino的搭建相当简单。
1. 从arduino.cc/en/Main/Software下载最新的IDE。在你的系统中解压。
2. 执行以下命令让你的帐号可以打开串口设备
sudo adduser yourname dialout
3. 连接你的Arduino设备,进行测试
如果你的Sketch的Tool > Port 菜单不为灰色的话,选中他,然后你的Arduino可以正常使用了。
键入下列代码,
首先编译 Sketch > Verify/Compile
然后上传到你的Arduino File > Upload
const unsigned int LED_PIN = 13;
const unsigned int PAUSE = 10000;
void setup(){
pinMode(LED_PIN,OUTPUT);
}
void loop(){
digitalWrite(LED_PIN,HIGH);
delay(PAUSE);
digitalWrite(LED_PIN,LOW);
delay(PAUSE);
}
你会看到板子上的红灯以10秒为周期闪灭。
在ROS中使用Arduino
你现在终于让Arduino在你的环境里面工作了,让我们在Arduino中使用ROS的库吧。
1. 安装ROS相关包
sudo apt-get install ros-hydro-rosserial-arduino
cd /opt/ros/hydro/share/rosserial_arduino/
./make_libraries.py <sketchbook>/libraries/
2. 第一个程序
从下列工程中找到example5_1.ino
https://github.com/AaronMR/Learning_ROS_for_Robotics_Programming
编译并上传到你的Arduino
在你的终端分别运行下列命令:
终端1
roscore
终端2 (注意ttyACM0的设备名可能根据你使用的Arduino不同而不同,可以用Sketch确认)
rosrun rosserial_python serial_node.py /dev/ttyACM0
终端3
rostopic echo /chatter
然后你就会从终端3上得到以下Log的循环输出
data: chapter4_tutorials
---
data: chapter4_tutorials
---
data: chapter4_tutorials
---
data: chapter4_tutorials
---
3. 第二个程序。
example5_1相当简单易懂我们就不再做说明,现在来看一下example5_2
这下我们终于可以干些和硬件相关的活了。
终端1和终端2的命令不变
在程序里,我们可以看到只要接收到/toggle_led topic的消息,我们就会改变红色LED的明亮状态。
void messageCb( const std_msgs::Empty& toggle_msg){
digitalWrite(13, HIGH-digitalRead(13)); // blink the led
}
ros::Subscriber<std_msgs::Empty> sub("toggle_led", &messageCb );
所以在终端3中我们的命令是
rostopic pub toggle_led std_msgs/Empty -r 0.5
即每2秒发送一个空命令。随着终端3的命令,我们可以看到Arduino的LED周期性的闪烁了。
Arduino支持的传感器很多,相信很快你就能从ROS中获取各种各样的传感器数据了。那么,下一步你想要干什么呢?
参考文档:
《Learning ROS for Robotics Programming》 Chapter 4