1. 創建ROS工作空間
mkdir -p catkin_ws/src cd src catkin_init_workspace cd .. catkin_make
2. 創建package
- 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編譯
#under workspace path catkin_make [make_targets] [-DCMAKE_VARIABLES=...]
catkin編譯的是上述第一種利用catkin創建的package,首先修改創建功能包時生成的CMakeLists.txt文件,用gedit打開該文件
- 添加以下語句來查找添加的依賴包
find_package(catkin REQUIRED COMPONENTS sensor_msgs cv_bridge image_transport) find_package(OpenCV 2 REQUIRED) find_package(PLC REQUIRED)
2.添加以下語句來添加參與編譯的節點程序
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>
- 利用rosmake編譯
#under workspace path rosmake package_name
用rosmake編譯的是上述第二種利用roscreate創建的package,同樣的,在編譯之前,需要修改CMakeLists.txt文件和manifest.xml文件,不同的地方是在修改CMakeLists.txt文件時需要加上如下語句來添加參與編譯的節點程序:
rosbuild_add_executable(node_name src/node_name.cpp)
注意
- 創建功能包是在src目錄下,而編譯功能包是在workspace目錄下。
- 編譯之前要先確保添加了當前工作空間的path,查看方法是:
echo $ROS_PACKAGE_PATH
添加方法是source setup.bash文件
#under the path: workspace source ./devel/setup.bash
OpenCV
ROS從indigo開始就不再把opencv作為系統依賴包而是作為一個第三方包引入,如果直接使用會在rosmake編譯階段報錯,no exist package “opencv2”,此時只需要在CMakeLists.txt中添加find_package(OpenCV 2 REQUIRED),然后在manifest.xml中不能添加依賴包,此處添加的為系統依賴包。