common.h 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704
  1. #ifndef COMMON_H
  2. #define COMMON_H
  3. #include <cstring>
  4. #include <string>
  5. #include "com_define.h"
  6. // #include <Eigen/Dense>
  7. typedef struct ROBOT_CONFIG_
  8. {
  9. //utility
  10. double dt;
  11. double legIsRightLst[LEG_NUMBER];
  12. //kinematics and dynamics
  13. double l0;
  14. double l1;
  15. double l2;
  16. double lMin2;
  17. double hip[LEG_NUMBER][3];
  18. double legs_offset[LEG_NUMBER];
  19. //dynamics
  20. double m;
  21. double inertia[3][3];
  22. double leg_m;
  23. //control paramters
  24. double legStiffSw[3];
  25. double legStiffSt[3];
  26. double legDamp[3];
  27. double legStiffSphSw[3];
  28. double legStiffSphSt[3];
  29. double legDampSph[3];
  30. double jntStiffSw[3];
  31. double jntStiffSt[3];
  32. double jntDamp[3];
  33. double qddKp[3];
  34. double qddKd[3];
  35. //gait parameters
  36. double offset_lst[LEG_NUMBER];
  37. double stdP[LEG_NUMBER][3];
  38. double bodyH;
  39. // constraints
  40. double wdMax;
  41. //compensation
  42. double fricComp[3];
  43. }ROBOT_CONFIG;
  44. typedef union {
  45. float array[3];
  46. struct {
  47. float x;
  48. float y;
  49. float z;
  50. } axis;
  51. } MeasurementVector;
  52. typedef union {
  53. float array[3];
  54. struct {
  55. float roll;
  56. float pitch;
  57. float yaw;
  58. } axis;
  59. } EulerAngleVector;
  60. typedef union{
  61. double array[9];
  62. } Covariance;
  63. /**
  64. * @brief Quaternion.
  65. */
  66. typedef union {
  67. float array[4];
  68. struct {
  69. float w;
  70. float x;
  71. float y;
  72. float z;
  73. } element;
  74. } QuaternionVector;
  75. typedef union {
  76. float array[3];
  77. struct {
  78. float x;
  79. float y;
  80. float z;
  81. } axis;
  82. } GPSVector;
  83. typedef struct TOP_CONFIG_INFO_{
  84. std::string robot_type;
  85. ROBOT_DRIVER_TYPES body_model;
  86. }TOP_CONFIG_INFO;
  87. namespace robot_control
  88. {
  89. namespace common
  90. {
  91. const int GAIT_MSG_CAPACITY = 200;
  92. enum class CoreState {
  93. BOOT = 0,
  94. IDLE = 1,
  95. JOINTS_TEST = 2,
  96. STAND_STILL = 3,
  97. IN_PLANNING = 4
  98. };
  99. enum GaitMsgType //这里如果修改成enum class,需要芳勇配合修改参数接口
  100. {
  101. GMT_NO_MSG = 0,
  102. GMT_START = 1,
  103. GMT_ONLINE = 2,
  104. GMT_EM_STOP = 3,
  105. GMT_JOINT_CONTROL = 4,
  106. GMT_GAIT_MODE = 5
  107. };
  108. enum GaitID //这里如果修改成enum class,需要芳勇配合修改参数接口
  109. {
  110. GID_NO_GAIT = 0,
  111. GID_IDLE_GAIT = 1,
  112. GID_STANDSTILL = 2,
  113. GID_RECOVER = 3,
  114. GID_HEX_NIMBLE = 4,
  115. GID_JOINT_TEST = 5,
  116. GID_RL = 6, //强化学习步态
  117. GID_JOINT_TRAJECTORY_CONTROL = 7,
  118. GID_POSE_ADJUSTMENT=8,
  119. GID_FOOT_ADJUST=9,
  120. GID_LEG_TEST=10,
  121. GID_QUA_NIMBLE = 11,
  122. GID_MAX = 12
  123. };
  124. class GaitMsgHeader
  125. {
  126. public:
  127. short int gait_msg_type;
  128. short int gait_id;
  129. int data_length;
  130. };
  131. class GaitMsg
  132. {
  133. public:
  134. GaitMsgHeader header;
  135. char data[GAIT_MSG_CAPACITY];
  136. inline int getAllDataLength()
  137. {
  138. return header.data_length + sizeof(GaitMsgHeader);
  139. }
  140. };
  141. class Pose
  142. {
  143. public:
  144. float q[4];
  145. float gyro[3];
  146. float acc[3];
  147. };
  148. class ModelInput
  149. {
  150. public:
  151. unsigned long count;
  152. double actual_pos[MOTOR_NUM];
  153. double actual_vel[MOTOR_NUM];
  154. double actual_trq[MOTOR_NUM]; // trq read from the motor current
  155. double mea_trq[MOTOR_NUM]; // trq read from the torque sensor
  156. Pose body_pose;
  157. GaitMsg gait_msg;
  158. bool is_stand_up;
  159. int planner_stage;
  160. public:
  161. ModelInput()
  162. {
  163. is_stand_up = false;
  164. }
  165. };
  166. struct JointTestData
  167. {
  168. unsigned int axis_bitmask;
  169. float mag;
  170. float period;
  171. float kp_pos;
  172. float kd_pos;
  173. float kp_cur;
  174. float mu_clb;
  175. int test_type;
  176. };
  177. class ModelOutput
  178. {
  179. public:
  180. unsigned long count;
  181. double target_pos[MOTOR_NUM];
  182. double target_vel[MOTOR_NUM];
  183. double target_trq[MOTOR_NUM];
  184. double target_kp[MOTOR_NUM];
  185. double target_kd[MOTOR_NUM];
  186. CoreState core_state;
  187. GaitID current_gait_id;
  188. };
  189. typedef struct MC_QUATERNIONS_{
  190. float x;
  191. float y;
  192. float z;
  193. float w;
  194. }MC_QUATERNIONS;
  195. typedef struct MC_COORDINATE_{
  196. float x;
  197. float y;
  198. float z;
  199. }MC_COORDINATE;
  200. typedef struct MC_MOTION_IMU_DATA_{
  201. uint64_t timestamp;
  202. MC_QUATERNIONS orientation;
  203. double orientation_covariance[9];
  204. MC_COORDINATE angular_velocity;
  205. double angular_velocity_covariance[9];
  206. MC_COORDINATE linear_acceleration;
  207. double linear_acceleration_covariance[9];
  208. }MC_MOTION_IMU_DATA;
  209. typedef struct JOY_KEY_TYPE_{
  210. bool stand_up;
  211. int move_mode;
  212. int speed_gear;
  213. double dynamic_speed_x;
  214. double dynamic_speed_y;
  215. double static_speed_x;
  216. double static_speed_y;
  217. }JOY_KEY_TYPE;
  218. typedef enum ROBOT_DIRECTION_{
  219. FRONT = 0,
  220. REAR,
  221. LEFT,
  222. RIGHT
  223. }ROBOT_DIRECTION;
  224. typedef struct ROBOT_TWIST_{
  225. MC_COORDINATE linear;
  226. MC_COORDINATE angular;
  227. }ROBOT_TWIST;
  228. //0: Trot(默认)1: 奔跑 2: 跳跃 3: Saturn标志动作
  229. typedef enum ROBOT_GAIT_{
  230. TROT = 0,
  231. RUN,
  232. JUMP,
  233. SATURN,
  234. NIMBLE
  235. }ROBOT_GAIT;
  236. //int32 model = 1; //0: 自主导航, 1,遥控控制
  237. typedef enum ROBOT_CONTROL_MOVE_MODE_{
  238. NAVIGATION = 0,
  239. JOY
  240. }ROBOT_CONTROL_MOVE_MODE;
  241. typedef enum DRIVER_ENABLE_STATE_{
  242. UNKNOW = 0,
  243. ENABLED,
  244. ENABLING,
  245. ENABLE_FAILED,
  246. DISABLED
  247. }DRIVER_ENABLE_STATE;
  248. typedef enum EQA_STATE_{
  249. EQA_NULL = 0,
  250. LISTEN = 1,
  251. THINK = 2,
  252. EXECUTE = 3
  253. }EQA_STATE;
  254. //scene = 1; //0: 平地 , 1: 楼梯 , 2: 沟壑 , 3: 陡坡 , 4: 限高
  255. typedef enum SCENE_TYPE_{
  256. NULL_SCENE = 0,
  257. LIE_DOWN = 1,
  258. WALKING = 2,
  259. STAIRS = 3,
  260. CHARGE = 4,
  261. PERCEIVE_STAIRS = 5,
  262. SNOW = 6,
  263. SLIPPY = 7,
  264. STONE = 8
  265. }SCENE_TYPE;
  266. //机器人场景切换状态枚举
  267. typedef enum SCENE_SWITCH_STATE_{
  268. NULL_SCENE_SWITCH = 0,
  269. SWITCHING = 1,
  270. SWITCH_SUCCEEDED = 2,
  271. SWITCH_FAILED = 3
  272. }SCENE_SWITCH_STATE;
  273. typedef enum BODY_POSTURE_STATE_{
  274. NULL_POSTURE = 0,
  275. STARTMOVING = 1,
  276. MOVING = 2,
  277. LIEDOWN = 3,
  278. STANDUP = 4,
  279. CHARGING=5 //在桩上 可能是充电,也可能已经充满了
  280. }BODY_POSTURE_STATE;
  281. //相机位置
  282. typedef enum CHARGE_POSITION_STATE_{
  283. NULL_POSITION = 0,
  284. POSITION_OFF = 1, //找不到位置 默认状态
  285. POSITION_FINDING = 2,//搜寻位置此时需要用户手动控制机器人进行移动
  286. POSITION_ONLINE = 3, //位置信息在线
  287. POSITION_FAILED = 4 //用户调整超时后进入该状态,考虑二维码破损造成的情况
  288. }CHARGE_POSITION_STATE;
  289. //上桩过程枚举
  290. typedef enum CHARGE_SWITCH_STATE_{
  291. NULL_CHARGE_SWITCH = 0,
  292. EXIT_SUCCEEDED = 1,
  293. EXITING_TILE = 2,
  294. EXIT_FAILED=3,
  295. ENTER_SUCCEEDED = 4,
  296. ENTERING_TILE = 5,
  297. ENTER_FAILED=6 //尝试上桩超过三次后进入该状态
  298. }CHARGE_SWITCH_STATE;
  299. typedef enum AUTO_CHARGE_STATE_{
  300. null_charge = 0,
  301. uncharge = 1,
  302. charging = 2,
  303. charge_finished = 3
  304. }AUTO_CHARGE_STATE;
  305. typedef struct ROBOT_BATTERY_INFO_{
  306. float level; //机器人电池当前电量
  307. AUTO_CHARGE_STATE state; //用来表示机器人电池 没充电 ,充电中,充电结束的状态
  308. }ROBOT_BATTERY_INFO;
  309. typedef struct BODY_ODOMETRY_{
  310. ROBOT_TWIST twist;
  311. //geometry_msgs/Pose Point & Quaternion
  312. MC_COORDINATE point;
  313. MC_QUATERNIONS quaternion;
  314. // 6*6 covariance matrix
  315. // repeated pose = 2;
  316. }BODY_ODOMETRY;
  317. //充电相关状态
  318. typedef struct ROBOT_CHARGE_STATUS_{ //运动控制主机和手机通讯的内容
  319. std::string charge_tile_name; //充电桩唯一标识符 (考虑当前是否需要)
  320. CHARGE_POSITION_STATE position_state; //检测到二维码位置时进行进行自动充电模式 反馈到手机
  321. CHARGE_SWITCH_STATE charge_switch_state; //上桩过程状态 反馈到手机
  322. bool charge_succeeded; //电池与充电桩连接成功正在充电标志位 该标志位需要BMS与充电桩通信确认
  323. ROBOT_BATTERY_INFO battery_info;
  324. bool user_quit_charge_flag;
  325. }ROBOT_CHARGE_STATUS;
  326. typedef struct JETSON_CHARGE_STATE_{ //回冲功能上传Jetson的信息
  327. long heartbeat; //心跳信息
  328. bool sensnor; //是否打开相机 Jetson 读该信息
  329. }JETSON_CHARGE_STATE;
  330. typedef struct JETSON_CHARGE_COMMAND_{ //Jetson主机下发指令到运动主机的信息
  331. bool tag_state; //检测到二维码 Jetson 写该信息
  332. MC_QUATERNIONS position; //充电桩位置信息 Jetson 写该位置
  333. }JETSON_CHARGE_COMMAND;
  334. //Jetson回冲相关的状态统一放在这里
  335. typedef struct JETSON_CHARGE_INFO_{ //统一管理接口
  336. JETSON_CHARGE_STATE charge_state; //与充电相关的机器人状态
  337. JETSON_CHARGE_COMMAND charge_command; //充电相关的位置信息
  338. }JETSON_CHARGE_INFO;
  339. //视觉落脚点功能,从运动控制主机上传到Jetson主机所用的数据类型,实机
  340. typedef struct JETSON_VISUAL_FOOTHOLD_STATE_{
  341. uint64_t timestamp;
  342. robot_control::common::BODY_ODOMETRY robot_odometry;
  343. float touch_detection[LEG_NUMBER];
  344. float tip_position_wrt_hip[LEG_NUMBER * 3];
  345. float vf_planned_tip_position_wrt_base[LEG_NUMBER * 3]; //规划出的足端相对机器人base的位置
  346. bool camera_switch; //是否打开相机
  347. }JETSON_VISUAL_FOOTHOLD_STATE;
  348. //视觉落脚点功能,从Jetson主机下发数据到运动控制主机的数据类型
  349. typedef struct JETSON_VISUAL_FOOTHOLD_COMMAND_{
  350. uint64_t timestamp;
  351. float map_center_point[2];
  352. float body_pos_act[3];
  353. float body_vel_act[3]; //现在机器人身体实际的速度并没有被用到,临时借用一下作为雷达最新的数据
  354. float body_pos_est[3];
  355. float body_vel_est[3];
  356. float body_orn_act[4];
  357. float body_gyr_act[3];
  358. float body_orn_est[4];
  359. float body_gyr_est[3];
  360. unsigned int neigh_height_map[HEIGHT_MAP_HEIGHT][HEIGHT_MAP_WIDTH];
  361. unsigned int neigh_roughness_map[HEIGHT_MAP_HEIGHT][HEIGHT_MAP_WIDTH];
  362. unsigned int neigh_smoothness_map[HEIGHT_MAP_HEIGHT][HEIGHT_MAP_WIDTH];
  363. }JETSON_VISUAL_FOOTHOLD_COMMAND;
  364. typedef struct DEPTH_IMAGE_{
  365. int image[DEPTH_IMAGE_HEIGHT][DEPTH_IMAGE_WIDTH];
  366. }DEPTH_IMAGE;
  367. typedef struct RGB_IMAGE_{
  368. int image[RGB_IMAGE_HEIGHT][RGB_IMAGE_WIDTH];
  369. }RGB_IMAGE;
  370. //视觉落脚点相关的状态统一放在这里
  371. typedef struct JETSON_VISUAL_FOOTHOLD_INFO_{ //统一管理接口
  372. uint64_t timestamp;
  373. JETSON_VISUAL_FOOTHOLD_COMMAND vis_foothold_command;
  374. float touch_detection[LEG_NUMBER];
  375. float tip_position_wrt_hip[LEG_NUMBER * 3]; //当前机器人足端相对髋关节坐标系的位置
  376. float vf_planned_tip_position_wrt_base[LEG_NUMBER * 3]; //规划出的足端相对机器人base的位置
  377. bool camera_switch; //是否打开相机
  378. }JETSON_VISUAL_FOOTHOLD_INFO;
  379. typedef enum _STAIRS_HEIGH_STATE{
  380. STAIRS_HEIGH_NULL = 0,
  381. STAIRS_LESS_THAN_16CM = 1,
  382. STAIRS_LESS_THAN_20CM = 2,
  383. STAIRS_LESS_THAN_30CM = 3,
  384. }STAIRS_HEIGH_STATE;
  385. typedef struct ROBOT_DRIVER_VALUE_{
  386. double position;
  387. double velocity;
  388. double torque;
  389. double torque_sensor;
  390. }ROBOT_DRIVER_VALUE;
  391. typedef enum NAV_OR_JOY_MODE_{
  392. nall_control = 0,
  393. nav_control = 1,
  394. joy_control = 2
  395. }NAV_OR_JOY_MODE;
  396. typedef enum LIE_DOWN_ADJUST_{
  397. null = 0,
  398. start_to_adjust = 1,
  399. adjusting = 2,
  400. nimble_stop = 3,
  401. finish = 4
  402. }LIE_DOWN_ADJUST_;
  403. //停障功能从navigation端接收到的结果
  404. //在目前的使用中,当float<=-2,代表存在障碍物,否则代表不存在障碍物
  405. typedef struct GUARDIAN_VELOCITY_DECAY_RATIO_{
  406. float left_ratio;
  407. float front_ratio;
  408. float right_ratio;
  409. float rear_ratio;
  410. }GUARDIAN_VELOCITY_DECAY_RATIO;
  411. typedef enum CALIBRATE_POSE_STATE_{
  412. NULL_STATE = 0,
  413. START_CALIBRATE = 1,
  414. CALIBRATE_SUCCESS = 2,
  415. CALIBRATE_FAILED = 3
  416. }CALIBRATE_POSE_STATE;
  417. typedef enum TERRAIN_SEG_DETECTION_RESULTS_{
  418. NULL_TERRAIN = 0,
  419. WEI_ZHI = 1,
  420. CAO_DI = 2,
  421. CI_ZHUAN = 3,
  422. DI_BAN = 4,
  423. DI_TAN = 5,
  424. LI_QING_LU_MIAN = 6,
  425. LOU_TI = 7,
  426. LUAN_SHI_DI_MIAN = 8,
  427. LU_ZHUAN = 9,
  428. SHUI_NI_DI = 10,
  429. TAI_JIE = 11
  430. }TERRAIN_SEG_DETECTION_RESULTS;
  431. typedef struct ROBOT_COMMON_STATUS_{
  432. int network; //机器人当前网络状态
  433. BODY_POSTURE_STATE belie_or_stand; //机器人处于站立趴下状态(目前不用,芳勇认为测试中可能会用)
  434. bool emergency; //是否是处于紧急状态
  435. bool avoidance; //自动避障状态
  436. long int heartbeat; //心跳
  437. float cur_speed; //当前速度
  438. float cur_height; //当前高度
  439. MC_QUATERNIONS position; //机器人世界坐标系下的位置,xyz与yaw角
  440. float max_height; //机器人最大高度
  441. float max_speed; //机器人最大速度
  442. SCENE_SWITCH_STATE cur_scene_switch_state; //切换场景是否成功
  443. SCENE_TYPE cur_scene; //当前处于的场景,预设站立 预设应该是趴下比较合理
  444. DRIVER_ENABLE_STATE driver_enable_state;
  445. //机器人里程计信息
  446. BODY_ODOMETRY odometry;
  447. float tip_position_wrt_hip[LEG_NUMBER*3];//足端相对髋关节坐标系位置
  448. float vf_planned_tip_position_wrt_base[LEG_NUMBER * 3];
  449. float touch_detection[LEG_NUMBER];//触地检测,范围从0到1.0, 等于1.0为绝对触地,后期会变为概率,但目前还是只有1或者0两种可能
  450. float target_body_orientation[3]; //raw pitch yaw
  451. //错误代码
  452. int error_code;
  453. bool has_error;
  454. unsigned int error_wheel[CODE_WHEEL_NUM];
  455. unsigned int warn_wheel[CODE_WHEEL_NUM];
  456. unsigned int note_wheel[CODE_WHEEL_NUM];
  457. unsigned int joint_error_wheel[JOINT_CODE_WHEEL_NUM];
  458. unsigned int joint_warn_wheel[JOINT_CODE_WHEEL_NUM];
  459. unsigned int joint_note_wheel[JOINT_CODE_WHEEL_NUM];
  460. ROBOT_CHARGE_STATUS charge_status;
  461. bool salute_state;
  462. NAV_OR_JOY_MODE joy_mode;
  463. EQA_STATE eqa_state;
  464. bool guardian_switch; //表示当前停障功能的开关的状态
  465. bool visual_foothold_switch; //表示当前视觉落脚点功能开关的状态
  466. GUARDIAN_VELOCITY_DECAY_RATIO guardian_velocity_decay_ratio; //军营用于显示前左右三个方位的障碍
  467. LIE_DOWN_ADJUST_ lie_down_adjust; //用于判断趴下前是否正在做足端位置调整
  468. float speed_bar_on_controller; //机器人遥控器上当前选中的线速度
  469. CALIBRATE_POSE_STATE calibrate_pos_state;
  470. int self_test_code;
  471. int encoder_calibrate_state;
  472. bool nav_pos_state;//当前导航定位位置是否正常
  473. bool nav_init_pos;//是否尝试初始化导航定位
  474. TERRAIN_SEG_DETECTION_RESULTS terrain_seg_result;
  475. bool uwb_state;
  476. STAIRS_HEIGH_STATE stairs_state;
  477. bool weight_load_switch;
  478. float cur_weight_load;
  479. bool exceeding_weight_load;
  480. }ROBOT_COMMON_STATUS;
  481. typedef enum JOINT_LIMIT_STATE_{
  482. NULL_LIMIT = 0,
  483. LIMITED = 1,
  484. NOLIMITED = 2
  485. }JOINT_LIMIT_STATE;
  486. //18个关节的关节状态
  487. typedef struct ROBOT_JOINT_STATUS_{
  488. std::string name;
  489. float current;//电机数据(电流值)
  490. float joint_temperature;//驱动器温度
  491. float motor_temperature;//电机温度
  492. float driver_cpu_temperature;//驱动器cpu温度
  493. float torque_sensor_data;//扭矩传感器数据
  494. double position;
  495. double velocity;
  496. double effort;
  497. double max_limit;
  498. double min_limit;
  499. JOINT_LIMIT_STATE limit_state;
  500. unsigned short driver_error_code;
  501. unsigned short motor_error_code;
  502. double target_position;
  503. double target_velocity;
  504. double target_effort;
  505. }ROBOT_JOINT_STATUS;
  506. typedef struct ROBOT_JOINTS_STATUS_{
  507. ROBOT_JOINT_STATUS joints[MOTOR_NUM];
  508. long int heartbeat;
  509. }ROBOT_JOINTS_STATUS;
  510. typedef struct ROBOT_PER_CYCLE_STATUS_{
  511. int network;//机器人当前网络状态
  512. bool lie_stand_state; //joystick连接状态
  513. bool emergency; //是否是处于紧急状态
  514. bool avoidance; //自动避障状态
  515. long int heartbeat; //心跳
  516. float speed;
  517. MC_QUATERNIONS position;
  518. }ROBOT_PER_CYCLE_STATUS;
  519. typedef struct ROBOT_TARGET_VALUE_{
  520. ROBOT_DRIVER_VALUE driver[MOTOR_NUM];
  521. long int heartbeat;
  522. }ROBOT_TARGET_VALUE;
  523. typedef enum enFormOfMovement_
  524. {
  525. JOINTS_CONTROL = 0,
  526. MOTION_CONTROL = 1
  527. }enFormOfMovement;
  528. typedef struct DRIVER_CONFIG_PARAMETER_{
  529. std::string motor_name;
  530. double position_scale;
  531. double velocity_scale;
  532. double torque_scale;
  533. bool motor_direction;
  534. bool direction_correction;
  535. int index_map;
  536. bool be_choosed;
  537. double init_pos_offset;
  538. double init_pos_offset_rough;
  539. double position_min_limit;
  540. double position_min_safety_limit;
  541. double position_max_limit;
  542. double position_max_safety_limit;
  543. double min_limit_kp;
  544. double min_limit_ki;
  545. double min_limit_kd;
  546. double max_limit_kp;
  547. double max_limit_ki;
  548. double max_limit_kd;
  549. int convert_to_deceleration_end;
  550. int one_turn_encorder_value;
  551. double driver_kp_scale;
  552. double driver_kd_scale;
  553. double trq_safety_limit;
  554. double target_torque;
  555. bool init_pos_check_switch;
  556. double init_position;
  557. double init_position_error;
  558. }DRIVER_CONFIG_PARAMETER;
  559. typedef struct SENSOR_CONFIG_PARAMETER_{
  560. double trq_sensor_scale;
  561. double trq_sensor_offset;
  562. bool trq_sensor_direction;
  563. int index_map;
  564. }SENSOR_CONFIG_PARAMETER;
  565. typedef struct _JOINTS_CONFIG_INFO{
  566. robot_control::common::DRIVER_CONFIG_PARAMETER driver_data[MOTOR_NUM];
  567. robot_control::common::SENSOR_CONFIG_PARAMETER sensor_data[THE_TRQ_SENSOR_NUM];
  568. bool trq_have_been_calibrated;
  569. bool joint_position_have_been_calibrated;
  570. bool encoder_has_been_reseted;
  571. }JOINTS_CONFIG_INFO;
  572. typedef struct _ROBOT_SPECIAL_CONFIG_INFO{
  573. std::string bms_address;
  574. std::string light_address;
  575. EN_DRIVER_ECAT_SLAVES_TYPE driver_type;
  576. EN_TRQ_SENSOR_ECAT_SLAVES_TYPE trq_sensor_type;
  577. EN_BMS_TYPE bms_type;
  578. EN_EMOJI_LIGHT_TYPE emoji_light_type;
  579. EN_LAMP_EFFECT_THEME lamp_effect_theme;
  580. }ROBOT_SPECIAL_CONFIG_INFO;
  581. typedef enum _ROBOT_WORKING_ENVIRINMENT{
  582. ROBOT_BODY_NON = 0,
  583. ROBOT_BODY_REAL,
  584. ROBOT_BODY_WEBOTS,
  585. ROBOT_BODY_GAZEBO
  586. }ROBOT_WORKING_ENVIRINMENT;
  587. typedef enum LOG_LEVEL_{
  588. LOG_LEVEL_NON = 0,
  589. LOG_LEVEL_DEBUG,
  590. LOG_LEVEL_NOTE,
  591. LOG_LEVEL_WARNING,
  592. LOG_LEVEL_ERROR,
  593. LOG_LEVEL_ALL,
  594. LOG_LEVEL_MAX
  595. }LOG_LEVEL;
  596. typedef enum LOG_MODULE_NAME_{
  597. MODULE_NON = 0,
  598. MODULE_CONTROL_CORE,
  599. MODULE_ENTRY,
  600. LOG_MODULE_MAX
  601. }LOG_MODULE_NAME;
  602. typedef struct ROBOT_POSE_ESTIMATE_{
  603. MC_COORDINATE point;
  604. MC_QUATERNIONS quaternion;
  605. }ROBOT_POSE_ESTIMATE;
  606. typedef struct BMS_STATE_INFO_{
  607. float sigle_overvoltage;
  608. float remaining_capacity;
  609. float battery_voltage_1th;
  610. float battery_voltage_2th;
  611. float battery_voltage_3th;
  612. float battery_voltage_4th;
  613. float battery_voltage_5th;
  614. float battery_voltage_6th;
  615. float total_voltage;
  616. float discharging_current;
  617. float remain_battery_capacity;
  618. float reconfigurable_system_on_chip;
  619. float battery_power;
  620. bool is_charging;
  621. }BMS_STATE_INFO;
  622. //Log config
  623. } // namespace common
  624. }
  625. #endif