初學ros機器人程序設計

初學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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章