日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ROS与Arduino学习(三)订阅与发布

發布時間:2025/6/17 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ROS与Arduino学习(三)订阅与发布 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ROS與Arduino學習(三)訂閱與發布

Tutorial Level:HelloWorld

Next Tutorial:用ROS的Cmake編譯程序

本節介紹如何在arduino中發布與訂閱消息。他和ROS通過串口進行節點通信。

Tips 1 訂閱

?

ros::Subscriber<std_msgs::Empty> sub("WWWW",&hhhhh);

?

?其中WWWW是話題的名稱,hhhhh是收到消息后調用的函數函數名稱。sub是實例化訂閱對象的名字,也可以是別的名字。

?

<std_msgs::Empty>是指傳輸的消息類型。也可以是整形<std_msgs::Int16>或者其他類型。

?

nh.subscribe(sub);

?

其中nh代表句柄的意思,每一個節點有一個句柄。此節點使用sub訂閱對象來訂閱世界中的話題。

?

Tips 2 發布

?

ros::Publisher chatter("chat",&str_msg);

?

?其中“chat”為話題名稱,str_msg為消息內容。chatter是實例化發布對象的名字。

?

nh.advertise(chatter)

?

?其中nh代表句柄的意思,每一個節點有一個句柄。此節點使用chatter發布對象來向世界中的話題發布消息。

?

chatter.publish(&str_msg);

?

?發布消息

?Tips 3 實例程序(控制燈)

整體思路為用Arduino訂閱一個主題“PC2Arduino”,然后Ubuntu發布一個消息到主題中,1代表亮,0代表滅。代碼比較簡答,不解釋。

代碼如下:

?

#include <ros.h> #include <std_msgs/String.h> #include <std_msgs/UInt16.h>ros::NodeHandle nh;std_msgs::String str_msg; //publish and subscribe // ros::Publisher pub("Arduino2PC",&str_msg);void Control(const std_msgs::UInt16& cmd_msg) {if(cmd_msg.data == 1){digitalWrite(13, LOW); }if(cmd_msg.data == 0){digitalWrite(13, HIGH); }}ros::Subscriber <std_msgs::UInt16> sub("PC2Arduino", &Control );char hello[]="hello world!";void setup() {pinMode(13, OUTPUT);nh.initNode();nh.advertise(pub);// publishnh.subscribe(sub);// subscribe }void loop() {str_msg.data = hello;pub.publish(&str_msg);//publish a messagenh.spinOnce();delay(1000);}

?

?Tips 4 測試

?

#新終端打開 $ roscore #新終端打開 $ rosrun rosserial_python serial_node.py _port:=/dev/ttyUSB0 #新終端打開 $ rostopic pub PC2Arduino std_msgs/UInt16 1

?

轉載于:https://www.cnblogs.com/flyingjun/p/8933223.html

總結

以上是生活随笔為你收集整理的ROS与Arduino学习(三)订阅与发布的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。