RM2023_SENTRY_NAV/rm_serial/include/packet.hpp

70 lines
1.6 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Copyright (c) 2022 ChenJun
// Licensed under the MIT License.
#ifndef RM_SERIAL_DRIVER__PACKET_HPP_
#define RM_SERIAL_DRIVER__PACKET_HPP_
#include <algorithm>
#include <cstdint>
#include <vector>
namespace rm_serial
{
struct ReceivePacket
{
uint8_t header;
uint8_t robot_color:1;
uint8_t task_mode:2;
uint8_t game_progress:3; //<2F><><EFBFBD><EFBFBD>״̬ 3 <20><><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD> 4 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ 5 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t reserved : 2;
float body_joint_state;//lidar_link to base_link
uint16_t outpost_hp;
float target_x,target_y;
uint16_t checksum = 0;
} __attribute__((packed));
struct SendPacket
{
// uint8_t header = 0xA5;
// bool findEnemy : 1;
// bool target_color : 1;
// uint8_t task_mode : 2;
// bool suggest_fire : 1;
// uint8_t reserve : 3;
// float pitch_cmd = 0;
// float yaw_cmd = 0;
// float cmd_vx= 0,cmd_vy= 0,cmd_wz= 0;
uint8_t header = 0xA5;
// bool tracking : 1;
// bool target_color : 1;
// uint8_t task_mode : 2;
// bool suggest_fire : 1;
uint8_t reserve ;
float cmd_vx= 0,cmd_vy= 0,cmd_wz= 0;
uint16_t checksum = 0;
} __attribute__((packed));
inline ReceivePacket fromVector(const std::vector<uint8_t> & data)
{
ReceivePacket packet;
std::copy(data.begin(), data.end(), reinterpret_cast<uint8_t *>(&packet));
return packet;
}
inline std::vector<uint8_t> toVector(const SendPacket & data)
{
std::vector<uint8_t> packet(sizeof(SendPacket));
std::copy(
reinterpret_cast<const uint8_t *>(&data),
reinterpret_cast<const uint8_t *>(&data) + sizeof(SendPacket), packet.begin());
return packet;
}
} // namespace rm_serial_driver
#endif // RM_SERIAL_DRIVER__PACKET_HPP_