1. 程式人生 > >ros 工作空間以及功能包 建立編譯

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