鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

    ros2将多个topic的消息写进文件

    已定时 已固定 已锁定 已移动
    ROS 2相关问题
    ros2 cpp 文件流
    1
    2
    511
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 32023198723
      TheNeverLemon
      最后由 编辑

      通过建立多个监听者将topic的消息订阅到想把他们写进文件,但是ros2的订阅函数都是静态的,我应该怎么才能将这些不同的消息整合到一起处理呢?

      #include <memory>
      #include <iostream>
      #include <fstream>
      
      #include "rclcpp/rclcpp.hpp"
      #include "auto_move_msgs/msg/car_message.hpp"
      #include "auto_move_msgs/msg/imu_message.hpp"
      #include "auto_move_msgs/msg/save_message.hpp"
      using std::placeholders::_1;
      
      //struct save_message{
      //    float speed;
      //    float torque;
      //    float acceleration;
      //};
      
      class DataCollector : public rclcpp::Node
      {
      public:
          auto_move_msgs::msg::SaveMessage saveMessage;
          DataCollector()
                  : Node("data_collector_subscriber")
          {
              car_subscription_ = this->create_subscription<auto_move_msgs::msg::CarMessage>(
                      "car_message", 10, std::bind(&DataCollector::car_message_callback, this, _1));
      
              imu_subscription_ = this->create_subscription<auto_move_msgs::msg::ImuMessage>(
                      "imu_message", 10, std::bind(&DataCollector::imu_message_callback, this, _1));
              //RCLCPP_INFO(this->get_logger(),"I will write data to file");
              //ofstream
      
          }
      
      private:
          void car_message_callback(const auto_move_msgs::msg::CarMessage::SharedPtr car_msg) const
          {
              RCLCPP_INFO(this->get_logger(), "I heard car message: '%f' , '%f'", car_msg->speed,car_msg->torque);
              saveMessage.speed = car_msg->speed;
              saveMessage.torque = car_msg->torque;
          }
      
          void imu_message_callback(const auto_move_msgs::msg::ImuMessage::SharedPtr imu_msg) const
          {
              RCLCPP_INFO(this->get_logger(), "I heard imu message: '%f'", imu_msg->acceleration);
              saveMessage.acceleration = imu_msg->acceleration;
          }
      
          rclcpp::Subscription<auto_move_msgs::msg::CarMessage>::SharedPtr car_subscription_;
          rclcpp::Subscription<auto_move_msgs::msg::ImuMessage>::SharedPtr imu_subscription_;
      };
      int main(int argc, char * argv[])
      {
          rclcpp::init(argc, argv);
          rclcpp::spin(std::make_shared<DataCollector>());
          rclcpp::shutdown();
          return 0;
      }
      

      上面是我的代码我想将多个topic保存进我自定义的消息里然后写进文件,大家有什么好的建议吗

      1 条回复 最后回复 回复 引用 0
      • 32023198723
        TheNeverLemon
        最后由 编辑

        数据处理问题已经解决实际上是一个cpp语法问题

            auto_move_msgs::msg::SaveMessage saveData;
            auto_move_msgs::msg::SaveMessage & saveMessage = saveData;
        

        用一个引用就可以修改数据本身了

        写进文件的操作正在解决,大家有什么好的建议可以给我留言

        1 条回复 最后回复 回复 引用 0
        • 第一个帖子
          最后一个帖子
        皖ICP备16016415号-7
        Powered by NodeBB | 鱼香ROS