您好,登錄后才能下訂單哦!
ROS中的cmake指的是什么,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
這一次討論ROS中的cmake和ROS代碼編譯過程。
1. 基礎準備
首先開始創建基礎工作空間,新建一個ROS項目,名字為catkin_ws,并在里面建立 src 文件夾
$ mkdir ~/catkin_ws $ cd ~/catkin_ws $ mkdir src $ cd src
然后在src文件加下利用ROS包工具,catkin_create_pkg,新建一個包名為“test”,依賴于"std_msgs, rospy, roscpp"
$ catkin_create_pkg test std_msgs rospy roscpp tf sensor_msgs image_transport cv_bridge
然后在test文件夾下的src里面新建test.cpp文件,這個文件是源代碼的標準放置位置。此時的文件結構如下
. └── src └── test ├── CMakeLists.txt ├── include │ └── test ├── package.xml └── src └── test.cpp
這種文件結構是一種標準的ROS項目和包的結構。如果需要增加新的node包,我們只需要在src下增加一個和test文件夾結構類似的文件夾,例如test2,文件結構變為如下。
. └── src ├── test │ ├── CMakeLists.txt │ ├── include │ │ └── test │ ├── package.xml │ ├── package.xml~ │ └── src │ └── test.cpp └── test2 ├── CMakeLists.txt ├── include │ └── test2 ├── package.xml └── src └── test2.cpp
2. 文件結構準備好后,需要配置CMakeLists.txt和package.xml
這里針對具體的例子來配置。這個例子是OpenCV的例子,純C++代碼,不涉及具體的ROS函數。例子的功能是讀取攝像頭的輸入,并展示出來。(Ubuntu 14.04 上面測試通過,注意其中的OpenCV庫的引用,請用自己的具體OpenCV庫頭文件路徑包含,具體配置還需自行google)
#include <iostream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <stdio.h> //#include "ros/ros.h" //#include "std_msgs/String.h" using namespace cv; using namespace std; int main(int argc, char** argv) { //ros::init(argc, argv, "test"); Mat image; int cam_idx = 0; if (argc == 2) { cam_idx = atoi(argv[1]); } VideoCapture cap(cam_idx); if (!cap.isOpened()) { cerr << "Could not open camera." << endl; exit(EXIT_FAILURE); } namedWindow("Display Image"); for(;;){ cap >> image; imshow("Display Image", image); waitKey(5); } //ros::spin(); return 0; }
首先配置CMakeLists.txt,添加這里的例子 test.cpp ,配置后的文件為,(更具體的參數解釋可以參考 wiki)
cmake_policy(SET CMP0012 NEW) cmake_minimum_required(VERSION 2.8.3) project(test) # find_package(catkin REQUIRED COMPONENTS cv_bridge image_transport roscpp rospy sensor_msgs std_msgs tf ) find_package(OpenCV REQUIRED) include_directories(${OpenCV_INCLUDE_DIRS}) include_directories( ${catkin_INCLUDE_DIRS} ) #add our own node src add_executable(test_node src/test.cpp) target_link_libraries(test_node ${OpenCV_LIBS} ${catkin_LIBRARIES})
接著配置下package.xml(更具體的每項解釋參考ROS,wiki )
<?xml version="1.0"?> <package> <name>test</name> <version>0.0.0</version> <description>The test package</description> <maintainer email="caoyuanfenglv@163.com">caoyuanfeng</maintainer> <license>TODO</license> <buildtool_depend>catkin</buildtool_depend> <build_depend>cv_bridge</build_depend> <build_depend>image_transport</build_depend> <build_depend>roscpp</build_depend> <build_depend>rospy</build_depend> <build_depend>sensor_msgs</build_depend> <build_depend>std_msgs</build_depend> <build_depend>tf</build_depend> <build_depend>opencv</build_depend> <run_depend>cv_bridge</run_depend> <run_depend>image_transport</run_depend> <run_depend>roscpp</run_depend> <run_depend>rospy</run_depend> <run_depend>sensor_msgs</run_depend> <run_depend>std_msgs</run_depend> <run_depend>tf</run_depend> <run_depend>opencv</run_depend> <export> </export> </package>
注意里面多加了OpenCV的以來和圖像相關的依賴。
3.編譯運行
在配置好兩個文件以后,一般的新增ROS項目和node需要修改的都是這兩個文件,或者只有CMakelists.txt一個文件,如果依賴相同的。
回到項目的根目錄,也就是catkin_ws文件夾,然后用catkin_make編譯
$ cd ~/catkin_make $ ls src $ catkin_make
接著,運行得到的node
$ source devel/setup.bash $ rosrun test test_node
將會看到打開攝像頭,彈出來攝像頭的畫面。表示這個node編譯運行成功。
回頭看去,總結了下整個ROS項目的過程就是這樣的
新建固定的文件結構
copy標準的CMakeLists.txt和package.xml文件
分析自己的項目依賴,配置上面的兩個配置文件
編寫自己的src代碼,在CMakeLists.txt里面添加源代碼路徑
編譯運行,出錯返回3,成功則 good job。
整個項目的代碼都在git@osc上面,可以查看這里。
關于ROS中的cmake指的是什么問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。