初學ros機器人程序設計,從創建工作空間到編譯運行節點,由於Linux也是初學,各種焦頭爛額,把這些最基礎的東西先總結下來,以備日後查看。這是第一次寫博客,倘若有諸多錯誤的地方,希望大家諒解並指出。
1、在ros下創建工作空間:
mkdir -p catkin_ws/src
cd src
catkin_init_workspace
cd ..
catkin_make
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
2、創建功能包
方法一:利用catkin創建package
cd ~/catkin_ws/src
catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
- 1
- 2
- 1
- 2
創建程序包的一般格式是catkin_create_pkg ,此命令的格式包括功能包名稱和依賴項,在上面示例中,依賴項包括std_msg、rospy和roscpp。
運行上面命令之後,在src文件夾下會生成一個與功能包名同名的文件夾,在該文件夾下有如下文件(夾)
workspace_folder/
src/
package_name/
include --文件夾
src --文件夾
CMakeLists.txt
package.xml
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
方法二:利用roscreate創建package
cd ~/catkin_ws/src
roscreate-pkg beginner_tutorials std_msgs rospy roscpp
- 1
- 2
- 1
- 2
同樣的,利用rosmake創建程序包的格式是roscreate-pkg ,此命令的格式也包括功能包名稱和依賴項。
運行上面命令之後,在src文件夾下會生成一個與功能包名同名的文件夾,在該文件夾下有如下文件(夾)
workspace_folder/
src/
package_name/
include --文件夾
src --文件夾
CMakeLists.txt
manifest.xml
mainpage.dox
Makefile
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
3、編譯功能包
方法一:利用catkin編譯
用catkin編譯的是上述第一種利用catkin創建的package,首先修改創建功能包時生成的CMakeLists.test文件,用gedit打開該文件,
⑴添加以下語句來查找添加的依賴包
find_package(catkin REQUIRED COMPONENTS
sensor_msgs
cv_bridge
image_transport)
find_package(OpenCV 2 REQUIRED)
find_package(PLC REQUIRED)
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
⑵添加以下語句來添加參與編譯的節點程序
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的消息,你同樣也需要添加對他們各自生成的消息文件的依賴,感覺就是一個先導入頭文件的過程。
- 1
- 2
- 3
- 1
- 2
- 3
除了可以在創建功能包時添加系統提供的依賴(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>
- 1
- 2
- 3
- 1
- 2
- 3
利用catkin編譯的方法是:
#under workspace
catkin_make [make_targets] [-DCMAKE_VARIABLES=...]
- 1
- 2
- 1
- 2
方法二:利用rosmake編譯
用rosmake編譯的是上述第二種利用roscreate創建的package,同樣的,在編譯之前,需要修改CMakeLists.txt文件和manifest.xml文件,不同的地方是在修改CMakeLists.txt文件時需要加上如下語句來添加參與編譯的節點程序:
rosbuild_add_executable(node_name src/node_name.cpp)
- 1
- 1
注意:
ROS從indigo開始就不再把OpenCV作爲系統依賴包而是作爲一個第三方包引入,如果直接使用會在rosmake編譯階段報錯,no exist package “opencv2”,此時只需要在CMakeLists.txt中添加find_package(OpenCV
2 REQUIRED),然後在manifest.xml中不能添加依賴包,此處添加的爲系統依賴包。
利用rosmkae編譯的方法是:
#under workspace
rosmake package_name
- 1
- 2
- 1
- 2
運行以上命令之後,如果編譯沒有出錯,在bin文件夾下可以看到生成的可執行文件,可以直接運行./node_name來運行節點。
3、運行編譯完成之後的節點(不用launch,還不懂)
rosrun package_name node_name
- 1
- 1
注意:
1)創建功能包是在src目錄下,而編譯功能包是在workspace目錄下。
2)編譯之前要先確保添加了當前工作空間的path,查看方法是:
echo $ROS_PACKAGE_PATH
- 1
- 1
添加方法是source setup.bash文件
#under the path: workspace
source ./devel/setup.bash
- 1
- 2
- 1
- 2
3)運行節點之前要下roscore