ROS創建節點併發布數據

開發環境:RobWare Stdio

  1. 通過這篇文   https://blog.csdn.net/dream_cc/article/details/54836896  可以建立一個簡單的節點併發布hello world消息。
  2. 具體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

  3. 啓動ros內核和節點,(注意要在./bashrc中加入source 路徑),就可以在終端看到發佈的消息了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章