1. 程式人生 > >ROS學習之釋出訊息——Publisher_程式碼分析

ROS學習之釋出訊息——Publisher_程式碼分析

//一個非常詳細的版本:
//本檔名字為: publisher.cpp

#include "ros/ros.h"
#include "std_msgs/String.h"
#include <iostream>  //或者  #include<sstream>

//使用名稱空間,省的每次都需要ros::
using namespace ros;
//這裡使用cout進行列印輸出
using namespace std;

int main(int argc, char** argv){
    //使用控制代碼之前必須初始化節點 //第三個引數不能為空,最好和節點名相同,我試過,和節點名不同也沒事
    init(argc, argv, "publisher_Node");    
    NodeHandle n;

    //廣播的訊息型別為:std_msgs::String,並把訊息放入話題“topic_m” 中可以試著使用rostopic list打印出該話題 
    //不同軟體包下的話題可以同名,但是在ros只允許同時執行一個,所以這裡最好是獨一無二的訊息名稱
    Publisher pub = n.advertise<std_msgs::String>("topic_m",1000);

    //傳送訊息的頻率為2Hz, 1秒發2個,週期為500ms
    Rate loop_rate(2);
    while(ok()){
         //定義一個msg,往msg中裝入需要廣播的訊息
         std_msgs::String msg;

         //列印輸出hello
	 cout<<"print from cout: Hello wanzew..."<<endl;

         //將需要廣播的字串裝入msg中
	 msg.data = "Hello wanzew!";

         //使用ROS_INFO列印提醒訊息
	 ROS_INFO("%s",msg.data.c_str());
        
         //把std_msgs::String型別的訊息msg
	 pub.publish(msg);

         //釋出訊息時可以不寫spinOnce(),但訂閱某個訊息時必須要寫spin()函式
	 //spinOnce();
         //靠sleep()函式保證連續兩個訊息之間的時間恰好為一個週期
	 loop_rate.sleep();
    }
    return 0;
}
//一個更加簡潔的版本
#include "ros/ros.h"
#include "std_msgs/String.h"
#include <iostream> 

using namespace ros;
using namespace std;

int main(int argc, char** argv){
    init(argc, argv, "publisher_Node"); 
    NodeHandle n;
    Publisher pub = n.advertise<std_msgs::String>("topic_m",1000);
    Rate loop_rate(2);

    while(ok()){
     std_msgs::String msg;
	 msg.data = "Hello wanzew!";
	 pub.publish(msg);
	 loop_rate.sleep();
     cout<<"print from cout: Hello wanzew..."<<endl;
    }
    return 0;
}

對應的 CMakeList.txt 檔案內容如下:

cmake_minimum_required(VERSION 2.8.3)

project(my_package)

find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
)

catkin_package(
# 下面註釋部分可開啟-->
# INCLUDE_DIRS include
# LIBRARIES my_package
# CATKIN_DEPENDS roscpp rospy std_msgs
# DEPENDS system_lib
)

include_directories(
#  include
  ${catkin_INCLUDE_DIRS}
)

# publisher_Node在ros中是獨一無二的,不能和其它節點名字重複
add_executable(publisher_Node src/publisher.cpp)
target_link_libraries(publisher_Node ${catkin_LIBRARIES})
下篇:ROS學習之訂閱訊息——Subscriber_程式碼分析


相關推薦

ROS學習釋出訊息——Publisher_程式碼分析

//一個非常詳細的版本: //本檔名字為: publisher.cpp #include "ros/ros.h" #include "std_msgs/String.h" #include <i

ROS學習訂閱訊息——Subscriber_程式碼分析

//詳解版本: //本程式碼檔名為:subscriber.cpp #include "ros/ros.h" #include "std_msgs/String.h" #include <iost

機器學習K-近鄰演算法程式碼分析

在看Peter的K-近鄰實戰時,發現原來“手寫識別系統”不止是影象處理和影象識別可以解決,原來從影象也是矩陣資料的層面來看,不同數字的識別也是資料分類問題(2333……又打開了思維的新視角)。因本身是學影象處理出身,所以關於手寫識別系統,思維受限在怎樣進行影象處理、怎樣訓練數字模型、怎樣進行數字識別了。 該

ROS學習 cpp訊息釋出者和訊息訂閱者

wiki連結: http://wiki.ros.org/roscpp/Overview/Publishers%20and%20Subscribers一、釋出一個話題     其它相關連結:         ros::NodeHandle,ros::NodeHandle::

ROS開發筆記(9)——ROS 深度強化學習應用keras版本dqn程式碼分析

在ROS開發筆記(8)中構建了ROS中DQN演算法的開發環境,在此基礎上,對演算法程式碼進行了分析,並做了簡單的修改: 修改1  : 改變了儲存模型引數在迴圈中的位置,原來是每個10整數倍數回合裡面每一步都修改(相當於修改episode_step次),改成了每個10整數倍數

ROS學習編譯一個包

cti ges begin -s 包名 code start ner 一個 catkin_make -DCATKIN_WHITELIST_PACKAGES= "包名" $ catkin_make -DCATKIN_WHITELIST_PACKAGES="begin

ros學習kobuki

key con core sta -i fig other del mini sudo apt-get install ros-indigo-kobuki ros-indigo-kobuki-corerosrun kobuki_ftdi create_udev_rules#

ROS學習路的整理

        ROS是基於linux系統的一個次級作業系統,目前被看做是機器人界的一套標準平臺,可以類比手機的安卓作業系統或者是電腦的windows作業系統。ROS最大的優點在於靈活、低耦合、分散式、開源以及功能強大而豐富的

C++PrimerPlus學習C++中的程式碼重用

has-a關係 包含物件成員的類 易於理解及使用 可包含多個基類,易於區分。 建構函式初始化的是成員物件,而不是繼承的物件,所以在初始化列表中使用的是成員名,而不是類名。 當初始化列表包含多個專案時,這些專案被初始化的順序為

Android 學習《第一行程式碼》第二版 筆記(十)探究碎片(二)

一個簡易版的新聞應用 同時相容手機和平板的應用程式 一、佈局 news_content_frag.xml額我的程式碼裡面是news_content_fragment.xml,圖片打錯了 二、程式碼編寫 1. 實體類(News.java) //新聞實體類 pub

Android 學習《第一行程式碼》第二版 筆記(九)探究碎片(一)

一、碎片 1. 碎片是什麼: 碎片(Fragment)是一種可以嵌入在活動當中的UI片段,能讓程式更加合理和充分地利用大螢幕的空間。(可以理解成迷你型活動) 2. 簡單用法: 在一個活動當中新增兩個碎片,並讓這兩個碎片平分活動空間。 1.)效果圖(沒錢買平板,CPU不支援

Android 學習《第一行程式碼》第二版 筆記(十一)詳解廣播機制(一)

一、廣播機制簡介 1. 四大元件之一 2. Android 提供了一套完整的API,允許應用程式自由地傳送和接收廣播。 A. 傳送廣播藉助Intent B. 接收廣播藉助廣播接收器(Broadcast Receiver) 3. 廣播型別: A. 標準廣播: 完全非同步執行

Android 學習《第一行程式碼》第二版 筆記(十二)詳解廣播機制(二)

廣播的最佳實踐——實現強制下線功能 思路:在介面上彈出一個對話方塊,讓使用者無法進行任何操作,必須點選對話方塊中的確定按鈕,然後回到登入介面即可。 一、效果圖 1. 登入介面並輸入賬號密碼 2. 登陸後的介面 3. 強制下線 4. 退回登陸的介面

基於Visual C++Windows核心程式設計程式碼分析(1)實現裝置管理器列舉裝置

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Ros學習——C++釋出器publisher和訂閱器subscriber

  1.編寫釋出器 初始化 ROS 系統 在 ROS 網路內廣播我們將要在 chatter 話題上釋出 std_msgs/String 型別的訊息 以每秒 10 次的頻率在 chatter 上釋出訊息 在 beginner_tutorials pack

cocos2d-x學習路(二)——分析AppDelegate和HelloWorldScene檔案

這裡我們來看一下cocos自動給我們生成的工程裡有些什麼東西,並且分析一下這些程式碼的用途,來為我們以後編寫cocos程式鋪下基礎。 這裡我建議看我這份隨筆的看官先看看cocos官網的快速入門手冊,不然可能會比較迷糊(因為待會要分析一些程式碼,如果以前沒見過的話會比較昏)。傳送門在這裡 其中一些基本不需要程式

機器學習AdaBoost原理與程式碼實現

1 2.000000 1.000000 38.500000 66.000000 28.000000 3.000000 3.000000 0.000000 2.000000 5.000000 4.000000 4.000000 0.0

機器學習KNN原理與程式碼實現

                                      KNN原理與程式碼實現 KNN原理 KNN(k-Nearest Neighbour):K-近鄰演算法,主要思想可以歸結為一個成語:物以類聚 工作原理 給定一個訓練資料集,對新的輸入例項,在訓練資料集中找到與該例項最鄰近的 k (k

ROS學習路(二)檔案系統

    在ROS的檔案包裡面,有純粹的程式碼,也有編譯後的二進位制檔案。如何將這些檔案有條不紊的整理起來呢?於是就有了下面這種檔案系統: 對於每一個特定的功能,用一個資料夾包起來,就是所謂的功能包: (1)config:放置功能包中的配置檔案,由使用者建立,檔名可以不同

ros學習camera calibration 單目攝像頭標定

環境:ubuntu16.04 ros版本 kinetic 標定筆記本單目攝像頭 需要的準備:1、標定圖:下面這張列印到a4紙上。 2、攝像機驅動,我使用的是usb_cam,下載地址:https://github.com/ros-drivers/usb_c