[轉]RoboWare Studio的使用和發布器/訂閱器的編寫與測試


原文地址:https://blog.csdn.net/han_l/article/details/77772352,轉載主要方便隨時查閱,如有版權要求,請及時聯系。

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

RoboWare StudioROS的一款IDE,基於微軟開源的VSCode開發,功能比較強大,使得開發更加快速、簡單。是目前最好用的ROS開發工具了。

整個安裝過程非常簡單,只要去RoboWare Studio官網,下載最新的安裝包,然后雙擊安裝即可。

 

按照大多網絡教材的順序,我們先來做一個發布器和訂閱器。步驟如下:
1.在RoboWare-Studio里的工作區間下新建一個包beginner_tutorials,依賴項是std_msgs,roscpp.
2.在_tutorials包下的src里創建兩個cpp源文件talker和listener。
talker文件內容如下:

 1 #include"ros/ros.h"//導入ros核心頭文件
 2 #include"std_msgs/String.h"//導入std_msgs/String消息頭文件,由std_msgs包的string.msg文件自動生成
 3 #include<sstream>
 4 int main(int argc, char **argv)
 5 {
 6     ros::init(argc, argv, "talker");//初始化ROS,指定節點名為talker
 7     ros::NodeHandle n;//實例化節點
 8     ros::Publisher chatter_pub=n.advertise<std_msgs::String>("chatter",1000);//發布一個名為chatter的的話題的消息,消息類型為std_msgs/String,消息隊列大小為1000,超過后舊的消息丟棄
 9     ros::Rate loop_rate(10);//發消息的頻率,這里指每秒10次,通過 Rate::sleep()來處理睡眠的時間來控制對應的發布頻率。
10     int count=0;
11     while(ros::ok())//默認roscpp會植入一個SIGINT處理機制,當按下Ctrl-C,就會讓ros::ok()返回false,那循環就會結束
12     {
13         std_msgs::String msg;
14         std::stringstream ss;
15         ss<<"hello world"<<count;
16         msg.data=ss.str();//實例化消息msg, 定義字符串流“hello world”並賦值給ss, 最后轉成為字符串賦值給msg.data
17         ROS_INFO("%s",msg.data.c_str());//輸出調試信息
18         chatter_pub.publish(msg);//實際發布的函數
19         ros::spinOnce();//不是必需的,但是保持增加這個調用,是好習慣。如果程序里也有訂閱話題,就必需,否則回調函數不能起作用。
20         loop_rate.sleep();
21         ++count;
22     }
23     return 0;
24 }
25 /*ros::ok() 返回false的幾種情況:
26 
27     SIGINT收到(Ctrl-C)信號
28     另一個同名節點啟動,會先中止之前的同名節點
29     ros::shutdown()被調用
30     所有的ros::NodeHandles被銷毀
31 */

listener里的內容如下:

 1 #include"ros/ros.h"
 2 #include"std_msgs/String.h"
 3 
 4 void chatterCallback(const std_msgs::String::ConstPtr& msg)
 5 {
 6     ROS_INFO("I heared :[%s]",msg->data.c_str());
 7 }//回調函數,收到chatter話題時會調用這個函數,消息通過boost shared_ptr(共享指針)傳遞,收到消息通過ROS_INFO顯示到終端
 8 int main(int argc, char **argv)
 9 {
10     ros::init(argc, argv, "listener");
11     ros::NodeHandle n;
12     ros::Subscriber sub=n.subscribe("chatter",1000,chatterCallback);//訂閱節點
13     ros::spin();//調用此函數才能進入循環處理,直到ros::ok返回false結束
14     return 0;
15 }

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

1 # In your catkin workspace

2 $ cd ~/catkin_ws

3 $ source ./devel/setup.bash 

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

1 $ rosrun beginner_tutorials talker      (C++)
2 $ rosrun beginner_tutorials talker.py   (Python) 
3 
4 
5 $ rosrun beginner_tutorials listener      (C++)
6 $ rosrun beginner_tutorials listener.py   (Python)

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

參考網站:
測試消息發布器和訂閱器 (C++)
編寫簡單的消息發布器和訂閱器 (C++)

http://www.php8.org/fwq/90575.html

http://www.rosclub.cn/post-591.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM