【流程模板】基于ros2创建一套可以编译通过的基本程序模板

以程序名为control为例:

1. 创建工作空间

mkdir control_ws

2. 创建源码文件夹

control_ws下

mkdir src

3. 创建功能包

control_ws/src下

mkdir control

4. 创建control源码文件夹

control_ws/src/control下

mkdir src

5. 创建CMakeLists.txt

下面是一个依赖于rclcpp的基本CMakeLists.txt模板:

cmake_minimum_required(VERSION 3.15)
project(control)

# Set C++ standard
set(CMAKE_CXX_STANDARD 17)

# Find ROS 2 packages
find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)

include_directories(
        include
)
# Add an executable
add_executable(${PROJECT_NAME}
        src/main.cpp
)

# Link dependencies
ament_target_dependencies(${PROJECT_NAME} rclcpp)

# Install the executable
install(TARGETS ${PROJECT_NAME}
        DESTINATION lib/${PROJECT_NAME})

#install(DIRECTORY launch/
#  DESTINATION share/${PROJECT_NAME}/launch)

ament_package()

需要根据程序名,修改第2行的project(xxx);

后续每添加一个依赖,需要在10行添加find_package(xxx REQUIRED),且第20行括号里最后添加 ament_target_dependencies(${PROJECT_NAME} rclcpp xxx);

第26行暂时被注释掉,可以手动在control_ws/src/control下添加一个launch文件夹,并在里面写上.launch文件,这样第26行就可以用了。

如果有多个可执行文件,可以增加:(注意修改了1,6,9行三处的可执行文件的名字)

add_executable(exec2
        src/exec2.cpp
)

# Link dependencies
ament_target_dependencies(exec2 rclcpp)

# Install the executable
install(TARGETS exec2
        DESTINATION lib/${PROJECT_NAME})

6. 创建package.xml

下面是依赖于rclcpp的基本package.xml模板:

<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
  <name>control</name>
  <version>0.0.0</version>
  <description>TODO: Package description</description>
  <maintainer email="[email protected]">wcx</maintainer>
  <license>TODO: License declaration</license>
  
  <buildtool_depend>ament_cmake</buildtool_depend>
  
  <depend>rclcpp</depend>

	<test_depend>ament_lint_auto</test_depend>
  <test_depend>ament_lint_common</test_depend>
  
  <export>
    <build_type>ament_cmake</build_type>
  </export>
</package>

需要根据程序名,修改第3行的name;

后续每添加一个依赖,需要在12行添加<depend>xxx</depend>。

7. 创建源码

在control_ws/src/control/src下,写一个最基本的依赖于rclcpp的main.cpp文件:

#include "rclcpp/rclcpp.hpp"
int main(int argc, char * argv[]) {
    rclcpp::init(argc, argv);
    return 0;
}

8. 编译

回到control_ws工作空间:

colcon build

猜你喜欢

转载自blog.csdn.net/qq_45461410/article/details/134005290