ROS:ROS是用於編寫機器人軟件程序的一種具有高度靈活性的軟件架構,ROS也就是robot operating system,他的主要目標是爲了機器人研究和開發提供代碼複用的支持。ROS是一個分佈式進程,也就是節點框架,這些進程被封裝在易於被分享和發佈的程序包和功能包中。
catkin:ROS的原始編譯和打包系統是rosbuild,而catkin是現在ROS的官方指定系統,catkin的原理和流程和Cmake都很類似。
1. 安裝並配置ROS
安裝ros
http://wiki.ros.org/cn/ROS/Installation
管理環境
每次打開終端都需要source一下才能運行ros的相關命令:
source /opt/ros/<distro>/setup.bash
創建ROS工作空間
我們使用catkin來創建catkin工作空間
$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/src
$ catkin_make
我們在當前目錄下能看到build和devel兩個文件夾,在devel文件夾中可以看到很多setup.*sh文件,source其中的任何一個都可以將當前工作空間設置在ROS工作環境的最頂層。所以:
source devel/setup.bash
我們需要查看一下工作空間是否配置正確:
$ echo $ROS_PACKAGE_PATH
/home/<youruser>/catkin_ws/src:/opt/ros/kinetic/share
/home/youruser/catkin_ws/src這一塊其實就是你自己一開始被build的工作目錄
2. ROS文件系統
文件系統:
- packages 軟件包,是ROS應用程序代碼的組織單元,每個軟件包都可以包含程序庫,可執行文件,腳本或者其他手動創建的東西
- Manifest : package.xml,清單,是對於軟件包相關信息的描述,用於定義軟件包相關元信息之間的依賴關係。
rospack命令
rospack用於獲取軟件包的相關信息,使用find參數找到軟件包路徑:
rospack find [包名稱]
roscd命令
roscd [本地包名稱[/子目錄]]
roscd只能切換到那些路徑已經包含在ROS_PACKAGE_PATH
環境變量中的軟件包,查看路徑:
echo $ROS_PACKAGE_PATH
/home/wangyf/xxx:/opt/ros/melodic/share
和其他的路徑環境變量類似,可以添加更多的其他路徑,每條路徑用冒號隔開。
3. 創建ROS程序包
一個catkin程序包包含:
my_package/
CMakeLists.txt
package.xml
一個工作空間看起來應該像:
workspace_folder/ -- WORKSPACE
src/ -- SOURCE SPACE
CMakeLists.txt -- 'Toplevel' CMake file, provided by catkin
package_1/
CMakeLists.txt -- CMakeLists.txt file for package_1
package.xml -- Package manifest for package_1
...
package_n/
CMakeLists.txt -- CMakeLists.txt file for package_n
package.xml -- Package manifest for package_n
創建一個catkin程序包:
進入目錄:
然後使用
catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
這行命令創建了一個beginner_tutorials新程序包,這個包依賴於std_msgs/roscpp/rospy
查看程序包依賴
rospack depends1 rospy
最後記得對package.xml裏面的信息進行修改。