紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
小鱼 ROS 2 新书上线!点击链接查看, 新书配套视频点击链接查看。
提问前必看的发帖注意事项—— 提问前必看!不符合要求的问题拒绝回答!!
社区使用指南—如何添加标签修改密码
小鱼 ROS 2 新书上线!点击链接查看, 新书配套视频点击链接查看。
提问前必看的发帖注意事项—— 提问前必看!不符合要求的问题拒绝回答!!
社区使用指南—如何添加标签修改密码
FishProtocol是一个方便的C++多协议(串口/UDP/TCP)通信库
-
在写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; }