RPL 0.3.0
RoboMaster Packet Library
载入中...
搜索中...
未找到
快速入门

本指南将带你快速上手 RPL,完成第一个数据包的定义、序列化和解析。

1. 定义数据包

推荐使用 RPL 在线生成器 图形化生成代码。

如果你想手动编写,只需定义一个结构体并特化 PacketTraits

// MyPackets.hpp
#pragma once
#include <cstdint>
// 定义数据结构 (必须是标准布局)
struct ControlPacket {
float x;
float y;
float w;
uint8_t mode;
};
// 注册数据包元信息
namespace RPL::Meta {
template <>
struct PacketTraits<ControlPacket> {
static constexpr uint16_t id = 0x101; // 命令码
static constexpr size_t size = sizeof(ControlPacket);
};
}
RPL库的数据包特性定义

2. 编写主程序

创建一个 main.cpp

#include <iostream>
#include <vector>
#include <RPL/Parser.hpp>
#include "MyPackets.hpp"
int main() {
// 1. 初始化组件
// 序列化器
// 反序列化器
// 解析器 (绑定反序列化器)
RPL::Parser<ControlPacket> parser(deserializer);
// 2. 创建并序列化数据
ControlPacket tx_packet{1.0f, 2.0f, 3.14f, 1};
std::vector<uint8_t> buffer(128);
// 序列化到 buffer
auto result = serializer.serialize(buffer.data(), buffer.size(), tx_packet);
size_t frame_len = result.value();
std::cout << "Serialized " << frame_len << " bytes." << std::endl;
// 3. 模拟接收和解析
// 将数据推入解析器
parser.push_data(buffer.data(), frame_len);
// 4. 获取解析结果
auto rx_packet = deserializer.get<ControlPacket>();
std::cout << "Received: x=" << rx_packet.x
<< ", y=" << rx_packet.y
<< ", mode=" << (int)rx_packet.mode << std::endl;
return 0;
}
RPL库的反序列化器实现
RPL库的解析器实现
RPL库的序列化器实现
反序列化器类
定义 Deserializer.hpp:36
T get() noexcept
获取指定类型的数据包
定义 Deserializer.hpp:51
解析器类
定义 Parser.hpp:34
序列化器类
定义 Serializer.hpp:47
tl::expected< size_t, Error > serialize(uint8_t *buffer, const size_t size, const Packets &... packets)
将数据包序列化到用户提供的缓冲区
定义 Serializer.hpp:62

3. 编译运行

编写 CMakeLists.txt

cmake_minimum_required(VERSION 3.20)
project(rpl_demo)
find_package(rpl REQUIRED)
add_executable(demo main.cpp)
target_link_libraries(demo PRIVATE rpl::rpl)

构建并运行:

mkdir build && cd build
cmake ..
make
./demo

恭喜!你已经成功运行了 RPL。接下来请阅读 集成指南 了解如何在嵌入式项目中使用。