PublicInterface.h 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #include <iostream>
  2. #include<deque>
  3. #include "pub.h"
  4. #include "online_motion.h"
  5. #define RESULT_LEN 10
  6. using namespace std;
  7. struct shoes_data_cell {
  8. //鞋子传上来的时间戳
  9. int time_stamp;
  10. //鞋子当前的位置
  11. float pos_x;
  12. float pos_y;
  13. float pos_z;
  14. //鞋子的姿态
  15. float heading;
  16. float pitch;
  17. float roll;
  18. int zupt;
  19. int rssi;
  20. };
  21. /*
  22. * 公用接口类, 代码复用抽取
  23. */
  24. class PublicInterface
  25. {
  26. public :
  27. int result[RESULT_LEN]; //返回到手机命令数据
  28. float left_global_pos[3];//描绘游戏过程中全局位置
  29. float right_global_pos[3];
  30. int max_acc_unzupt_left[3];//记录空中时候加速度的最大值最小值
  31. int min_acc_unzupt_left[3];
  32. int max_acc_unzupt_right[3];
  33. int min_acc_unzupt_right[3];
  34. online_motion extract_motion; //额外的补充动作,例如蹲、跳在鞋子里面处理并不适应每个游戏
  35. PublicInterface() {
  36. memset(result, 0, RESULT_LEN * sizeof(int));
  37. memset(left_global_pos, 0, 3 * sizeof(float));
  38. memset(right_global_pos, 0, 3 * sizeof(float));
  39. };
  40. void getResult(int* dec); //返回到手机命令数据接口
  41. void setData(deque<shoes_data_cell>& shoes_data_vector, int time_stamp, float pos_x, float pos_y, float pos_z,
  42. float heading, float pitch, float roll, int zupt, int rssi);//缓存空中的数据到shoes_data_vector中, 头尾都触地时候的数据
  43. /*
  44. * 计算全局位置的普通函数, 利用鞋子传上来的空中数据shoes_data_vector,换算为旋转过后的空中数据
  45. * main_heading, 将传上来的方向旋转至鞋子的朝向
  46. * extra_heading, 将当前鞋子朝向的轨迹数据,额外再做旋转,一般旋转大概估计身体朝向的位置
  47. */
  48. void calGlobalPos(deque<shoes_data_cell>& shoes_data_vector, deque<shoes_data_cell>& step_data_vector, float* global_pos,
  49. float main_heading, float extra_heading, int LEFT_OR_RIGHT);
  50. /*
  51. * 获取全局位置的普通函数, 用于python脚本分析bug时候,查看游戏内的全局位置有没有符合期望。
  52. */
  53. float getGamePos(int left_or_right, int index);
  54. /*
  55. * 寻找非触地时候的最大加速度和最小加速度
  56. */
  57. void setPolarAccUnzupt(int* max_acc, int* min_acc, int* acc, int zupt);
  58. /*
  59. * 判断空中轨迹中加速度的最大值、最小债
  60. */
  61. bool unzuptValid(int* max_acc, int* min_acc);
  62. /*
  63. * 根据小于rssi_thresh触地信号的个数累计到zupt_count,估计当前鞋子的方向以及将global_pos设置为0
  64. */
  65. void resetZerosPointByRssi(int zupt, int zupt_count_thresh, int& zupt_count, int& has_init, float heading, float& rotate_heading, int rssi, int rssi_thresh, float* global_pos);
  66. };