从规范

时间:2017-02-24 10:29:04

标签: java parsing protocol-buffers code-generation thrift

我有一架无人机将传感器遥测数据发送到我的电脑。在我的PC上,我开发的地面站点应用程序读取此文本数据并将其解析为有用的java对象,这些对象进入用于图表,表格等的UI。

我的问题是随着我添加越来越多的状态和调试信息,来自无人机的数据格式不断发展。因此,我最终重新编写了java类以及使用Scanner编写的关联解析器。以下是我从无人机获得的数据

{  ms  5  gy  -0.14  1.32  -1.04  ac  -2.40  3.24  -106.67  acfil  -2.40  3.29  -107.53  ang  -0.93  1.83  -2.30  rc6  1  1  1  6  1  motor  1000  1000  1000  1000  pid  1  100  0  0  -100  0  -3  0  }
{  ms  5  gy  -0.14  1.32  -1.04  ac  -2.12  2.96  -107.43  acfil  -2.25  3.63  -107.53  ang  -2.09  0.33  -17.55  rc6  1  1  1  6  1  motor  1000  1000  1000  1000  pid  1  100  0  0  -100  0  -3  0  } 

{}表示数据包的开始和结束。陀螺的gy和加速度计的ac等缩写文本告诉传感器类型,后跟每个轴的值

解析器的片段

case "ms":
 if (scanner.hasNextDouble()) {
     timedelta = scanner.nextDouble();
 }
 break;
case "gy":
 if (scanner.hasNextDouble()) {
     gX = scanner.nextDouble();
 }
 if (scanner.hasNextDouble()) {
     gY = scanner.nextDouble();
 }
 if (scanner.hasNextDouble()) {
     gZ = scanner.nextDouble();
 }
 break;

和域类

public static final class SensorData {

  //internal
  public double frame;
  //time
  public double timestamp, delta;
  //raw gyro+accelerometer
  public double gX, gY, gZ, aX, aY, aZ;
  //raw receiver
  public double rcRoll, rcPitch, rcYaw, rcThrottle, rcMode;
  //computed filtered accelerometer + absolute angle
  public double filaX, filaY, filaZ;
  public double absX, absY, absZ;
  //motor commands
  public double motorFL, motorFR, motorRR, motorRL;
  //PID
  double pitchP, pitchI, pitchD;
  double rollP, rollI, rollD;
  double yawP, yawD;
  .
  .

Full code available here

所以我需要一个能够根据我给出的规范自动生成域类和解析器的库。 我不能在我的项目中使用二进制序列化格式。但我准备采用不同的文字格式 到目前为止,我遇到了可以生成解析器和域类的Google Protocol Buffers,我正在研究它的文本序列化格式。
Apache Thrift类似但缺乏文档。 我想知道其他替代方案是什么,或者这些东西通常如何完成。 我尝试了很多,但谷歌并没有给我确切的点击。

0 个答案:

没有答案