前面介紹了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