ROS与Arduino学习(七)小案例节点通信

ROS与Arduino学习(七)小案例节点通信

ROS与Arduino学习(七)小案例节点通信

 

Tutorial Level:Logging日志

Next Tutorial:电机控制(基于rosserial_arduino)

       本节主要用一个小的案例介绍用PC客户端对Arduino的灯进行控制。共有两个节点,一个几点在PC上将用户的数据输入,并将数据发布到话题中,然后Arduino的节点订阅话题获取消息对灯进行控制。

 

Tips 1 PC端节点程序

 整体代码如下所示:

#include "ros/ros.h"  
#include "std_msgs/Int16.h"  
#include "std_msgs/String.h" 
#include <cstdlib>  
#include <sstream>  
int main(int argc, char **argv)  
{  
    int count;
    ros::init(argc, argv, "Control2Arduino");  
    

    if (argc != 2)
    {
        ROS_INFO("usage: add_speed v");
        return 1;
    }
    ros::NodeHandle n;  

    std::stringstream ss; 

    std_msgs::Int16 msg;  


    ros::Publisher chatter_pub = n.advertise<std_msgs::Int16>("Pc2Arduino", 1000);  
      
    ros::Rate loop_rate(10);  
  
    while (ros::ok())  
    {  
        msg.data = atoll(argv[1]);//读入数据
  
        chatter_pub.publish(msg); 
   
        ros::spinOnce(); 
       
        loop_rate.sleep();  
    }  
      
      
    return 0;  
    }  

 

代码解释:

1、运行功能包时需要给定一个参数,我们读取argv[1],并将其作为速度值消息发布到话题中。

2、程序开始有一个参数检测,当输入为两个值时(其中一个值为回车),此时继续运行后面的代码,如果错误则返回异常。

        if (argc != 2)
	{
		ROS_INFO("usage: add_speed v");
		return 1;
	}

 3、读取数据

 msg.data = atoll(argv[1]);//读入数据

 4、发布数据

 

Tips 2 Arduino端节点程序

 

程序如下:

#include <ros.h>
#include <std_msgs/String.h>
#include <std_msgs/Int16.h>

ros::NodeHandle nh;

std_msgs::String str_msg;
//publish and subscribe
//
ros::Publisher pub("Arduino2PC",&str_msg);

void Control(const std_msgs::Int16& cmd_msg)
{
  if(cmd_msg.data == 1)
  {
    digitalWrite(13, LOW);  
  }
  if(cmd_msg.data == 0)
  {
    digitalWrite(13, HIGH);  
  }

}

ros::Subscriber <std_msgs::Int16>  sub("Pc2Arduino", &Control );

char hello[]="hello world!";




void setup()
{
        pinMode(13, OUTPUT);
        digitalWrite(13, HIGH);
	nh.initNode();
	nh.advertise(pub);// publish
	nh.subscribe(sub);// subscribe 

}

void loop()
{
	str_msg.data = hello;
	pub.publish(&str_msg);//publish a message
	nh.spinOnce();
	delay(1000);


}

 

 

 

Tips 3 测试程序

#新终端打开
$ roscore
#新终端打开
$  rosrun rosserial_python serial_node.py _port:=/dev/ttyUSB0
#新终端打开
$  rosrun PCSystem Control2Arduino 1

 

posted @ 2018-04-26 15:43 #Cloud 阅读(...) 评论(...) 编辑 收藏

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值