開發環境:RobWare Stdio
- 通過這篇文 https://blog.csdn.net/dream_cc/article/details/54836896 可以建立一個簡單的節點併發布hello world消息。
- 具體c++代碼實現過程及講解:
#include "ros/ros.h" //包含ROS中常用的頭文件 #include "std_msgs/String.h" //按照ros命名規則,std_msgs/String是在ros目錄下的string文件內,該文件中有一個string.msg文件 #include <sstream> //初始化ROS系統 //廣播消息:在chatter主題上發佈std_msgs/String消息到節點管理器 //以指定的頻率循環發佈消息到chatter int main(int argc, char **argv) { ros::init(argc, argv, "talker");//初始化一個ros節點,節點名稱必須是唯一的 //創建用於處理該節點的句柄,這是一個類,開始是見初始化節點,結束時最後用析構函數清除所用資源 ros::NodeHandle n; //創建一個發佈主題 //節點管理器把chatter主題上發佈的數據告知正在監聽這個主題的節點 //NodeHandle::advertise()返回一個ros::publisher()方法,讓用戶可以在創建的主題上發佈消息 ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000);//"chattet"發佈的主題 1000 發佈隊列的長度 //指定循環頻率10hz,它追蹤上一次Rate::sleep()被喚醒之後持續的時間,並在到達指定時間後休眠 ros::Rate loop_rate(10); int count = 0; //在缺省情況下,roscpp安裝一個句柄,當系統按下ctrl+c時,ros::ok()返回flase while(ros::ok()) { std_msgs::String msg; std::stringstream ss; ss << "hello word!!" <<count; //C++標準流控制,把字符流給mag.data msg.data = ss.str(); //類似與printf和cout ROS_INFO("%s", msg.data.c_str()); //創建主題時返回的句柄,提供發佈消息的方法,用於發佈數據 chatter_pub.publish(msg); // ros::spinOnce(); loop_rate.sleep(); ++count; } return 0; }
ee
-
啓動ros內核和節點,(注意要在./bashrc中加入source 路徑),就可以在終端看到發佈的消息了