在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設置進行適當的調整。