ros2 入门demo
时间: 2023-10-22 08:09:49 浏览: 115
ros_simulink_carsim三者联合仿真入门的demo
好的,以下是一个简单的 ROS 2 入门示例。
假设你已经安装好了 ROS 2 和相关的依赖包。我们将创建一个简单的 ROS 2 节点,该节点将发布一个名为 `/demo_topic` 的主题,其中包含一个字符串消息。我们还将创建一个订阅该主题的节点。
首先,在终端中创建一个工作空间:
```
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/
colcon build
```
接下来,创建一个 ROS 2 包:
```
cd ~/ros2_ws/src
ros2 pkg create my_demo_pkg --build-type ament_cmake
```
这将在 `~/ros2_ws/src` 目录下创建一个名为 `my_demo_pkg` 的 ROS 2 包。进入该包的目录:
```
cd my_demo_pkg/
```
在 `my_demo_pkg` 目录下创建一个名为 `publisher.cpp` 的 C++ 文件,并将以下代码复制到文件中:
```cpp
#include "rclcpp/rclcpp.hpp"
#include "std_msgs/msg/string.hpp"
using namespace std::chrono_literals;
class PublisherNode : public rclcpp::Node
{
public:
PublisherNode() : Node("publisher_node")
{
publisher_ = this->create_publisher<std_msgs::msg::String>("/demo_topic", 10);
timer_ = this->create_wall_timer(1s, std::bind(&PublisherNode::timer_callback, this));
}
private:
void timer_callback()
{
auto message = std_msgs::msg::String();
message.data = "Hello, ROS 2!";
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);
auto node = std::make_shared<PublisherNode>();
rclcpp::spin(node);
rclcpp::shutdown();
return 0;
}
```
这个节点将创建一个名为 `/publisher_node` 的节点,并在 `/demo_topic` 主题上发布一个字符串消息。
接下来,在 `my_demo_pkg` 目录下创建一个名为 `subscriber.cpp` 的 C++ 文件,并将以下代码复制到文件中:
```cpp
#include "rclcpp/rclcpp.hpp"
#include "std_msgs/msg/string.hpp"
void callback(const std_msgs::msg::String::SharedPtr msg)
{
RCLCPP_INFO(rclcpp::get_logger("subscriber_node"), "Received message: '%s'", msg->data.c_str());
}
int main(int argc, char **argv)
{
rclcpp::init(argc, argv);
auto node = rclcpp::Node::make_shared("subscriber_node");
auto subscriber = node->create_subscription<std_msgs::msg::String>("/demo_topic", 10, callback);
rclcpp::spin(node);
rclcpp::shutdown();
return 0;
}
```
这个节点将创建一个名为 `/subscriber_node` 的节点,并订阅 `/demo_topic` 主题。当接收到消息时,它将打印消息内容。
现在,我们需要将这两个节点添加到 `CMakeLists.txt` 文件中:
```
add_executable(publisher_node src/publisher.cpp)
ament_target_dependencies(publisher_node rclcpp std_msgs)
add_executable(subscriber_node src/subscriber.cpp)
ament_target_dependencies(subscriber_node rclcpp std_msgs)
```
最后,编译并运行节点:
```
cd ~/ros2_ws/
colcon build --packages-select my_demo_pkg
source install/setup.bash
ros2 run my_demo_pkg publisher_node
```
在另一个终端中运行以下命令:
```
ros2 run my_demo_pkg subscriber_node
```
现在你应该能够在订阅节点的终端中看到如下输出:
```
[INFO] [subscriber_node]: Received message: 'Hello, ROS 2!'
```
这就是一个简单的 ROS 2 入门示例。你可以尝试修改代码并探索更多高级功能。
阅读全文