23#define RMP_CAN_ID_SHUTDOWN 0x0412
24#define RMP_CAN_ID_COMMAND 0x0413
25#define RMP_CAN_ID_MSG1 0x0400
26#define RMP_CAN_ID_MSG2 0x0401
27#define RMP_CAN_ID_MSG3 0x0402
28#define RMP_CAN_ID_MSG4 0x0403
29#define RMP_CAN_ID_MSG5 0x0404
30#define RMP_CAN_ID_MSG6 0x0405
31#define RMP_CAN_ID_MSG7 0x0406
32#define RMP_CAN_ID_MSG8 0x0407
34#define RMP_CAN_CMD_NONE 0
35#define RMP_CAN_CMD_MAX_VEL 10
36#define RMP_CAN_CMD_MAX_ACCL 11
37#define RMP_CAN_CMD_MAX_TURN 12
38#define RMP_CAN_CMD_GAIN_SCHED 13
39#define RMP_CAN_CMD_CURR_LIMIT 14
40#define RMP_CAN_CMD_RST_INT 50
42#define RMP_CAN_RST_RIGHT 0x01
43#define RMP_CAN_RST_LEFT 0x02
44#define RMP_CAN_RST_YAW 0x04
45#define RMP_CAN_RST_FOREAFT 0x08
46#define RMP_CAN_RST_ALL (RMP_CAN_RST_RIGHT | \
51#define RMP_COUNT_PER_M 33215
52#define RMP_COUNT_PER_DEG 7.8
53#define RMP_COUNT_PER_M_PER_S 332
54#define RMP_COUNT_PER_DEG_PER_S 7.8
55#define RMP_COUNT_PER_MM_PER_S 0.32882963
56#define RMP_COUNT_PER_DEG_PER_SS 7.8
57#define RMP_COUNT_PER_REV 112644
59#define RMP_MAX_TRANS_VEL_MM_S 3576
60#define RMP_MAX_ROT_VEL_DEG_S 18
61#define RMP_MAX_TRANS_VEL_COUNT 1176
62#define RMP_MAX_ROT_VEL_COUNT 1024
64#define RMP_GEOM_WHEEL_SEP 0.54
87 int16_t gain_schedule;
89 uint16_t powerbase_battery;
102 bool IsReady() {
return ready == 0xFF; }
117rmp_frame_t::AddPacket(
const CanPacket &pkt)
123 case RMP_CAN_ID_MSG1:
127 case RMP_CAN_ID_MSG2:
128 pitch = pkt.GetSlot(0);
129 pitch_dot = pkt.GetSlot(1);
130 roll = pkt.GetSlot(2);
131 roll_dot = pkt.GetSlot(3);
134 case RMP_CAN_ID_MSG3:
135 left_dot = (int16_t) pkt.GetSlot(0);
136 right_dot = (int16_t) pkt.GetSlot(1);
137 yaw_dot = (int16_t) pkt.GetSlot(2);
138 frames = pkt.GetSlot(3);
141 case RMP_CAN_ID_MSG4:
142 left = (uint32_t)(((uint32_t)pkt.GetSlot(1) << 16) |
143 (uint32_t)pkt.GetSlot(0));
144 right = (uint32_t)(((uint32_t)pkt.GetSlot(3) << 16) |
145 (uint32_t)pkt.GetSlot(2));
148 case RMP_CAN_ID_MSG5:
149 foreaft = (uint32_t)(((uint32_t)pkt.GetSlot(1) << 16) |
150 (uint32_t)pkt.GetSlot(0));
151 yaw = (uint32_t)(((uint32_t)pkt.GetSlot(3) << 16) |
152 (uint32_t)pkt.GetSlot(2));
154 case RMP_CAN_ID_MSG6:
155 left_torque = (int16_t) pkt.GetSlot(0);
156 right_torque = (int16_t) pkt.GetSlot(1);
159 case RMP_CAN_ID_MSG7:
160 op_mode = (int16_t) pkt.GetSlot(0);
161 gain_schedule = (int16_t) pkt.GetSlot(1);
162 ui_battery = (uint16_t) pkt.GetSlot(2);
163 powerbase_battery = (uint16_t) pkt.GetSlot(3);
166 case RMP_CAN_ID_MSG8:
167 rec_speed = (int16_t) pkt.GetSlot(0);
168 rec_turn = (int16_t) pkt.GetSlot(1);
177 ready |= (1 << (pkt.id & 0xFF));
Definition rmp_frame.h:68