自動駕駛(六十六)---------ROS學習筆記(2)

      前面介紹了ROS的基本概念, 還沒介紹如何操作, 下面從操作層面結束ROS. 

1. 創建ROS工作空間

      $ mkdir -p ~/catkin_ws/src
      $ cd ~/catkin_ws
      $ catkin_make
      其中catkin_ws是自定義的工作空間名,也就是文件夾名。

2. 配置環境變量

      $ source devel/setup.bash   注意zsh: $ source devel/setup.zsh
      也可直接在.bashrc裏寫入:$ source ~/catkin_ws/devel/setup.bash   注意zshrc裏: $ source ~/catkin_ws/devel/setup.zsh

3. 創建一個功能包

      $ cd ~/catkin_ws/src
      使用catkin_create_pkg命令來創建功能包:$ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
      其中,beginner_tutorials是創建的功能包名,後面是該功能包依賴的三個功能包。運行完後可以看出在beginner_tutorials目錄下創建了package.xml和CMakeLists.txt兩個文件。

 4. 配置package.xml文件

      package.xml文件主要由4個標籤組成,分別爲描述標籤、維護者標籤、許可證標籤、依賴項標籤。
      package.xml包含了package的名稱、 版本號、 內容描述、 維護人員、 軟件許可、 編譯構建工具、 編譯依賴、 運行依賴等信息。實際上 rospack find 、 rosdep 等命令之所以能快速定位和分析出package的依賴項信息, 就是直接讀取了每一個pacakge中的 package.xml 文件。 它爲用戶提供了快速瞭解一個pacakge的渠道。基本的框架如下:

             <pacakge> 根標記文件
             <name> 包名
             <version> 版本號
             <description> 內容描述
             <maintainer> 維護者
             <license> 軟件許可證
             <buildtool_depend> 編譯構建工具, 通常爲catkin
             <depend> 指定依賴項爲編譯、 導出、 運行需要的依賴, 最常用
             <build_depend> 編譯依賴項
             <build_export_depend> 導出依賴項
             <exec_depend> 運行依賴項
             <test_depend> 測試用例依賴項
             <doc_depend> 文檔依賴項

5. 編寫ROS程序

         ~/catkin_ws/src/功能包名 目錄下,創建並編輯cpp程序文件(以hello.cpp爲例)。

             $ cd ~/catkin_ws/src/beginner_tutorials
             $ touch hello.cpp
             $ gedit hello.cpp

          添加以下代碼:
            #include <ros/ros.h>
            int main ( int argc , char ** argv) {
                  ros::init ( argc , argv , "hello");
                  ros::NodeHandle nh;
                  ROS_INFO_STREAM( "Hello , ROS! ");
             }

6. 編譯ROS程序

        想要編譯我們的程序, 首先需要聲明程序所依賴的其他功能包, 我們的程序很簡單隻需要添加roscpp依賴, 如何添加依賴:

        1. CMakeLists.txt中找到find_package,添加roscpp:
               find_package(catkin REQUIRED COMPONENTS
                       #依次寫上所依賴的功能包
                       roscpp
               )

        2. 修改package.xml,將roscpp添加至build_depend(編譯依賴)和exec_depend(運行依賴)。

               <buildtool_depend>catkin</buildtool_depend>
               <build_depend>roscpp</build_depend>
               <build_export_depend>roscpp</build_export_depend>
               <exec_depend>roscpp</exec_depend>

         聲明可執行文件, 需要在CMakeLists.txt中添加兩行,來聲明我們需要創建的可執行文件。
               add_executable(hello hello.cpp)
               target_link_libraries(hello ${catkin_LIBRARIES})
         其中 hello是我們想要生成的可執行文件的文件名,hello.cpp是生成此可執行文件所需的源文件列表。如果有多個源文件,把它們列在此處,並用空格將其區分開。第二行告訴Cmake當鏈接此可執行文件時需要鏈接哪些庫(在上面的find_package中已經定義了)。

         編譯工作區, 返回工作空間目錄,然後使用catkin_make命令進行編譯:         
               cd ~/catkin_ws
               $ catkin_make

                               
         完成編譯後,將會在工作區中創建devel(開發空間,用來放置編譯生成的可執行文件)和build(編譯空間,用來儲存工作空間編譯過程中產生的緩存信息和中間文件)兩個子目錄。

7. 運行ROS程序

       hello 程序是一個節點(Node),需要節點管理器纔可以正常運行,啓動節點管理器後,用rosrun命令運行程序:

            $ roscore
            $ rosrun beginner_tutorials hello


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