1. 程式人生 > >ROS學習--RoboWare Studio的使用和釋出器/訂閱器的編寫與測試

ROS學習--RoboWare Studio的使用和釋出器/訂閱器的編寫與測試

開始ROS學習之前,先按照官網教程和其他老大們寫的部落格安裝好ROS,再安裝一個RoboWare-Studio,雖然用Qt和Eclipse也行,但比較麻煩,這個很方便。

按照大多網路教材的順序,我們先來做一個釋出器和訂閱器。步驟如下:
1.在RoboWare-Studio裡的工作區間下新建一個包beginner_tutorials,依賴項是std_msgs,roscpp.
2.在_tutorials包下的src裡建立兩個cpp原始檔talker和listener。
talker檔案內容如下:

#include"ros/ros.h"//匯入ros核心標頭檔案
#include"std_msgs/String.h"
//匯入std_msgs/String訊息標頭檔案,由std_msgs包的string.msg檔案自動生成 #include<sstream> int main(int argc, char **argv) { ros::init(argc, argv, "talker");//初始化ROS,指定節點名為talker ros::NodeHandle n;//例項化節點 ros::Publisher chatter_pub=n.advertise<std_msgs::String>("chatter",1000);//釋出一個名為chatter的的話題的訊息,訊息型別為std_msgs/String,訊息佇列大小為1000,超過後舊的訊息丟棄
ros::Rate loop_rate(10);//發訊息的頻率,這裡指每秒10次,通過 Rate::sleep()來處理睡眠的時間來控制對應的釋出頻率。 int count=0; while(ros::ok())//預設roscpp會植入一個SIGINT處理機制,當按下Ctrl-C,就會讓ros::ok()返回false,那迴圈就會結束 { std_msgs::String msg; std::stringstream ss; ss<<"hello world"<<count; msg.
data=ss.str();//例項化訊息msg, 定義字串流“hello world”並賦值給ss, 最後轉成為字串賦值給msg.data ROS_INFO("%s",msg.data.c_str());//輸出除錯資訊 chatter_pub.publish(msg);//實際釋出的函式 ros::spinOnce();//不是必需的,但是保持增加這個呼叫,是好習慣。如果程式裡也有訂閱話題,就必需,否則回撥函式不能起作用。 loop_rate.sleep(); ++count; } return 0; } /*ros::ok() 返回false的幾種情況: SIGINT收到(Ctrl-C)訊號 另一個同名節點啟動,會先中止之前的同名節點 ros::shutdown()被呼叫 所有的ros::NodeHandles被銷燬 */

listener裡的內容如下:

#include"ros/ros.h"
#include"std_msgs/String.h"

void chatterCallback(const std_msgs::String::ConstPtr& msg)
{
    ROS_INFO("I heared :[%s]",msg->data.c_str());
}//回撥函式,收到chatter話題時會呼叫這個函式,訊息通過boost shared_ptr(共享指標)傳遞,收到訊息通過ROS_INFO顯示到終端
int main(int argc, char **argv)
{
    ros::init(argc, argv, "listener");
    ros::NodeHandle n;
    ros::Subscriber sub=n.subscribe("chatter",1000,chatterCallback);//訂閱節點
    ros::spin();//呼叫此函式才能進入迴圈處理,直到ros::ok返回false結束
    return 0;
}

通過Roboware-studio編寫,package.xml和CMakeLists.txt不需要修改,會幫我們修改好。
3.點選左上角資源管理器邊上的小錘子進行編譯,有錯誤的話會報。
4.上方選單欄的ROS裡的roscore點一下,也可以<Ctrl>+<Alt>+T開啟終端執行roscore。
5.在終端裡到工作空間下source一下setup.sh檔案

# In your catkin workspace
$ cd ~/catkin_ws
$ source ./devel/setup.bash

6.在兩個終端裡分別rosrun talker和listener

$ rosrun beginner_tutorials talker      (C++)
$ rosrun beginner_tutorials talker.py   (Python) 


$ rosrun beginner_tutorials listener      (C++)
$ rosrun beginner_tutorials listener.py   (Python) 

7.驗證一下成功後<Ctrl>+c關閉兩個終端