ros 工作空間以及功能包 建立編譯
組織結構:
ros的目錄組織結構是工作空間name->src->功能包,這裡的工作空間名稱是test_ws,功能包(test1)位於src資料夾下面。
看一下package下面的目錄組織結構:tree test_ws/src/test1 -L 2(截圖使用gnome-screenshot -a):
建立方法:
建立工作空間test_ws1的過程:
建立資料夾:
[email protected]:~$ mkdir -p test_ws1
[email protected]:~$ ls
catkin_ws dev examples.desktop test_ws test_ws1 yufei 公共的 模板 視訊 圖片 文件 下載 音樂 桌面
[email protected]:~$ cd test_ws1
[email protected]:~/test_ws1$ mkdir -p src
[email protected]:~/test_ws1$ ls
src
然後編譯,編譯過程:
[email protected]:~/test_ws1$ catkin_make
#編譯過程
Base path: /home/phe/test_ws1
Source space: /home/phe/test_ws1/src
Build space: /home/phe/test_ws1/build
Devel space: /home/phe/test_ws1/devel
Install space: /home/phe/test_ws1/install
Creating symlink "/home/phe/test_ws1/src/CMakeLists.txt" pointing to "/opt/ros/kinetic/share/catkin/cmake/toplevel.cmake"
####
.......
-- BUILD_SHARED_LIBS is on
-- Configuring done
-- Generating done
-- Build files have been written to: /home/phe/test_ws1/build
####
#### Running command: "make -j4 -l4" in "/home/phe/test_ws1/build"
####
#編譯成功之後 在當前工作空間中會生成兩個新的資料夾 build和devel
[email protected]:~/test_ws1$ ls
build devel src
#然後執行
[email protected]:~/test_ws1$ source devel/setup.bash
[email protected]:~/test_ws1$ echo "source /opt/ros/hydro/setup.bash">>bash.rc
備註一:catkin_make 要在workspace的目錄下執行,不然會報錯。catkin_make的執行機理,以及執行過程中會產生什麼?
build 資料夾中存放的是?devel資料夾中存放的是?
[email protected]:~/test_ws1$ source devel/setup.bash 是為了重新整理? [email protected]:~/test_ws1$ echo "source /opt/ros/hydro/setup.bash">>bash.rc 是為了每次開啟一個終端的時候,都自動。。。??
建立package:
在src目錄下 執行 [email protected]:~/test_ws1/src$ catkin_create_pkg test roscpp rospy std_msgs
catkin_create_pkg packagename depend1.2.3 .....
然後在工作空間下面,進行編譯:
[email protected]:~/test_ws1/src$ cd ..
[email protected]:~/test_ws1$ catkin_make
建立節點:在test/src目錄下面寫程式,vi main.cpp
[email protected]:~/test_ws1$ cd ~/test_ws1/src/test/src/ [email protected]:~/test_ws1/src/test/src$ vi main.cpp
程式主函式主要包括幾方面內容:
初始化,ros::init(argc,argv,"node_name");
建立一個node控制代碼,NodeHandle n;
例項化釋出,Publisher pb=n.advertise<std_msgs::String>("topic_name",1000);//或者說 講節點設定成釋出者,並將所釋出的主題和型別名稱告知節點管理器master
設定執行緒的重新整理頻率,ros::Rate loop_rate(10);
執行的主函式:
1.裡面對釋出的訊息賦值:
std_msgs::String msg;
std::stringstream ss;
ss>>"this is publisher node";
msg.data=ss.str();
2.然後釋出(開啟執行緒)
pb.publish(msg);
spinOnce();
3.執行緒休眠:
loop_rate.sleep();
然後更改該功能包下面的CMake.txt 加入:
最後回到test_ws1目錄下catkin_make ,編譯完成之後,執行source devel/setup.bash,最後回到pkg下面,rosrun pkgname main