文章目录
(一)arduino IDE添加ros库
(1)rosserial_arduino安装
sudo apt-get install ros-kinetic-rosserial-arduino
sudo apt-get install ros-kinetic-rosserial
(2)把 ros_lib 安装到Arduino的开发环境中
sketchbook为Arduino安装以后的项目文件夹路径,注意最后有个 .
cd <sketchbook>/libraries
rm -rf ros_lib
rosrun rosserial_arduino make_libraries.py .
(3)再次打开arduino IDE可以看到ros_lib库
(二)测试:ROS_lib中的Helloworld例程
打开example中的Helloworld程序,烧写入arduino中。
运行一下程序打开ros master:
roscore
rosrun rosserial_python serial_node.py /dev/ttyACM0
ubuntu16.04中写入订阅消息程序:可以看到接收到Hello world消息
#!/usr/bin/env python
import rospy
from std_msgs.msg import String
def callback(data):
rospy.loginfo(data.data)
def listener():
rospy.init_node('listener', anonymous=True)
rospy.Subscriber("chatter", String, callback)
rospy.spin()
if __name__ == '__main__':
listener()
(三)控制arduino上的led
在arduino烧写入如下程序:订阅/led_control消息,消息类型std_msgs/Int16
#include <ros.h>
#include <std_msgs/Int16.h>
int control_command=0;
ros::NodeHandle nh;
void messageCb(const std_msgs::Int16& message) //注意要有&
{
control_command= message.data;
if (control_command == 0)
{
digitalWrite(13, HIGH);
}
if (control_command == 1)
{
digitalWrite(13, LOW);
}
}
ros::Subscriber<std_msgs::Int16> sub("led_control",&messageCb);
void setup()
{
nh.initNode();
nh.subscribe(sub);
pinMode(13, OUTPUT);
}
void loop()
{
delay(1000);
}
ubuntu16.04 终端输入:
rostopic pub -1 /led_control std_msgs/Int16 0 #或1 控制led灯,-1是发布1次的意思