• 昨晚直播小鱼搞了个开源库之FishProtocol,目前已经两颗星


    最近没怎么发文章,主要原因是推进FishBot的开发,小鱼也经常在B站直播干活,昨天周末直播了十几个小时的时间,把FishBot验证板的原理图、PCB搞完了,过两天写个文章给大家汇报下进度。

    在写FishBot的SDK时,小鱼打算以多种方式进行数据的通信的,包括串口、UDP、TCP等,所以就对通信模块进行了封装,实现简单的更换配置,完成协议的切换。

    因为前段时间总有小伙伴问如何在ROS2中调用串口,就想着要不把这部分代码抽出来给大家,二来后续的更新和维护可以从FishBot中抽离出来,方便更多的小伙伴一起Work。同时小鱼顺手写了一个ROS2的例程,当然还有g++和CMake版本的使用样例代码。

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

    FishProtocol

    FishProtocol是一个方便的C++多协议(串口/UDP/TCP)通信库。

    FishProtocol是从FishBot的Driver中抽离出的,采用boost库作为核心进行了二次封装,可以简单快速的通过几行代码建立串口/UDP等通信。随着FishBot的不断完善,该库也将不断的更新完善,后续将同时支持对多端进行同时连接,实现多机控制等功能。

    同时该库也可以在ROS2中使用,工程中提供有相关例程,见examples文件夹。

    1.快速安装

    sudo apt install libboost-dev
    git clone https://gh.api.99988866.xyz/https://github.com/fishros/fish_protocol.git 
    cd fish_protocol && mkdir build  && cd build
    cmake .. && sudo make install # 将安装到系统库
    
    • 1
    • 2
    • 3
    • 4

    2.快速使用/串口通信

    fish_protocol::ProtocolConfig proto_config;
    proto_config.protocol_type_ = 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;
    });
    
    // 销毁
    protocol->ProtocolDestory();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    3.快速上手/UDPServer通信

    fish_protocol::ProtocolConfig proto_config;
    proto_config.protocol_type_ = PROTOCOL_TYPE::UDP_SERVER;
    proto_config.udp_server_ip_ = "0.0.0.0";
    proto_config.udp_server_port_ = 3474;
    
    // 初始化
    auto protocol = GetProtocolByConfig(proto_config);
    
    // 发送数据
    protocol->ProtocolSendRawData("Hello FishBot!");
    
    // 接收数据
    protocol->SetDataRecvCallback([](const std::string& data) -> void {
        std::cout<<"recv"<<data<<std:endl;
    });
    
    // 销毁
    protocol->ProtocolDestory();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    4.在ROS2中使用-串口通信

    #include "fish_protocol/fish_protocol.h"
    #include "rclcpp/rclcpp.hpp"
    
    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;
      });
      // 销毁
      protocol->ProtocolDestory();
    
      /* 运行节点,并检测退出信号 Ctrl+C*/
      rclcpp::spin(node);
      /* 停止运行 */
      rclcpp::shutdown();
      return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
  • 相关阅读:
    并发chapter1:引文;
    信创就用国产的 Solon Java Framework,v2.6.0 发布
    SLAM中去除动态物体的部分方法(主要是视觉SLAM)
    [ROS](11)ROS通信 —— 服务(Service)通信编程之srv(C++)(Python)
    python处理csv文件
    “AI在未来”公益计划,亚马逊云科技将教育资源带到更多中西部学校
    创建数据透视表:根据表中一列作为分类的依据统计每个类别下不同子项数量cross_tab()
    浅析基于视频图像的智能分析网关AI算法及场景应用
    单片机外围电路设计常出现的问题
    [2022 强网杯] devnull 复现
  • 原文地址:https://blog.csdn.net/qq_27865227/article/details/125972889