原文地址:https://blog.csdn.net/han_l/article/details/77772352,轉載主要方便隨時查閱,如有版權要求,請及時聯系。
開始ROS學習之前,先按照官網教程和其他老大們寫的博客安裝好ROS,再安裝一個RoboWare-Studio,雖然用Qt和Eclipse也行,但比較麻煩,這個很方便。
RoboWare Studio
是ROS
的一款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