• Ros使用Arduino 3用rosserial创建一个subscriber


    在前面的一节中,我们已经使用arduino创建了一个publisher节点,接下来将会用arduino来创建一个subscriber,接收电脑传去的信息并做出相应的反应。

    1启动Arduino

    将arduino开发板连接到电脑的usb口,在arduino IDE中进行设置。

    选择Tools->Board,选择你所使用的arduino开发板的类型,所使用的arduino开发板是arduino pro min。

    设置好开发板之后,继续选择Tools->Serial Port->/dev/ttyUSB0。

    2编译程序

    选择File->Examples->ros_lib->Blink,就可以打开一个示例程序,代码如下:

    /* 
     * rosserial Subscriber Example
     * Blinks an LED on callback
     */
    
    #include <ros.h>
    #include <std_msgs/Empty.h>
    
    //创建了一个节点句柄,这允许我们的程序能够创建发布者和订阅者,节点句柄同样和串口通信有关系。 ros::NodeHandle nh;
    // 创建回调函数,必须使用一个消息的常引用作为一个参数。
    // 消息类型是 std_msgs::Empty 消息的名字是toggle_msg
    // 回调函数中,我们可以引用 toggle_msg,因为他是空的,所以就没必要了。接受到一次,让LED闪烁一次。
    void messageCb( const std_msgs::Empty& toggle_msg){
      digitalWrite(13, HIGH-digitalRead(13));   // blink the led
    }
    
    //创建一个订阅者subscriber , 订阅消息 toggle_led,消息类型是 std_msgs::Empty,回调函数是messageCb() ros::Subscriber<std_msgs::Empty> sub("toggle_led", &messageCb );

    //初始化ros的节点句柄,告知所有将要订阅的话题,订阅你想收听的任何话题。 void setup() { pinMode(13, OUTPUT); nh.initNode(); nh.subscribe(sub); }
    //调用了ros::spinOnce(),在这个函数中,所有ROS通信的回调函数都被处理。
    //在loop函数中,我们不需要去做任何其它的处理。因为这个函数ros::spinOnce()将会传递消息给subscriber的回调函数。

    void loop() { nh.spinOnce(); delay(1); }

    烧录程序

    在arduino IDE中点击upload按钮,运行程序。

    运行ROS

    新建窗口

    roscore
    

    接着运行rosserial客户端应用,它把你的arduino消息转发到ROS系统的其它部分:

    rosrun rosserial_python serial_node.py /dev/ttyUSB0  
    

    最后你可以输入一下命令来查看你的arduino板子上的LED灯的变化情况:

    rostopic pub toggle_led std_msgs/Empty --once 
    

    上述命令运行一次后LED灯亮了,再运行一下次又灭了,如此反复的运行,会发生相应的变化。

     

     

  • 相关阅读:
    在.net中过滤敏感字符
    const和readonly的联系和区别
    新闻内容页分页的简单做法
    jmail邮件发送问题
    nvarchar与varchar的区别
    C#中"is" vs "as"
    在C#中,string 类型可与SQL SERVER中的int 类型作比较
    做网站常用代码集锦 (转)
    做网站常用代码集锦 (转)
    ADO 数据类型转换表 oledbtype sqldbtype (二)
  • 原文地址:https://www.cnblogs.com/kekeoutlook/p/7399332.html
Copyright © 2020-2023  润新知