安裝部分 在安裝後,有一個步驟1.6是設置環境,中間用到的指令echo是常用指令,它的功能是將輸入的字元串送往標準輸出。當格式為:echo 文件內容 >> 文件名 時,是向文件中增加文件內容。 bash文件中其實主要就是運行所需要的各種所需環境變數的定義。 source setup.bash 是把r ...
安裝部分
在安裝後,有一個步驟1.6是設置環境,中間用到的指令echo是常用指令,它的功能是將輸入的字元串送往標準輸出。當格式為:echo 文件內容 >> 文件名 時,是向文件中增加文件內容。
bash文件中其實主要就是運行所需要的各種所需環境變數的定義。
source setup.bash 是把ros中的setup.bash文件掛載到ROS的文件系統中去,這樣當用戶執行一些文件系統的命令時,就不會提示找不到該工作空間里的包或者文件。
~/.bashrc:該文件包含專用於你的bash shell的bash信息,當登錄時以及每次打開新的shell時,該文件被讀取。
通過source ~/.bashrc使其生效。
source功能:使shell讀入指定的shell程式文件並依次執行文件中的所有語句。
source命令通常用於重新執行剛修改的初始化文件,使之立即生效而不必註銷並重新登錄。
安裝過程中還有一步驟是配置source.list文件,用到的語句如下
其中sh命令是shell命令語言解釋器,執行命令從標準輸入或從一個文件中讀取。通過用戶輸入命令,和內核進行溝通。 -c 參數表明指令從-c後的字元串讀取。
兩個重要的ROS環境變數
ROS_PACKAGE_PATH ros包查找的路徑.
ROS_WORKSPACE 工作路徑 . roscd 對應的位置.
兩個環境變數都在 /opt/ros/indigo/setup.bash
/home/xuhao/ros/ros_ws/devel/setup.bash
中有定義,所以會重合,後一個覆蓋前一個,然後我們又在 ~/.bashrc中自定義了ROS_WORKSPACE
而在那兩個bash文件里,所用的語言我看不懂
ROS工具
rosed
rosed 是rosbash套件之一,藉助它,我們可以使用名字直接編輯功能包中的文件,而 不必知道功能包的路徑。
用法:
$ rosed [package_name] [filename]
預設的rosed編輯器為vim,如果需要設置為其他的預設編輯器,則需要編輯文件 ~/.bashrc,修改EDITOR環境變數,包含如下信息:
export EDITOR='emacs -nw' 這個例子是採用emacs作為預設編輯器。
rospack在下麵說到
catkin_make的過程
catkin_make 實際和下麵的指令是等效的
$ cd ~/catkin_ws
$ cd src
$ catkin_init_workspace
$ cd ..
$ mkdir build
$ cd build
$ cmake ../src -DCMAKE_INSTALL_PREFIX=../install -DCATKIN_DEVEL_PREFIX=../devel
$ make
從指令中可以看出,catkin_make執行的時候一定是在ws文件夾,文件夾中需要有一個src子文件夾,執行完成後ws文件中出現build和devel兩個新的子文件夾。
最先被編譯的是在src下公用的CMakeList.txt文件
這個文件的大部分內容都是在找catkin這個包的位置。最後執行一個cmake函數catkin_workspace。這個函數在/opt/ros/kinetic/share/catkin/cmake/catkin_workspace.cmake文件中定義。這個函數對catkin_make執行時的參數進行解析,比如CATKIN_WHITELIST_PACKAGES。然後開始遍歷工作空間中的文件夾,如果文件夾中有package.xml文件就將其當作一個軟體包。同時對每個軟體包調用add_subdirectory。add_subdirectory是一個cmake的內置函數,會調用這個文件夾內的CMakeList.txt文件。這樣就開始了每個軟體包的編譯了。
(http://blog.csdn.net/bluewhalerobot/article/details/73658162)
生成的devel和build文件夾,devel是develop的縮寫,所以就是開發環境。
上面是devel文件夾的內容。
其中bin內是編譯的可執行文件。lib是pkg.pc文件和python的庫文件。include用來放置頭文件。share放置生成的pkgConfig.cmake文件。
對於build文件夾,生成是一些編譯中的中間文件,比如用來存儲一些環境變數之類的文件。這個文件夾意義不大。
總結一下整個編譯的過程
1. 執行catkin_make
2. 執行catkin_workspace。解析catkin_make的參數同時遍歷整個工作空間把所有的有package.xml的文件夾添加進軟體包列表裡面。對每個軟體包執行add_subdirectory
3. 執行每個軟體包內部的CMakeList.txt文件。
4. 執行 catkin_package。解析package.xml文件,載入對應的參數。根據依賴參數,載入對應的軟體包參數。根據載入參數生成當前軟體包的配置文件。
創建一個ROS的包(package)
ROS文件系統中的兩個最基本的概念:package和manifest,即包和清單文件。
Package是組織ROS代碼的最基本單位,每一個Package都可以包括庫文件,可執行文件,腳本及其它的一些文件。
Manifest文件是對Package的相關信息的一個描述。他提供了Package之間的依賴性,以及一個包的元信息,比如版本、維護著和許可證等信息。即每個包中的package.xml文件。
一個典型的工作空間結構如下:
rospack被用來獲取一個包的相關信息,這裡只介紹它的find選項,用法如下:
rospack find [package_name]
roscd命令允許您利用包的名字直接切換到相應的文件目錄下,當然這是對ROS文件系統而言,它的使用方法如下:
roscd [package_name]
roscd將只能打開存在與環境變數ROS_PACKAGE_PATH中的目錄及其子目錄。
一個包主要由以下幾部分組成:
(1)必須包括一個package.xml文件,由catkin_make的過程可知,package.xml 文件就是包的標識。
(2)必須包括一個CMakeLists.txt文件,也是catkin_make所必須。
(3)在每一個文件夾下只能有一個包,且包不允許嵌套。包就是存在於工作空 間下,由很多代碼文件組成的具有一定功能的集合。
一個最簡單的包類似於如下的形式:
my_package/
CMakeLists.txt
package.xml
可以使用catkin_create_pkg方便地創建一個包:
使用catkin_create_pkg命令的時候,要求你給出包的名字,及選擇性的給出所創建的包依賴於哪一個包。它的使用方法如下:
catkin_create_pkg package_name [depend1] [depend2] [depend3]
例如 catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
可以創建一個名字為beginner_tutorials的包,它直接依賴於後面的三個包:
std_msgs,rospy以及roscpp。
進入beginner_tutorials的文件夾可以看到package.xml和CMakeLists.txt。
或者用roscreate-pkg package_name [depend1] [depend2] [depend3]創建包
然後用rosmake package_name
**catkin是ROS的一個官方的編譯構建系統,是原本的ROS的編譯構建系統rosbuild的後**繼者。