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

    小鱼开源的ROS2串口库最新Bug已经修复,目前已经16颗星,欢迎品尝

    已定时 已固定 已锁定 已移动
    工具软件
    ros2 串口通信 serial 读数据
    1
    1
    502
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 小鱼小
      小鱼 技术大佬
      最后由 编辑

      大家好,我是爱吃鱼香ROS的小鱼,最近有小伙伴反应用小鱼之前开源的串口库遇到了异常,具体的问题见社区帖子: https://fishros.org.cn/forum/topic/766

      最终经过这位小伙伴测试,给出了关键性的问题

      cdd9f700-5011-443e-959f-736cd3a08881-image.png

      结合代码,相信聪明的小伙伴已经知道问题在哪里了

      int main(int argc, char** argv) {
        /* 初始化rclcpp  */
        rclcpp::init(argc, argv);
        /*产生一个node_01的节点*/
        auto node = std::make_shared<rclcpp::Node>("example_fish_protocol");
        // 打印一句自我介绍
        RCLCPP_INFO(node->get_logger(), "example_fish_protocol节点已经启动.");
      
        fish_protocol::ProtocolConfig proto_config;
        proto_config.protocol_type_ = fish_protocol::PROTOCOL_TYPE::SERIAL;
        proto_config.serial_baut_ = 115200;
        proto_config.serial_address_ = "/dev/ttyS12";
        // 初始化
        auto protocol = GetProtocolByConfig(proto_config);
        // 发送数据
        protocol->ProtocolSendRawData("Hello FishBot!");
        // 接收数据
        protocol->SetDataRecvCallback([](const std::string& data) -> void {
          std::cout << "recv" << data << std::endl;
        });
      
        /* 运行节点,并检测退出信号 Ctrl+C*/
        rclcpp::spin(node);
        
        // 销毁
        protocol->ProtocolDestory();
        /* 停止运行 */
        rclcpp::shutdown();
        return 0;
      }
      

      我们是在构造函数里连接的串口,当有数据时就会调用回调函数,但是没有对回调函数是否为空进行判断,造成了这一问题。

      so改一下!

        void SerialProtocol::_recvDataCallback(const boost::system::error_code &error,
                                               size_t bytes_transferred)
        {
          if (bytes_transferred > 0)
          {
            std::string data_str(recv_data_buffer_, bytes_transferred);
            if (recv_data_callback_)
            {
              // 回调数据
              recv_data_callback_(data_str);
            }
          }
          _asyncReadSomeData();
        }
      
      

      完成!

      最新的代码小鱼已经提交了,欢迎有需要的小伙伴使用~

      开源地址: https://github.com/fishros/fish_protocol

      新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

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