193 lines
4.9 KiB
C++
193 lines
4.9 KiB
C++
#pragma once
|
||
#include "messagebasic.h"
|
||
|
||
/// <summary>
|
||
/// 指定航路机动模式
|
||
/// </summary>
|
||
enum class NavigateDriveMode {
|
||
Cruise, // 巡航模式,长途奔袭模式
|
||
FullSpeed,// 全速模式,战斗机动
|
||
ReachStop, // 停驻模式
|
||
};
|
||
/// <summary>
|
||
/// 依照指定名称路径机动
|
||
/// </summary>
|
||
struct MESSAGEBASIC_EXPORT NavigateWithRoute : public AbstractMessage {
|
||
QString _route_name; // 规划航线名称
|
||
NavigateDriveMode _drive_mode; // 驱动模式
|
||
|
||
NavigateWithRoute();
|
||
|
||
// Serializable
|
||
std::shared_ptr<Serializable> newDefault() const override;
|
||
void recoveryFrom(const QJsonObject& obj) override;
|
||
void saveTo(QJsonObject& obj) const override;
|
||
};
|
||
|
||
/// <summary>
|
||
/// 平台机动命令,机体坐标系:主轴为Y,向右为X,向上为Z
|
||
/// </summary>
|
||
struct MESSAGEBASIC_EXPORT PlatformMotionCommand : public AbstractMessage {
|
||
PlatformMotionCommand(const QString &nm);
|
||
/// <summary>
|
||
/// 机动起始时间
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
virtual double startTimepoint() const = 0;
|
||
/// <summary>
|
||
/// 消耗时间
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
virtual double timeExpend() const = 0;
|
||
/// <summary>
|
||
/// 指定时间点的相对位置
|
||
/// </summary>
|
||
/// <param name="time"></param>
|
||
/// <returns>机体坐标系</returns>
|
||
virtual QVector3D posAtTimeSpan(double time) const = 0;
|
||
/// <summary>
|
||
/// 指定时间点的速度矢量
|
||
/// </summary>
|
||
/// <param name="time"></param>
|
||
/// <returns>机体坐标系</returns>
|
||
virtual QVector3D speedAtTimeSpan(double time) const = 0;
|
||
};
|
||
|
||
/// <summary>
|
||
/// 推演指定时间点机动状态
|
||
/// </summary>
|
||
struct MESSAGEBASIC_EXPORT MotionDeduceRequest : public AbstractMessage {
|
||
double _target_time = 0;
|
||
|
||
MotionDeduceRequest();
|
||
|
||
// Serializable
|
||
std::shared_ptr<Serializable> newDefault() const override;
|
||
void recoveryFrom(const QJsonObject& obj) override;
|
||
void saveTo(QJsonObject& obj) const override;
|
||
};
|
||
|
||
/// <summary>
|
||
/// 查看指定目标实体的机动指令序列
|
||
/// </summary>
|
||
struct MESSAGEBASIC_EXPORT MotionSequencePreviewGet : public AbstractMessage {
|
||
MotionSequencePreviewGet();
|
||
std::shared_ptr<Serializable> newDefault() const override;
|
||
};
|
||
|
||
/// <summary>
|
||
/// 平台机动命令序列
|
||
/// </summary>
|
||
struct MESSAGEBASIC_EXPORT PlatformMotionSequence : public AbstractMessage {
|
||
QList<std::shared_ptr<PlatformMotionCommand>> _cmd_sequence;
|
||
|
||
PlatformMotionSequence();
|
||
|
||
// Serializable
|
||
std::shared_ptr<Serializable> newDefault() const override;
|
||
void recoveryFrom(const QJsonObject& obj) override;
|
||
void saveTo(QJsonObject& obj) const override;
|
||
};
|
||
|
||
|
||
// 机动命令实现 =======================================================
|
||
|
||
/// <summary>
|
||
/// 直线机动
|
||
/// </summary>
|
||
struct MESSAGEBASIC_EXPORT StrightLineMotion : public PlatformMotionCommand {
|
||
/// <summary>
|
||
/// 起始时间
|
||
/// </summary>
|
||
double _start_time = 0;
|
||
/// <summary>
|
||
/// 机动速度,m/s
|
||
/// </summary>
|
||
double _speed_motion = 0;
|
||
/// <summary>
|
||
/// 加速度,m/s^2
|
||
/// </summary>
|
||
double _accerlate_rates = 0;
|
||
/// <summary>
|
||
/// 路径长度
|
||
/// </summary>
|
||
double _length_total = 0;
|
||
|
||
StrightLineMotion();
|
||
|
||
double startTimepoint() const override;
|
||
double timeExpend() const override;
|
||
QVector3D posAtTimeSpan(double time) const override;
|
||
QVector3D speedAtTimeSpan(double time) const override;
|
||
|
||
std::shared_ptr<Serializable> newDefault() const override;
|
||
void recoveryFrom(const QJsonObject& obj) override;
|
||
void saveTo(QJsonObject& obj) const override;
|
||
};
|
||
|
||
#include <QVector3D>
|
||
/// <summary>
|
||
/// 基于机体坐标系的水平标准圆弧机动
|
||
/// </summary>
|
||
struct MESSAGEBASIC_EXPORT HorizontalArcMotion : public PlatformMotionCommand {
|
||
/// <summary>
|
||
/// 起始时间
|
||
/// </summary>
|
||
double _start_time = 0;
|
||
/// <summary>
|
||
/// 转弯圆心,<xpos, ypos, 0>
|
||
/// </summary>
|
||
QVector3D _center_point;
|
||
/// <summary>
|
||
/// 弧线转角,°
|
||
/// </summary>
|
||
double _rotate_deg = 0;
|
||
/// <summary>
|
||
/// 机动速度,m/s
|
||
/// </summary>
|
||
double _speed_motion = 0;
|
||
|
||
HorizontalArcMotion();
|
||
|
||
double startTimepoint() const override;
|
||
double timeExpend() const override;
|
||
QVector3D posAtTimeSpan(double time) const override;
|
||
QVector3D speedAtTimeSpan(double time) const override;
|
||
|
||
std::shared_ptr<Serializable> newDefault() const override;
|
||
void recoveryFrom(const QJsonObject& obj) override;
|
||
void saveTo(QJsonObject& obj) const override;
|
||
};
|
||
|
||
/// <summary>
|
||
/// 基于机体坐标系的垂直标准圆弧机动
|
||
/// </summary>
|
||
struct MESSAGEBASIC_EXPORT VerticalArcMotion : public PlatformMotionCommand {
|
||
/// <summary>
|
||
/// 起始时间
|
||
/// </summary>
|
||
double _start_time = 0;
|
||
/// <summary>
|
||
/// 转弯圆心,<0, ypos, zpos>
|
||
/// </summary>
|
||
QVector3D _center_point;
|
||
/// <summary>
|
||
/// 弧线转角,°
|
||
/// </summary>
|
||
double _rotate_deg = 0;
|
||
/// <summary>
|
||
/// 机动速度,m/s
|
||
/// </summary>
|
||
double _speed_motion = 0;
|
||
|
||
VerticalArcMotion();
|
||
|
||
double startTimepoint() const override;
|
||
double timeExpend() const override;
|
||
QVector3D posAtTimeSpan(double time) const override;
|
||
QVector3D speedAtTimeSpan(double time) const override;
|
||
|
||
std::shared_ptr<Serializable> newDefault() const override;
|
||
void recoveryFrom(const QJsonObject& obj) override;
|
||
void saveTo(QJsonObject& obj) const override;
|
||
}; |