arduino使用ros串口通讯

本文详细介绍了如何在Arduino IDE中集成ROS库,包括rosserial_arduino的安装、ros_lib库的配置步骤。并通过Helloworld例程及LED控制实例,演示了如何使用ROS库进行Arduino项目开发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(一)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次的意思
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值