ROS2 中的工作空间和功能包
在 ROS2 中,工作空间和功能包(packages)是组织和管理代码的基本单元。以下是如何创建和管理 ROS2 工作空间和功能包的详细步骤。
一、 创建 ROS2 工作空间
一个 ROS2 工作空间是一组功能包的集合,可以通过以下步骤创建和管理:
1. 创建工作空间目录
首先,创建一个工作空间的根目录,并在其中创建 src
目录以存放功能包:
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
2. 初始化工作空间
使用 colcon
工具初始化工作空间。colcon
是 ROS 2 推荐的构建工具:
colcon build
二、创建 ROS2 功能包
功能包是 ROS2 中用于组织和管理代码的基本单元。以下是创建一个新的 ROS2 功能包的步骤:
1. 进入 src
目录
确保你在工作空间的 src
目录中:
cd ~/ros2_ws/src
2. 使用 ros2 pkg create
命令创建功能包
例如,创建一个名为 my_package
的功能包,依赖于 rclcpp
和 std_msgs
:
ros2 pkg create --build-type ament_cmake --node-name my_node --dependencies rclcpp std_msgs my_package
这将创建一个基本的功能包结构,包含以下文件和目录:
my_package/
├── CMakeLists.txt
├── package.xml
├── src/
│ └── my_node.cpp
└── include/
└── my_package/
三、编写功能包代码
在 src
目录中的 my_node.cpp
文件中编写你的节点代码。例如,一个简单的发布者节点:
#include <rclcpp/rclcpp.hpp>
#include <std_msgs/msg/string.hpp>
class MyNode : public rclcpp::Node
{
public:
MyNode() : Node("my_node")
{
publisher_ = this->create_publisher<std_msgs::msg::String>("topic", 10);
timer_ = this->create_wall_timer(
std::chrono::seconds(1),
std::bind(&MyNode::timer_callback, this));
}
private:
void timer_callback()
{
auto message = std_msgs::msg::String();
message.data = "Hello, world!";
publisher_->publish(message);
}
rclcpp::Publisher<std_msgs::msg::String>::SharedPtr publisher_;
rclcpp::TimerBase::SharedPtr timer_;
};
int main(int argc, char *argv[])
{
rclcpp::init(argc, argv);
rclcpp::spin(std::make_shared<MyNode>());
rclcpp::shutdown();
return 0;
}
四、配置 CMakeLists.txt
在 CMakeLists.txt
中添加构建和安装指令:
cmake_minimum_required(VERSION 3.5)
project(my_package)
find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
find_package(std_msgs REQUIRED)
add_executable(my_node src/my_node.cpp)
ament_target_dependencies(my_node
rclcpp
std_msgs
)
install(TARGETS
my_node
DESTINATION lib/${PROJECT_NAME})
ament_package()
五、配置 package.xml
在 package.xml
中添加依赖项:
<package format="2">
<name>my_package</name>
<version>0.0.0</version>
<description>My first ROS 2 package</description>
<maintainer email="user@example.com">Your Name</maintainer>
<license>Apache-2.0</license>
<buildtool_depend>ament_cmake</buildtool_depend>
<build_depend>rclcpp</build_depend>
<build_depend>std_msgs</build_depend>
<exec_depend>rclcpp</exec_depend>
<exec_depend>std_msgs</exec_depend>
<export>
<build_type>ament_cmake</build_type>
</export>
</package>
六、构建和运行
构建功能包
返回工作空间根目录并构建功能包:
cd ~/ros2_ws
colcon build
运行节点
在构建成功后,使用以下命令运行节点:
source install/setup.bash
ros2 run my_package my_node
总结
以上步骤详细介绍了如何在 ROS2 中创建和管理工作空间和功能包。通过这些步骤,你可以组织和管理你的 ROS2 项目,并编写和运行自定义的 ROS2 节点。如果你有任何问题或需要进一步的帮助,请参考 ROS2 官方文档 或向社区寻求帮助。