https://www.it610.com/article/1294688627372138496.htm
在做高博的手寫VIO課程的第二章作業,作為一個對ROS零基礎的人來說,編譯ros下的cpp、尋找可執行文件,都找了半天,記錄一下流程,便於之后使用。
1.創建工作空間
mkdir -p ~/ROS_WORKSPACE/vio_imudata/src #創建一個工作空間
cd ~/ROS_WORKSPACE/vio_imudata/src #進入該目錄
catkin_init_workspace #會產生一個Cmake.list文件在該目錄下
接着編譯該空的工作空間
cd .. #回到與src同級別的路徑下
catkin_make
這個時候會多了兩個文件夾,一個devel和一個build。並且在devel下有幾個setup.*sh,我們可以根據我們的終端類型來進行確定使用那個sh來激活環境變量,如我使用的是bash終端
source devel/setup.bash #激活該工作空間的環境變量
echo $ROS_PACKAGE_PATH #讀取環境變量 /home/john/ROS_WORKSPACE/test/src:/opt/ros/melodic/share
2.創建功能包(package)
cd src #進入src空間
catkin_create_pkg imu_data std_msgs roscpp rospy #創建功能包,imu_data為包名字,后面的為依賴
這個命令會創建一個名字為imu_data的package,並在這個包下面生成了一系列的文件和文件夾:
CMakeLists.txt include package.xml src
其中CMakeLists.txt是一個cmake的腳本文件,用來編譯源文件的管理平台
其中package.xml是配置文件,生產所需要的依賴
src用來放置我們的源代碼
3.放置源代碼
我們把源代碼放入到src文件中后,對CMakeList.txt和package.xml進行修改。
4.源碼的編譯
我使用的CMakeList.txt中的內容為:
cmake_minimum_required(VERSION 2.8.3)
project(vio_data_simulation)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
rosbag
)
catkin_package(
)
include_directories(
# include
${catkin_INCLUDE_DIRS}
)
add_executable(${PROJECT_NAME}_node
src/gener_alldata.cpp src/param.cpp src/utilities.cpp src/imu.cpp)
target_link_libraries(${PROJECT_NAME}_node
${catkin_LIBRARIES}
)
add_executable(${PROJECT_NAME}_node_txt
src/gener_alldata_txt.cpp src/param.cpp src/utilities.cpp src/imu.cpp)
package.xml基本上不需要改動,會自動生成好。
接着就是編譯工作區:
cd ~/ROS_WORKSPACE/test #回到工作區中與src同一層的路徑下
catkin_make #進行編譯
5.程序的執行
在完成編譯之后,會生成一個可執行文件。我之前都是在工作空間中利用mkdir build, cmake .. , make 這一系列操作進行編譯的,一般都會在build中生成可執行文件,但是這次的不一樣,沒有在build中。剛開始以為沒有生成來着,但是編譯成功了,肯定是生成了,找了半天,發現在/home/john/ROS_WORKSPACE/vio_imudata/devel/lib/vio_data_simulation中,即在devel的文件夾下。