文章目录
前言
因为项目需要把写好的C++工程改为在ROS下编译运行,网上相关博客很杂,便想记录一下我的修改过程。
一、新建catkin工作空间,复制源码
mkdir -p catkin_planner/src
cd catkin_planner/src
在它下面新建frenet_planner功能包
catkin_create_pkg frenet_planner roscpp
这步会自动生成CMakeLists.txt和package.xml文件,src文件夹和include文件夹
把原来C++工程中的src文件夹和include文件夹复制到frenet_planner目录下。
二、改CMakeLists.txt和package.xml
1.修改CMakeLists.txt
添加ROS的catkin包,链接 Eigen 库。
# 添加ROS的catkin包
find_package(catkin REQUIRED COMPONENTS
roscpp
std_msgs
)
# 添加代码需要的eigen3库
find_package(Eigen3 REQUIRED)
# 添加当前包所依赖的其他 Catkin 包
catkin_package(
CATKIN_DEPENDS
roscpp
std_msgs
)
include_directories(
include
${catkin_INCLUDE_DIRS}
${EIGEN3_INCLUDE_DIRS}
)
add_executable(threemode src/three_mode.cpp)
#添加依赖库
target_link_libraries(threemode ${catkin_LIBRARIES} ${EIGEN3_LIBRARIES})
2.修改package.xml文件
其他的都不用变,添加所依赖的ROS包即可。
<buildtool_depend>catkin</buildtool_depend>
<build_depend>roscpp</build_depend>
<build_depend>std_msgs</build_depend>
<build_depend>eigen3</build_depend>
<exec_depend>roscpp</exec_depend>
<exec_depend>std_msgs</exec_depend>
<exec_depend>eigen3</exec_depend>
三、源码添加ROS头文件和创建ROS节点
1. 添加ROS头文件
#include <ros/ros.h>
2. 创建并运行ROS节点
int main(int argc, char** argv) {
// Initialize ROS node
ros::init(argc, argv, "threemode");
// Your code here
return 0;
}
回到工作目录下,重新编译。
cd catkin_planner
catkin_make
添加工作空间环境
source devel/setup.bash
用ROS命令启动程序
新建一个终端:
roscore
再建一个终端:
rosrun frenet_planner threemode
就能看到运行结果啦
至此,已经将一个C++程序改造为一个ROS程序!
参考:
https://blog.csdn.net/u011304078/article/details/102986429
https://www.jianshu.com/p/2bc50ff68bdc
总结
以上就是今天要讲的内容,本文仅仅简单介绍了如何将C++程序改造为ROS程序运行,后续还要考虑在源码添加ROS话题发布数据,最终实现利用ROS进行上下游工程相互通信的功能。