Ubuntu16.04LTS 下ros(kinetic)的arduino应用(三)

Ubuntu 16.04下arduino示例ros_lib例程Blink
介绍:

  • 该文主要讲述如何通过rosserial创建subscribers(订阅者),点亮Arduino开发板上的LED
  • 使用例程为应用(一)中Arduino IDE 文件->示例->ros_lib->Blink

示例中的代码如下:

/* 
 * rosserial Subscriber Example
 * Blinks an LED on callback
 */

#include <ros.h>        //包含了标准ROS类的声明
#include <std_msgs/Empty.h>     //包含消息头文件

ros::NodeHandle  nh; /*(节点句柄)对象是你的程序用于和ROS系统交互的主要机制。创建此对象会将你的程序注册为ROS节点管理器的节点。最简单的方法就是在整个程序中只创建一个NodeHandle对象*/

void messageCb( const std_msgs::Empty& toggle_msg) /*定义回调函数messageCb,且形式参数为常量消息引用值,消息类型是std_msgs::Empty,消息名称是toggle_msg*/
{
  digitalWrite(13, HIGH-digitalRead(13));   // blink the led
}

ros::Subscriber<std_msgs::Empty> sub("toggle_led", &messageCb );/*实例化一个订阅,且含有两个参数,主题名toggle_led与回调函数,且主题类型为std_msgs::Empty*/

void setup()    //Arduino的Setup函数,用于初始化ROS节点处理,并宣告所有的发布或订阅
{ 
  pinMode(13, OUTPUT);
  nh.initNode();
  nh.subscribe(sub);
}

void loop() //在Arduino的loop函数,定义发布的内容,并调用nh.spinOnce(),这样所有的ROS回调函数就会被处理。
{  
  nh.spinOnce();
  delay(1);
}

代码下载:

  • 将arduino开发板通过串口与电脑连接,点击Arduino IDE 文件->下载

运行代码:
1.打开终端,输入如下:

$ roscore

2.打开另一个终端,输入如下:

$ rosrun rosserial_python serial_node.py /dev/ttyACM0

$ rosrun rosserial_python serial_node.py _port:=/dev/ttyACM0

3.3.打开另一个终端,输入如下代码,发布主题toggle_led,点亮Arduino板上的LED灯

$ rostopic pub toggle_led std_msgs/Empty --once

rostopic pub -r 1 /toggle_led std_msgs/Empty 
  • PS:其中rostopic pub为ros的发布命令。
  • rostopic pub -r rate-in-hz topic-name message-type message-content
    其中-r rate-in-hz 可以用 -1代替表示发送一次

上述内容为本人参考下方链接并结合自身操作所遇问题,对前者进行了相关补充,由于编者水平有限,如有错误,还请指出。

参考链接:> http://www.ncnynl.com/archives/201610/920.html

猜你喜欢

转载自blog.csdn.net/Hacker_MAI/article/details/78665411