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

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

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

      在写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 # 将安装到系统库
      

      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();
      

      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();
      

      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;
      }
      

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

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