初學ros機器人程式設計,從建立工作空間到編譯運作節點,由于linux也是初學,各種焦頭爛額,把這些最基礎的東西先總結下來,以備日後檢視。這是第一次寫部落格,倘若有諸多錯誤的地方,希望大家諒解并指出。寫這邊文章時,大部分是參考了下面幾篇博文:
http://blog.csdn.net/baidu_18189515/article/details/52401329
http://blog.csdn.net/baidu_18189515/article/details/52332754#comments
http://blog.csdn.net/robogreen/article/details/50488215
1、在ros下建立工作空間:
mkdir -p catkin_ws/src
cd src
catkin_init_workspace
cd ..
catkin_make
2、建立功能包
方法一:利用catkin建立package
cd ~/catkin_ws/src
catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
建立程式包的一般格式是catkin_create_pkg ,此指令的格式包括功能包名稱和依賴項,在上面示例中,依賴項包括std_msg、rospy和roscpp。
運作上面指令之後,在src檔案夾下會生成一個與功能包名同名的檔案夾,在該檔案夾下有如下檔案(夾)
workspace_folder/
src/
package_name/
include --檔案夾
src --檔案夾
CMakeLists.txt
package.xml
方法二:利用roscreate建立package
cd ~/catkin_ws/src
roscreate-pkg beginner_tutorials std_msgs rospy roscpp
同樣的,利用rosmake建立程式包的格式是roscreate-pkg ,此指令的格式也包括功能包名稱和依賴項。
運作上面指令之後,在src檔案夾下會生成一個與功能包名同名的檔案夾,在該檔案夾下有如下檔案(夾)
workspace_folder/
src/
package_name/
include --檔案夾
src --檔案夾
CMakeLists.txt
manifest.xml
mainpage.dox
Makefile
3、編譯功能包
方法一:利用catkin編譯
用catkin編譯的是上述第一種利用catkin建立的package,首先修改建立功能包時生成的CMakeLists.test檔案,用gedit打開該檔案,
⑴添加以下語句來查找添加的依賴包
find_package(catkin REQUIRED COMPONENTS
sensor_msgs
cv_bridge
image_transport)
find_package(OpenCV REQUIRED)
find_package(PLC REQUIRED)
⑵添加以下語句來添加參與編譯的節點程式
add_executable(node name src/node program)#添加可執行節點
target_link_libraries(node name ${catkin_LIBRARIES})#連結庫
add_dependencies(node name package name_generator_messages_cpp)#為可執行檔案添加對生成的消息檔案的依賴,因為catkin把所有的package并行的編譯,是以如果你要使用其他catkin工作空間中其他package的消息,你同樣也需要添加對他們各自生成的消息檔案的依賴,感覺就是一個先導入頭檔案的過程。
除了可以在建立功能包時添加系統提供的依賴(catkin_create_pkg beginner_tutorials std_msgs rospy roscpp),也可以修改建立功能包時生成的package.xml檔案,以圖像進行中所需用到的包為例,加入了以下指令來說明後面增加的依賴包
<run_depend>sensor_msgs</run_depend>
<run_depend>image_transport</run_depend>
<run_depend>cv_bridge</run_depend>
利用catkin編譯的方法是:
#under workspace
catkin_make [make_targets] [-DCMAKE_VARIABLES=...]
方法二:利用rosmake編譯
用rosmake編譯的是上述第二種利用roscreate建立的package,同樣的,在編譯之前,需要修改CMakeLists.txt檔案和manifest.xml檔案,不同的地方是在修改CMakeLists.txt檔案時需要加上如下語句來添加參與編譯的節點程式:
注意:
ROS從indigo開始就不再把opencv作為系統依賴包而是作為一個第三方包引入,如果直接使用會在rosmake編譯階段報錯,no exist package “opencv2”,此時隻需要在CMakeLists.txt中添加find_package(OpenCV 2 REQUIRED),然後在manifest.xml中不能添加依賴包,此處添加的為系統依賴包。
利用rosmkae編譯的方法是:
#under workspace
rosmake package_name
運作以上指令之後,如果編譯沒有出錯,在bin檔案夾下可以看到生成的可執行檔案,可以直接運作./node_name來運作節點。
3、運作編譯完成之後的節點(不用launch,還不懂)
rosrun package_name node_name
注意:
1)建立功能包是在src目錄下,而編譯功能包是在workspace目錄下。
2)編譯之前要先確定添加了目前工作空間的path,檢視方法是:
添加方法是source setup.bash檔案
#under the path: workspace
source ./devel/setup.bash
3)運作節點之前要下roscore