在C++和ROS2(Robot Operating System 2)中处理传感器数据通常涉及以下步骤:
Node
类使用create_subscription
函数完成的。订阅时,你需要指定话题名称、消息类型以及回调函数。以下是一个简单的示例,展示了如何在C++和ROS2中订阅传感器数据并打印到控制台:
#include <rclcpp/rclcpp.hpp>
#include <sensor_msgs/msg/sensor_data.hpp>
class SensorSubscriber : public rclcpp::Node
{
public:
SensorSubscriber() : Node("sensor_subscriber")
{
// 创建一个订阅者,订阅传感器数据话题
subscription_ = this->create_subscription<sensor_msgs::msg::SensorData>(
"sensor_data", 10, std::bind(&SensorSubscriber::sensor_callback, this, std::placeholders::_1));
}
private:
void sensor_callback(const sensor_msgs::msg::SensorData::SharedPtr msg)
{
// 在这里处理传感器数据
RCLCPP_INFO(this->get_logger(), "Received sensor data: %f", msg->data);
}
rclcpp::Subscription<sensor_msgs::msg::SensorData>::SharedPtr subscription_;
};
int main(int argc, char *argv[])
{
rclcpp::init(argc, argv);
rclcpp::spin(std::make_shared<SensorSubscriber>());
rclcpp::shutdown();
return 0;
}
请注意,这个示例假设你已经有一个名为sensor_data
的话题,它发布sensor_msgs/msg/SensorData
类型的消息。你需要根据你的传感器和ROS2设置进行适当的调整。