在做高博的手写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的文件夹下。