昨晚直播小鱼搞了个开源库之FishProtocol,目前已经两颗星
Posted 鱼香ROS
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了昨晚直播小鱼搞了个开源库之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 # 将安装到系统库
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;
以上是关于昨晚直播小鱼搞了个开源库之FishProtocol,目前已经两颗星的主要内容,如果未能解决你的问题,请参考以下文章