NASA Astrobee Robot Software  0.19.1
Flight software for the Astrobee robots operating inside the International Space Station.
perching_arm.h
Go to the documentation of this file.
1 /* Copyright (c) 2017, United States Government, as represented by the
2  * Administrator of the National Aeronautics and Space Administration.
3  *
4  * All rights reserved.
5  *
6  * The Astrobee platform is licensed under the Apache License, Version 2.0
7  * (the "License"); you may not use this file except in compliance with the
8  * License. You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
14  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
15  * License for the specific language governing permissions and limitations
16  * under the License.
17  */
18 
19 #ifndef PERCHING_ARM_PERCHING_ARM_H_
20 #define PERCHING_ARM_PERCHING_ARM_H_
21 
22 #include <ff_serial/serial.h>
23 
24 #include <iostream>
25 #include <functional>
26 #include <string>
27 
28 #define MAX_PACKET_SIZE 64
29 
30 #define TELEMETRY_PACKET_LEADIN_SIZE sizeof(host_arm_telemetry_leadin_t)
31 
32 #define HOST_ARM_CMD_LEADIN_1 0xFF
33 #define HOST_ARM_CMD_LEADIN_2 0xFE
34 
35 #define HOST_ARM_TELEMETRY_SW_VERSION_LEN \
36  20 // bytes required to encode a 40char git hash
37 #define HOST_ARM_TELEMETRY_MAX_LOG_MSG_LEN 128 // field MAY be shorter
38 
42 namespace perching_arm {
43 
44 // CRC-8-CCITT: polynomal 0x07 (x^8 + x^2 + x + 1)
45 static const uint8_t host_arm_comm_crc8_table[256] = {
46  0x00, 0x07, 0x0e, 0x09, 0x1c, 0x1b, 0x12, 0x15, 0x38, 0x3f, 0x36, 0x31,
47  0x24, 0x23, 0x2a, 0x2d, 0x70, 0x77, 0x7e, 0x79, 0x6c, 0x6b, 0x62, 0x65,
48  0x48, 0x4f, 0x46, 0x41, 0x54, 0x53, 0x5a, 0x5d, 0xe0, 0xe7, 0xee, 0xe9,
49  0xfc, 0xfb, 0xf2, 0xf5, 0xd8, 0xdf, 0xd6, 0xd1, 0xc4, 0xc3, 0xca, 0xcd,
50  0x90, 0x97, 0x9e, 0x99, 0x8c, 0x8b, 0x82, 0x85, 0xa8, 0xaf, 0xa6, 0xa1,
51  0xb4, 0xb3, 0xba, 0xbd, 0xc7, 0xc0, 0xc9, 0xce, 0xdb, 0xdc, 0xd5, 0xd2,
52  0xff, 0xf8, 0xf1, 0xf6, 0xe3, 0xe4, 0xed, 0xea, 0xb7, 0xb0, 0xb9, 0xbe,
53  0xab, 0xac, 0xa5, 0xa2, 0x8f, 0x88, 0x81, 0x86, 0x93, 0x94, 0x9d, 0x9a,
54  0x27, 0x20, 0x29, 0x2e, 0x3b, 0x3c, 0x35, 0x32, 0x1f, 0x18, 0x11, 0x16,
55  0x03, 0x04, 0x0d, 0x0a, 0x57, 0x50, 0x59, 0x5e, 0x4b, 0x4c, 0x45, 0x42,
56  0x6f, 0x68, 0x61, 0x66, 0x73, 0x74, 0x7d, 0x7a, 0x89, 0x8e, 0x87, 0x80,
57  0x95, 0x92, 0x9b, 0x9c, 0xb1, 0xb6, 0xbf, 0xb8, 0xad, 0xaa, 0xa3, 0xa4,
58  0xf9, 0xfe, 0xf7, 0xf0, 0xe5, 0xe2, 0xeb, 0xec, 0xc1, 0xc6, 0xcf, 0xc8,
59  0xdd, 0xda, 0xd3, 0xd4, 0x69, 0x6e, 0x67, 0x60, 0x75, 0x72, 0x7b, 0x7c,
60  0x51, 0x56, 0x5f, 0x58, 0x4d, 0x4a, 0x43, 0x44, 0x19, 0x1e, 0x17, 0x10,
61  0x05, 0x02, 0x0b, 0x0c, 0x21, 0x26, 0x2f, 0x28, 0x3d, 0x3a, 0x33, 0x34,
62  0x4e, 0x49, 0x40, 0x47, 0x52, 0x55, 0x5c, 0x5b, 0x76, 0x71, 0x78, 0x7f,
63  0x6a, 0x6d, 0x64, 0x63, 0x3e, 0x39, 0x30, 0x37, 0x22, 0x25, 0x2c, 0x2b,
64  0x06, 0x01, 0x08, 0x0f, 0x1a, 0x1d, 0x14, 0x13, 0xae, 0xa9, 0xa0, 0xa7,
65  0xb2, 0xb5, 0xbc, 0xbb, 0x96, 0x91, 0x98, 0x9f, 0x8a, 0x8d, 0x84, 0x83,
66  0xde, 0xd9, 0xd0, 0xd7, 0xc2, 0xc5, 0xcc, 0xcb, 0xe6, 0xe1, 0xe8, 0xef,
67  0xfa, 0xfd, 0xf4, 0xf3};
68 
69 // Result of calling a perching arm action
71  RESULT_SUCCESS, // Everything happened well
72  RESULT_PORT_NOT_OPEN, // Serial port could not be opened
73  RESULT_COMMAND_REJECTED, // Invalid command
74  RESULT_INVALID_COMMAND, // Invalid command
75  RESULT_PORT_WRITE_FAILURE, // Port not writeable
76  RESULT_PORT_INIT_FAILURE, // Port cannot be initialized
77  RESULT_FIRMWARE_ERROR, // Firmware error
78  RESULT_RESPONSE_TIMEOUT, // Response timeout
79  RESULT_OUT_OF_BOUNDS // Cannot reach the specified angle
80 };
81 
82 // Raw data struct, which contains more info than required
84  // Individual joint state
86  int16_t load; // unit: 0.1 mA
87  int32_t velocity; // unit: 0.1 rpm
88  int32_t position; // unit: 0.1 degree
89  };
90  // Gripper state
92  int16_t load; // unit: 6.138mA
93  int16_t position; // unit: ticks (open = 0, closed = -8000)
94  int16_t maximum; // unit: fixed at -8000
95  };
99  int16_t current_11v; // S: 3.3 / (1024 * 100 * 0.0075) [A]
100  int16_t current_5v; // S: 3.3 / (1024 * 100 * 0.0100) [A]
101  int16_t board_temp; // unit: 0.1 Celsius
102  int16_t loop_time; // ???
103 };
104 
105 // Convenience declarations
106 typedef std::function<void(uint32_t)> PerchingArmSleepMsCallback;
107 typedef std::function<void(PerchingArmRaw const&)> PerchingArmRawDataCallback;
108 
109 class PerchingArm {
110  public:
111  // Hard-coded limits for the various axes
112  static constexpr int16_t PROX_POS_MIN = -120;
113  static constexpr int16_t PROX_POS_MAX = 90;
114  static constexpr int16_t PROX_VEL_MIN = 0;
115  static constexpr int16_t PROX_VEL_MAX = 20;
116  static constexpr int16_t DIST_POS_MIN = -90;
117  static constexpr int16_t DIST_POS_MAX = 90;
118  static constexpr int16_t DIST_VEL_MIN = 0;
119  static constexpr int16_t DIST_VEL_MAX = 20;
120  static constexpr int16_t GRIP_POS_MIN = -100;
121  static constexpr int16_t GRIP_POS_MAX = 0;
122  static constexpr int16_t GRIP_CALIBRATE = -100;
123 
124  // Limits for the virtual gripper joints (in degrees)
125  // Min = closed, MAX = open, L = left, R = right, D = distal, P = proximal
126  static constexpr int16_t GRIP_L_P_MIN = 20;
127  static constexpr int16_t GRIP_L_P_MAX = 40;
128  static constexpr int16_t GRIP_L_D_MIN = -70;
129  static constexpr int16_t GRIP_L_D_MAX = -40;
130  static constexpr int16_t GRIP_R_P_MIN = -20;
131  static constexpr int16_t GRIP_R_P_MAX = -40;
132  static constexpr int16_t GRIP_R_D_MIN = 70;
133  static constexpr int16_t GRIP_R_D_MAX = 40;
134 
135  // Useful constants for deploying, stowing, panning, tiltint, etc
136  static constexpr int16_t STOW_PROX = 90;
137  static constexpr int16_t STOW_DIST = 0;
138  static constexpr int16_t DEPLOY_PROX = -90;
139  static constexpr int16_t DEPLOY_DIST = 0;
140  static constexpr int16_t TILT_MIN = -120;
141  static constexpr int16_t TILT_MAX = 0;
142  static constexpr int16_t PAN_MIN = -90;
143  static constexpr int16_t PAN_MAX = 90;
144 
145  // Scale factors used to convert raw bytes to firmware units (deg, rpm, perc)
146  static constexpr double K_POSITION_DEG = 0.088;
147  static constexpr double K_VELOCITY_RPM = 0.229;
148  static constexpr double K_LOAD_GRIPPER_MA = 3.3 / (1024.0 * 0.525);
149  static constexpr double K_LOAD_JOINT_MA = 2.690;
150  static constexpr double K_CURRENT_5V = 3.3 / (1024.0);
151  static constexpr double K_CURRENT_11V = 3.3 / (1024.0 * 0.75);
152  static constexpr double K_TEMPERATURE_DEG = 1.0 / 100.0;
153  static constexpr double K_LOOP_TIME_MS = 1.0;
154  static constexpr double K_MOTOR_VOLTAGE = 11.0;
155 
156  // Constructor
157  PerchingArm();
158 
159  // Connect to the arm
160  PerchingArmResult Connect(std::string const& port, uint32_t baud,
161  PerchingArmSleepMsCallback cb_sleep_ms,
162  PerchingArmRawDataCallback cb_raw_data);
163 
164  // Disconnect from the arm
165  void Disconnect();
166 
167  // Print a human-readable string from a result, and return success
168  bool ResultToString(PerchingArmResult result, std::string& msg);
169 
170  // Calibrate the gripper (it will end up closed after completion)
172 
173  // Set the gripper position (in percentage from 0 to 100)
175 
176  // Enable or disabled the proximal motor
179 
180  // Set the velocity of the proximal joint in rads / sec
182 
183  // Set the position of the proximal joint in rads
184  PerchingArmResult SetProximalPosition(int16_t degrees);
185 
186  // Enable or disabled the distal motor
189 
190  // Set the velocity of the distal joint in rads / sec
192 
193  // Set the position of the distal joint in rads
194  PerchingArmResult SetDistalPosition(int16_t degrees);
195 
196  // Enable the gripper
199 
200  // Open the gripper
202 
203  // Close the gripper
205 
206  // Reset the software
208 
209  // Reset the hardware
211 
212  // Configure the arm
213  PerchingArmResult SendCommand(uint8_t target, int16_t address, int16_t value);
214 
215  void ProcessPacket(const uint8_t* buffer, size_t length, double curr_time);
216 
217  protected:
218  // Protocol header constants
219  static constexpr uint8_t PROTOCOL_HEADER_1 = 0xFF;
220  static constexpr uint8_t PROTOCOL_HEADER_2 = 0xFE;
221 
222  // Protocol target constants
223  static constexpr int16_t TARGET_PROXIMAL = 0;
224  static constexpr int16_t TARGET_DISTAL = 1;
225  static constexpr int16_t TARGET_POWER = 2;
226  static constexpr int16_t TARGET_TORQUE = 3;
227  static constexpr int16_t TARGET_GRIPPER = 4;
228  static constexpr int16_t TARGET_RESET = 10;
229 
230  // Protocol address constants
231  static constexpr int16_t ADDRESS_POSITION = 1;
232  static constexpr int16_t ADDRESS_VELOCITY = 2;
233  static constexpr int16_t ADDRESS_ENABLE = 3;
234  static constexpr int16_t ADDRESS_DISABLE = 4;
235  static constexpr int16_t ADDRESS_RESET = 10;
236  static constexpr int16_t ADDRESS_TORQUE_LIMIT = 34;
237  static constexpr int16_t ADDRESS_GRIPPER_CALIBRATE = 51;
238  static constexpr int16_t ADDRESS_GRIPPER_OPEN = 52;
239  static constexpr int16_t ADDRESS_GRIPPER_CLOSE = 53;
240  static constexpr int16_t ADDRESS_GRIPPER_SET = 54;
241  static constexpr int16_t ADDRESS_GRIPPER_RESET = 55;
242  static constexpr int16_t ADDRESS_GRIPPER_ENABLE = 101;
243  static constexpr int16_t ADDRESS_GRIPPER_DISABLE = 100;
244 
245  // Protocol value constants
246  static constexpr int16_t VALUE_POWER_DISABLE = 0;
247  static constexpr int16_t VALUE_POWER_ENABLE = 1;
248 
249  // Finite states of protocol
250  enum Protocol {
251  PROTOCOL_WF_HEADER_1, // See constant above
252  PROTOCOL_WF_HEADER_2, // See constant above
256  };
257 
258  // Asynchronous callback with serial data
259  void Read(const uint8_t* buffer, size_t len);
260 
261  // Asynchronous callback with serial data
262  void Timeout(void);
263 
264  // Asynchronous callback with serial data
265  void Shutdown(void);
266 
267  // Process a valid packet
268  void Process(const uint8_t* buf);
269 
270  // Process a packet
271  void FiniteStateMachine(uint8_t const& c);
272 
273  // Implementation-specific checksumming
274  uint8_t Checksum(const uint8_t* buf, size_t len);
275 
276  typedef struct {
277  uint8_t leadin1;
278  uint8_t leadin2;
279  } __attribute__((packed)) host_arm_cmd_leadin_t;
280 
281  typedef struct {
282  host_arm_cmd_leadin_t leadin;
283  uint8_t length; // number of bytes FOLLOWING the header including checksum
284  } __attribute__((packed)) host_arm_cmd_header_t;
285 
286  typedef struct {
287  host_arm_cmd_header_t header;
288  uint8_t type; // e.g. HOST_ARM_BASIC_CMD_...
289  uint16_t index; // optional (rolling) unique identifier for this packet
290  } __attribute__((packed)) host_arm_cmd_prefix_t;
291 
292  typedef struct {
293  host_arm_cmd_prefix_t prefix;
294  uint16_t address;
295  int16_t data;
296  } __attribute__((packed)) host_arm_basic_cmd_t;
297 
298  typedef struct {
299  uint8_t leadin1;
300  uint8_t leadin2;
301  } __attribute__((packed)) host_arm_telemetry_leadin_t;
302 
303  typedef struct {
304  host_arm_telemetry_leadin_t leadin;
305  uint8_t
306  length; // number of bytes in packet FOLLOWING this field incl checksum
307  } __attribute__((packed)) host_arm_telemetry_header_t;
308 
309  // must be even number of bytes for alignment!
310  typedef struct {
311  host_arm_telemetry_header_t header;
312  uint8_t type; // e.g. HOST_ARM_TELEMETRY_...
313  uint16_t time;
314  } __attribute__((packed)) host_arm_telemetry_prefix_t;
315 
316  enum {
318 
322 
325 
328 
331 
334  };
335 
336  enum {
338 
342 
345 
347 
349 
352 
354 
356 
358  };
359 
360  enum {
361  HOST_ARM_DC_GRIPPER_FLAG_MOTOR_ENABLED = 0b00000001, // aka DCM_EN
362  HOST_ARM_DC_GRIPPER_FLAG_MOTOR_HW_STATUS = 0b00000010, // aka DCM_EN_STATUS
366  };
367 
368  typedef struct {
369  host_arm_telemetry_prefix_t prefix;
370 
371  // encoder ticks
372  int32_t gripper_tick;
374 
375  // in units of 6.138mA
376  uint16_t avg_current; // average over interval since last report
377  uint16_t max_current; // largest in interval since last report
378  uint32_t ewma_current; // long term average, scaled by 10000x
379 
380  // commanded duty cycle, -100 .. 100
381  int16_t avg_pwm; // average over interval since last report
382  int16_t max_pwm; // largest in interval since last report
383 
384  uint8_t motor_flags; // bitfield of OR'd HOST_ARM_DC_GRIPPER_FLAG_*
385  } __attribute__((packed)) host_arm_dc_gripper_state_telemetry_t;
386 
387  enum {
388  // joint operating normally
390  // joint is being externally backdriven
392  // external disturbance ended, waiting to resume operation
394  };
395 
396  typedef struct {
397  int16_t pwm; // units of 0.1%
398  int16_t current; // units of 0.1mA
399  int16_t velocity; // units of 0.1rpm
400  int16_t position; // units of 0.1deg
401  int16_t position_goal; // units of 0.1deg
402  uint8_t backdrive_status; // HOST_ARM_JOINT_BACKDRIVE_STATUS_...
403  } __attribute__((packed)) host_arm_servo_joint_state_telemetry_element_t;
404 
405  typedef struct {
406  host_arm_telemetry_prefix_t prefix;
407  host_arm_servo_joint_state_telemetry_element_t tilt_state;
408  host_arm_servo_joint_state_telemetry_element_t pan_state;
409  } __attribute__((packed)) host_arm_servo_joint_state_telemetry_t;
410 
411  enum {
417  };
418 
419  typedef struct {
420  uint16_t error_flags; // ORing of HOST_ARM_SERVO_ERROR_FLAG_...
421  int16_t temperature; // units of 0.1degC
422  uint8_t input_voltage; // units of 0.1V
423  } __attribute__((packed)) host_arm_servo_joint_status_telemetry_element_t;
424 
425  typedef struct {
426  host_arm_telemetry_prefix_t prefix;
427  host_arm_servo_joint_status_telemetry_element_t tilt_status;
428  host_arm_servo_joint_status_telemetry_element_t pan_status;
429  } __attribute__((packed)) host_arm_servo_joint_status_telemetry_t;
430 
431  typedef struct {
432  host_arm_telemetry_prefix_t prefix;
433  uint16_t address;
434  int16_t data;
435  } __attribute__((packed)) host_arm_pong_telemetry_t;
436 
437  enum {
443  HOST_ARM_ACK_STATUS_PENDING = 0, // command received, operation started
445  1, // operations without completion detection
446  HOST_ARM_ACK_STATUS_DONE = 2, // operations with completion detection
447  };
448 
449  typedef struct {
450  host_arm_telemetry_prefix_t prefix;
451  uint16_t index;
452  int8_t status; // e.g. HOST_ARM_ACK_STATUS_...
453  } __attribute__((packed)) host_arm_ack_telemetry_t;
454 
455  enum {
456  // trap conflict reset
457  HOST_ARM_RESET_REASON_TRAP = 0b1000000000000000, // dsPIC33EP TRAPR
458  // illegal opcode
459  HOST_ARM_RESET_REASON_IOP = 0b0100000000000000, // dsPIC33EP IOPUWR
460  // configuration mismatch
461  HOST_ARM_RESET_REASON_CM = 0b0000001000000000, // dsPIC33EP CM
462  // external reset
463  HOST_ARM_RESET_REASON_EXT = 0b0000000010000000, // dsPIC33EP EXTR (MCLR)
464  // software reset
465  HOST_ARM_RESET_REASON_SW = 0b0000000001000000, // dsPIC33EP SWR
466  // watchdog reset
467  HOST_ARM_RESET_REASON_WD = 0b0000000000010000, // dsPIC33EP WDTO
468  // brownout reset
469  HOST_ARM_RESET_REASON_BRNOUT = 0b0000000000000010, // dsPIC33EP BOR
470  // power-on reset
471  HOST_ARM_RESET_REASON_PWRON = 0b0000000000000001, // dsPIC33EP POR
472  };
473 
474  enum {
476  };
477 
478  typedef struct {
479  host_arm_telemetry_prefix_t prefix;
480 
481  // units of 4.297mA
482  uint16_t avg_v11_current; // average over interval since last report
483  uint16_t max_v11_current; // largest in interval since last report
484 
485  // units of 3.223mA
486  uint16_t avg_v06_current; // average over interval since last report
487  uint16_t max_v06_current; // largest in interval since last report
488 
489  uint16_t temperature; // units of 0.1degC
490 
491  // in units of 1/273437.5s (70MHz/256)
492  uint16_t avg_tick_time;
493  uint16_t max_tick_time;
494 
495  uint16_t reset_reason; // ORing of HOST_ARM_RESET_REASON_...
496 
497  uint8_t board_flags; // bitfield of OR'd HOST_ARM_BOARD_FLAG_...
498  } __attribute__((packed)) host_arm_board_state_telemetry_t;
499 
500  typedef struct {
501  host_arm_telemetry_prefix_t prefix;
502 
503  uint32_t protocol_version; // local value of HOST_ARM_COMM_PROTOCOL_VERSION
504  uint32_t build_time; // unix time, in seconds
506  } __attribute__((packed)) host_arm_board_info_telemetry_t;
507 
508  typedef struct {
509  host_arm_telemetry_prefix_t prefix;
510 
511  // this field may be UP TO this size, but can be smaller
512  char msg[HOST_ARM_TELEMETRY_MAX_LOG_MSG_LEN]; // including terminating '\0'
513  } __attribute__((packed)) host_arm_log_msg_telemetry_t;
514 
515  typedef struct {
516  host_arm_telemetry_prefix_t prefix;
517 
518  // this field may be UP TO this size, but can be smaller
519  char msg[HOST_ARM_TELEMETRY_MAX_LOG_MSG_LEN]; // including terminating '\0'
520  } __attribute__((packed)) host_arm_error_msg_telemetry_t;
521 
523  const host_arm_dc_gripper_state_telemetry_t* packet);
524 
526  const host_arm_servo_joint_state_telemetry_t* packet);
527 
529  const host_arm_servo_joint_status_telemetry_t* packet);
530 
532  const host_arm_board_state_telemetry_t* packet);
533 
534  void ProcessBoardInfoTelemetry(const host_arm_board_info_telemetry_t* packet);
535 
536  void ProcessErrorMsgTelemetry(const host_arm_error_msg_telemetry_t* packet);
537 
538  private:
539  ff_serial::Serial serial_; // Serial port
540  PerchingArmRawDataCallback cb_raw_data_; // Feedback callback
541  PerchingArmSleepMsCallback cb_sleep_ms_; // Sleep callback
542  PerchingArmRaw raw_; // Feedback data structure
543  Protocol rx_state_; // Receive state
544  uint8_t rx_buf_[MAX_PACKET_SIZE]; // Buffer
545  uint8_t rx_ptr_; // Buffer pointer
546  uint8_t rx_datalen_; // Data length
547  bool telemetry_rx_; // Mark as received telemetry
548  uint16_t command_index_; // Rolling command index
549  bool uncalibrated_ = true;
550 };
551 
552 } // namespace perching_arm
553 
554 #endif // PERCHING_ARM_PERCHING_ARM_H_
perching_arm::PerchingArm::HOST_ARM_TELEMETRY_SERVO_JOINT_STATE
@ HOST_ARM_TELEMETRY_SERVO_JOINT_STATE
Definition: perching_arm.h:320
perching_arm::PerchingArm::HOST_ARM_SERVO_ERROR_FLAG_OVERTEMP
@ HOST_ARM_SERVO_ERROR_FLAG_OVERTEMP
Definition: perching_arm.h:415
perching_arm::PerchingArm::PROTOCOL_WF_HEADER_2
@ PROTOCOL_WF_HEADER_2
Definition: perching_arm.h:252
perching_arm::PerchingArm::HOST_ARM_BASIC_CMD_PING
@ HOST_ARM_BASIC_CMD_PING
Definition: perching_arm.h:348
perching_arm::PerchingArmRaw::loop_time
int16_t loop_time
Definition: perching_arm.h:102
perching_arm::PerchingArm::K_LOAD_GRIPPER_MA
static constexpr double K_LOAD_GRIPPER_MA
Definition: perching_arm.h:148
perching_arm::PerchingArm::TARGET_GRIPPER
static constexpr int16_t TARGET_GRIPPER
Definition: perching_arm.h:227
perching_arm::PerchingArm::__attribute__::tilt_state
host_arm_servo_joint_state_telemetry_element_t tilt_state
Definition: perching_arm.h:407
perching_arm::PerchingArm
Definition: perching_arm.h:109
perching_arm::PerchingArm::PROTOCOL_WF_LENGTH
@ PROTOCOL_WF_LENGTH
Definition: perching_arm.h:253
perching_arm::PerchingArm::TARGET_POWER
static constexpr int16_t TARGET_POWER
Definition: perching_arm.h:225
perching_arm::PerchingArm::HOST_ARM_BASIC_CMD_RESET
@ HOST_ARM_BASIC_CMD_RESET
Definition: perching_arm.h:353
perching_arm::PerchingArm::GRIP_POS_MIN
static constexpr int16_t GRIP_POS_MIN
Definition: perching_arm.h:120
perching_arm::PerchingArm::Process
void Process(const uint8_t *buf)
Definition: perching_arm.cc:302
perching_arm::PerchingArm::PROTOCOL_WF_DATA
@ PROTOCOL_WF_DATA
Definition: perching_arm.h:254
perching_arm::PerchingArm::__attribute__::velocity
int16_t velocity
Definition: perching_arm.h:399
perching_arm::PerchingArmResult
PerchingArmResult
Definition: perching_arm.h:70
perching_arm::PerchingArm::__attribute__::max_pwm
int16_t max_pwm
Definition: perching_arm.h:382
perching_arm::PerchingArm::Connect
PerchingArmResult Connect(std::string const &port, uint32_t baud, PerchingArmSleepMsCallback cb_sleep_ms, PerchingArmRawDataCallback cb_raw_data)
Definition: perching_arm.cc:39
perching_arm::PerchingArm::HOST_ARM_DC_GRIPPER_FLAG_CALIBRATING
@ HOST_ARM_DC_GRIPPER_FLAG_CALIBRATING
Definition: perching_arm.h:363
perching_arm::PerchingArm::ADDRESS_GRIPPER_ENABLE
static constexpr int16_t ADDRESS_GRIPPER_ENABLE
Definition: perching_arm.h:242
perching_arm::PerchingArm::HOST_ARM_TELEMETRY_BOARD_INFO
@ HOST_ARM_TELEMETRY_BOARD_INFO
Definition: perching_arm.h:327
perching_arm::PerchingArm::ADDRESS_GRIPPER_RESET
static constexpr int16_t ADDRESS_GRIPPER_RESET
Definition: perching_arm.h:241
perching_arm::PerchingArm::HOST_ARM_RESET_REASON_SW
@ HOST_ARM_RESET_REASON_SW
Definition: perching_arm.h:465
perching_arm::PerchingArm::HOST_ARM_TELEMETRY_BOARD_STATE
@ HOST_ARM_TELEMETRY_BOARD_STATE
Definition: perching_arm.h:326
perching_arm::PerchingArm::Timeout
void Timeout(void)
Definition: perching_arm.cc:367
perching_arm::PerchingArm::VALUE_POWER_ENABLE
static constexpr int16_t VALUE_POWER_ENABLE
Definition: perching_arm.h:247
perching_arm::PerchingArm::__attribute__::pan_status
host_arm_servo_joint_status_telemetry_element_t pan_status
Definition: perching_arm.h:428
perching_arm::PerchingArm::PROX_VEL_MAX
static constexpr int16_t PROX_VEL_MAX
Definition: perching_arm.h:115
perching_arm::PerchingArm::SetProximalVelocity
PerchingArmResult SetProximalVelocity(int16_t rpm)
Definition: perching_arm.cc:98
perching_arm::PerchingArmRaw::current_5v
int16_t current_5v
Definition: perching_arm.h:100
perching_arm::PerchingArm::ADDRESS_GRIPPER_CLOSE
static constexpr int16_t ADDRESS_GRIPPER_CLOSE
Definition: perching_arm.h:239
perching_arm::PerchingArm::ADDRESS_POSITION
static constexpr int16_t ADDRESS_POSITION
Definition: perching_arm.h:231
perching_arm::PerchingArm::GRIP_R_D_MAX
static constexpr int16_t GRIP_R_D_MAX
Definition: perching_arm.h:133
perching_arm::PerchingArm::HOST_ARM_DC_GRIPPER_FLAG_MOTOR_ENABLED
@ HOST_ARM_DC_GRIPPER_FLAG_MOTOR_ENABLED
Definition: perching_arm.h:361
perching_arm::PerchingArm::DIST_VEL_MAX
static constexpr int16_t DIST_VEL_MAX
Definition: perching_arm.h:119
perching_arm::PerchingArm::DIST_VEL_MIN
static constexpr int16_t DIST_VEL_MIN
Definition: perching_arm.h:118
perching_arm::PerchingArm::DIST_POS_MAX
static constexpr int16_t DIST_POS_MAX
Definition: perching_arm.h:117
perching_arm::PerchingArm::__attribute__::temperature
uint16_t temperature
Definition: perching_arm.h:489
perching_arm::PerchingArm::SoftReset
PerchingArmResult SoftReset()
Definition: perching_arm.cc:206
perching_arm::PerchingArmRaw::current_11v
int16_t current_11v
Definition: perching_arm.h:99
perching_arm::PerchingArm::GRIP_L_P_MAX
static constexpr int16_t GRIP_L_P_MAX
Definition: perching_arm.h:127
perching_arm::PerchingArm::ADDRESS_TORQUE_LIMIT
static constexpr int16_t ADDRESS_TORQUE_LIMIT
Definition: perching_arm.h:236
perching_arm
Definition: perching_arm.h:42
perching_arm::PerchingArm::PerchingArm
PerchingArm()
Definition: perching_arm.cc:24
perching_arm::PerchingArm::__attribute__::avg_tick_time
uint16_t avg_tick_time
Definition: perching_arm.h:492
perching_arm::PerchingArm::OpenGripper
PerchingArmResult OpenGripper()
Definition: perching_arm.cc:176
perching_arm::PerchingArmRaw::PerchingArmRawJoint::velocity
int32_t velocity
Definition: perching_arm.h:87
perching_arm::PerchingArm::HOST_ARM_RESET_REASON_WD
@ HOST_ARM_RESET_REASON_WD
Definition: perching_arm.h:467
perching_arm::PerchingArm::HOST_ARM_SERVO_ERROR_FLAG_VOLTAGE_ERR
@ HOST_ARM_SERVO_ERROR_FLAG_VOLTAGE_ERR
Definition: perching_arm.h:416
perching_arm::PerchingArm::__attribute__::leadin2
uint8_t leadin2
Definition: perching_arm.h:278
perching_arm::PerchingArm::HOST_ARM_DC_GRIPPER_FLAG_OVERLOAD
@ HOST_ARM_DC_GRIPPER_FLAG_OVERLOAD
Definition: perching_arm.h:365
perching_arm::PerchingArm::HOST_ARM_BASIC_CMD_POWER
@ HOST_ARM_BASIC_CMD_POWER
Definition: perching_arm.h:346
perching_arm::PerchingArm::HOST_ARM_BASIC_CMD_PAN_JOINT
@ HOST_ARM_BASIC_CMD_PAN_JOINT
Definition: perching_arm.h:340
perching_arm::PerchingArm::HOST_ARM_BASIC_CMD_ALL_JOINTS
@ HOST_ARM_BASIC_CMD_ALL_JOINTS
Definition: perching_arm.h:341
perching_arm::RESULT_SUCCESS
@ RESULT_SUCCESS
Definition: perching_arm.h:71
perching_arm::RESULT_PORT_INIT_FAILURE
@ RESULT_PORT_INIT_FAILURE
Definition: perching_arm.h:76
perching_arm::PerchingArm::__attribute__::time
uint16_t time
Definition: perching_arm.h:313
perching_arm::PerchingArm::K_MOTOR_VOLTAGE
static constexpr double K_MOTOR_VOLTAGE
Definition: perching_arm.h:154
perching_arm::PerchingArm::PAN_MIN
static constexpr int16_t PAN_MIN
Definition: perching_arm.h:142
perching_arm::PerchingArm::__attribute__::max_v06_current
uint16_t max_v06_current
Definition: perching_arm.h:487
perching_arm::PerchingArmRaw
Definition: perching_arm.h:83
perching_arm::PerchingArm::K_LOOP_TIME_MS
static constexpr double K_LOOP_TIME_MS
Definition: perching_arm.h:153
perching_arm::PerchingArm::Read
void Read(const uint8_t *buffer, size_t len)
Definition: perching_arm.cc:362
perching_arm::PerchingArm::__attribute__::data
int16_t data
Definition: perching_arm.h:295
perching_arm::PerchingArm::__attribute__::ewma_current
uint32_t ewma_current
Definition: perching_arm.h:378
perching_arm::PerchingArm::ProcessGripperStateTelemetry
void ProcessGripperStateTelemetry(const host_arm_dc_gripper_state_telemetry_t *packet)
Definition: perching_arm.cc:256
perching_arm::PerchingArm::__attribute__::position
int16_t position
Definition: perching_arm.h:400
perching_arm::PerchingArm::__attribute__::max_v11_current
uint16_t max_v11_current
Definition: perching_arm.h:483
perching_arm::PerchingArm::DisableGripper
PerchingArmResult DisableGripper()
Definition: perching_arm.cc:191
perching_arm::PerchingArm::HOST_ARM_BASIC_CMD_DC_GRIPPER
@ HOST_ARM_BASIC_CMD_DC_GRIPPER
Definition: perching_arm.h:344
perching_arm::PerchingArm::GRIP_R_P_MIN
static constexpr int16_t GRIP_R_P_MIN
Definition: perching_arm.h:130
perching_arm::PerchingArm::HOST_ARM_ACK_STATUS_CONFIRMED
@ HOST_ARM_ACK_STATUS_CONFIRMED
Definition: perching_arm.h:444
perching_arm::PerchingArm::__attribute__::protocol_version
uint32_t protocol_version
Definition: perching_arm.h:503
perching_arm::PerchingArm::CloseGripper
PerchingArmResult CloseGripper()
Definition: perching_arm.cc:197
perching_arm::PerchingArm::GRIP_L_P_MIN
static constexpr int16_t GRIP_L_P_MIN
Definition: perching_arm.h:126
perching_arm::PerchingArmRaw::board_temp
int16_t board_temp
Definition: perching_arm.h:101
perching_arm::PerchingArm::__attribute__::tilt_status
host_arm_servo_joint_status_telemetry_element_t tilt_status
Definition: perching_arm.h:427
perching_arm::PerchingArm::HOST_ARM_DC_GRIPPER_FLAG_MOTOR_HW_STATUS
@ HOST_ARM_DC_GRIPPER_FLAG_MOTOR_HW_STATUS
Definition: perching_arm.h:362
perching_arm::PerchingArm::HOST_ARM_TELEMETRY_HOST_STATS
@ HOST_ARM_TELEMETRY_HOST_STATS
Definition: perching_arm.h:332
perching_arm::PerchingArm::SetDistalPosition
PerchingArmResult SetDistalPosition(int16_t degrees)
Definition: perching_arm.cc:136
perching_arm::PerchingArm::HOST_ARM_ACK_STATUS_DONE
@ HOST_ARM_ACK_STATUS_DONE
Definition: perching_arm.h:446
perching_arm::PerchingArm::HOST_ARM_DC_GRIPPER_FLAG_CALIBRATED
@ HOST_ARM_DC_GRIPPER_FLAG_CALIBRATED
Definition: perching_arm.h:364
perching_arm::PerchingArm::Disconnect
void Disconnect()
Definition: perching_arm.cc:57
perching_arm::PerchingArm::PROTOCOL_HEADER_2
static constexpr uint8_t PROTOCOL_HEADER_2
Definition: perching_arm.h:220
perching_arm::PerchingArm::__attribute__::motor_flags
uint8_t motor_flags
Definition: perching_arm.h:384
perching_arm::PerchingArm::PROX_POS_MAX
static constexpr int16_t PROX_POS_MAX
Definition: perching_arm.h:113
perching_arm::PerchingArm::__attribute__::backdrive_status
uint8_t backdrive_status
Definition: perching_arm.h:402
perching_arm::PerchingArm::CalibrateGripper
PerchingArmResult CalibrateGripper()
Definition: perching_arm.cc:169
perching_arm::RESULT_OUT_OF_BOUNDS
@ RESULT_OUT_OF_BOUNDS
Definition: perching_arm.h:79
perching_arm::PerchingArm::HOST_ARM_SERVO_ERROR_FLAG_ELEC_SHOCK
@ HOST_ARM_SERVO_ERROR_FLAG_ELEC_SHOCK
Definition: perching_arm.h:413
perching_arm::PerchingArm::HOST_ARM_TELEMETRY_NULL
@ HOST_ARM_TELEMETRY_NULL
Definition: perching_arm.h:317
perching_arm::PerchingArm::__attribute__::gripper_tick
int32_t gripper_tick
Definition: perching_arm.h:372
perching_arm::PerchingArm::HOST_ARM_RESET_REASON_TRAP
@ HOST_ARM_RESET_REASON_TRAP
Definition: perching_arm.h:457
perching_arm::PerchingArm::__attribute__::length
uint8_t length
Definition: perching_arm.h:283
perching_arm::PerchingArm::__attribute__::temperature
int16_t temperature
Definition: perching_arm.h:421
perching_arm::PerchingArm::ProcessServoJointStatusTelemetry
void ProcessServoJointStatusTelemetry(const host_arm_servo_joint_status_telemetry_t *packet)
Definition: perching_arm.cc:278
perching_arm::PerchingArm::__attribute__::avg_v06_current
uint16_t avg_v06_current
Definition: perching_arm.h:486
perching_arm::PerchingArm::PROTOCOL_HEADER_1
static constexpr uint8_t PROTOCOL_HEADER_1
Definition: perching_arm.h:219
perching_arm::PerchingArm::SetProximalPosition
PerchingArmResult SetProximalPosition(int16_t degrees)
Definition: perching_arm.cc:107
perching_arm::PerchingArm::HOST_ARM_RESET_REASON_IOP
@ HOST_ARM_RESET_REASON_IOP
Definition: perching_arm.h:459
perching_arm::PerchingArm::K_LOAD_JOINT_MA
static constexpr double K_LOAD_JOINT_MA
Definition: perching_arm.h:149
perching_arm::PerchingArm::__attribute__::input_voltage
uint8_t input_voltage
Definition: perching_arm.h:422
perching_arm::PerchingArm::FiniteStateMachine
void FiniteStateMachine(uint8_t const &c)
Definition: perching_arm.cc:377
perching_arm::PerchingArm::HOST_ARM_BASIC_CMD_RAW_MOTOR
@ HOST_ARM_BASIC_CMD_RAW_MOTOR
Definition: perching_arm.h:343
perching_arm::PerchingArm::ADDRESS_DISABLE
static constexpr int16_t ADDRESS_DISABLE
Definition: perching_arm.h:234
perching_arm::PerchingArm::SendCommand
PerchingArmResult SendCommand(uint8_t target, int16_t address, int16_t value)
Definition: perching_arm.cc:224
perching_arm::PerchingArm::HOST_ARM_BASIC_CMD_MAX
@ HOST_ARM_BASIC_CMD_MAX
Definition: perching_arm.h:357
perching_arm::PerchingArm::VALUE_POWER_DISABLE
static constexpr int16_t VALUE_POWER_DISABLE
Definition: perching_arm.h:246
perching_arm::PerchingArm::__attribute__::leadin
host_arm_telemetry_leadin_t leadin
Definition: perching_arm.h:304
perching_arm::PerchingArm::TILT_MIN
static constexpr int16_t TILT_MIN
Definition: perching_arm.h:140
perching_arm::PerchingArm::GRIP_R_P_MAX
static constexpr int16_t GRIP_R_P_MAX
Definition: perching_arm.h:131
perching_arm::PerchingArm::HOST_ARM_ACK_STATUS_UNIMPLEMENTED
@ HOST_ARM_ACK_STATUS_UNIMPLEMENTED
Definition: perching_arm.h:442
perching_arm::PerchingArm::K_POSITION_DEG
static constexpr double K_POSITION_DEG
Definition: perching_arm.h:146
perching_arm::PerchingArm::TARGET_PROXIMAL
static constexpr int16_t TARGET_PROXIMAL
Definition: perching_arm.h:223
perching_arm::PerchingArm::__attribute__::avg_v11_current
uint16_t avg_v11_current
Definition: perching_arm.h:482
perching_arm::PerchingArm::ADDRESS_GRIPPER_DISABLE
static constexpr int16_t ADDRESS_GRIPPER_DISABLE
Definition: perching_arm.h:243
perching_arm::PerchingArm::ADDRESS_VELOCITY
static constexpr int16_t ADDRESS_VELOCITY
Definition: perching_arm.h:232
perching_arm::PerchingArm::__attribute__::current
int16_t current
Definition: perching_arm.h:398
perching_arm::PerchingArm::__attribute__::board_flags
uint8_t board_flags
Definition: perching_arm.h:497
ff_serial::Serial
Definition: serial.h:52
perching_arm::PerchingArm::__attribute__::position_goal
int16_t position_goal
Definition: perching_arm.h:401
perching_arm::PerchingArm::HOST_ARM_JOINT_BACKDRIVE_STATUS_DETECTED
@ HOST_ARM_JOINT_BACKDRIVE_STATUS_DETECTED
Definition: perching_arm.h:391
perching_arm::PerchingArm::PROX_POS_MIN
static constexpr int16_t PROX_POS_MIN
Definition: perching_arm.h:112
perching_arm::PerchingArm::GRIP_POS_MAX
static constexpr int16_t GRIP_POS_MAX
Definition: perching_arm.h:121
perching_arm::PerchingArm::__attribute__::address
uint16_t address
Definition: perching_arm.h:294
perching_arm::PerchingArmRaw::PerchingArmRawJoint::position
int32_t position
Definition: perching_arm.h:88
perching_arm::PerchingArm::__attribute__::max_current
uint16_t max_current
Definition: perching_arm.h:377
perching_arm::PerchingArmRaw::dist
PerchingArmRawJoint dist
Definition: perching_arm.h:97
perching_arm::PerchingArm::DEPLOY_PROX
static constexpr int16_t DEPLOY_PROX
Definition: perching_arm.h:138
perching_arm::PerchingArm::HOST_ARM_BASIC_CMD_DUMP_HOST_STATS
@ HOST_ARM_BASIC_CMD_DUMP_HOST_STATS
Definition: perching_arm.h:350
perching_arm::PerchingArm::__attribute__::max_tick_time
uint16_t max_tick_time
Definition: perching_arm.h:493
perching_arm::PerchingArm::ADDRESS_GRIPPER_SET
static constexpr int16_t ADDRESS_GRIPPER_SET
Definition: perching_arm.h:240
perching_arm::PerchingArm::ResultToString
bool ResultToString(PerchingArmResult result, std::string &msg)
Definition: perching_arm.cc:63
perching_arm::PerchingArm::Shutdown
void Shutdown(void)
Definition: perching_arm.cc:372
MAX_PACKET_SIZE
#define MAX_PACKET_SIZE
Definition: perching_arm.h:28
perching_arm::PerchingArm::__attribute__::status
int8_t status
Definition: perching_arm.h:452
perching_arm::PerchingArm::ADDRESS_ENABLE
static constexpr int16_t ADDRESS_ENABLE
Definition: perching_arm.h:233
perching_arm::PerchingArm::HOST_ARM_TELEMETRY_LOG_MSG
@ HOST_ARM_TELEMETRY_LOG_MSG
Definition: perching_arm.h:329
perching_arm::PerchingArmSleepMsCallback
std::function< void(uint32_t)> PerchingArmSleepMsCallback
Definition: perching_arm.h:106
perching_arm::PerchingArm::HOST_ARM_ACK_STATUS_INVALID_ARG
@ HOST_ARM_ACK_STATUS_INVALID_ARG
Definition: perching_arm.h:441
perching_arm::PerchingArm::K_CURRENT_11V
static constexpr double K_CURRENT_11V
Definition: perching_arm.h:151
perching_arm::PerchingArm::HOST_ARM_TELEMETRY_SERVO_JOINT_STATUS
@ HOST_ARM_TELEMETRY_SERVO_JOINT_STATUS
Definition: perching_arm.h:321
perching_arm::PerchingArm::ProcessBoardStateTelemetry
void ProcessBoardStateTelemetry(const host_arm_board_state_telemetry_t *packet)
Definition: perching_arm.cc:283
perching_arm::PerchingArm::HOST_ARM_RESET_REASON_BRNOUT
@ HOST_ARM_RESET_REASON_BRNOUT
Definition: perching_arm.h:469
perching_arm::PerchingArm::TARGET_RESET
static constexpr int16_t TARGET_RESET
Definition: perching_arm.h:228
perching_arm::RESULT_INVALID_COMMAND
@ RESULT_INVALID_COMMAND
Definition: perching_arm.h:74
perching_arm::PerchingArm::HOST_ARM_ACK_STATUS_PENDING
@ HOST_ARM_ACK_STATUS_PENDING
Definition: perching_arm.h:443
HOST_ARM_TELEMETRY_SW_VERSION_LEN
#define HOST_ARM_TELEMETRY_SW_VERSION_LEN
Definition: perching_arm.h:35
perching_arm::PerchingArm::K_VELOCITY_RPM
static constexpr double K_VELOCITY_RPM
Definition: perching_arm.h:147
perching_arm::PerchingArm::HardReset
PerchingArmResult HardReset()
Definition: perching_arm.cc:212
perching_arm::PerchingArmRaw::PerchingArmRawJoint
Definition: perching_arm.h:85
perching_arm::RESULT_FIRMWARE_ERROR
@ RESULT_FIRMWARE_ERROR
Definition: perching_arm.h:77
perching_arm::PerchingArm::SetDistalDisabled
PerchingArmResult SetDistalDisabled()
Definition: perching_arm.cc:150
perching_arm::PerchingArm::HOST_ARM_JOINT_BACKDRIVE_STATUS_NONE
@ HOST_ARM_JOINT_BACKDRIVE_STATUS_NONE
Definition: perching_arm.h:389
perching_arm::PerchingArm::ProcessBoardInfoTelemetry
void ProcessBoardInfoTelemetry(const host_arm_board_info_telemetry_t *packet)
Definition: perching_arm.cc:291
perching_arm::PerchingArm::GRIP_L_D_MAX
static constexpr int16_t GRIP_L_D_MAX
Definition: perching_arm.h:129
perching_arm::PerchingArm::HOST_ARM_RESET_REASON_EXT
@ HOST_ARM_RESET_REASON_EXT
Definition: perching_arm.h:463
perching_arm::PerchingArm::__attribute__::reset_reason
uint16_t reset_reason
Definition: perching_arm.h:495
perching_arm::PerchingArmRaw::PerchingArmRawJoint::load
int16_t load
Definition: perching_arm.h:86
perching_arm::RESULT_PORT_WRITE_FAILURE
@ RESULT_PORT_WRITE_FAILURE
Definition: perching_arm.h:75
serial.h
perching_arm::PerchingArmRaw::PerchingArmRawGripper::load
int16_t load
Definition: perching_arm.h:92
perching_arm::PerchingArm::SetProximalDisabled
PerchingArmResult SetProximalDisabled()
Definition: perching_arm.cc:121
perching_arm::PerchingArm::HOST_ARM_JOINT_BACKDRIVE_STATUS_ENDING
@ HOST_ARM_JOINT_BACKDRIVE_STATUS_ENDING
Definition: perching_arm.h:393
perching_arm::PerchingArm::SetDistalVelocity
PerchingArmResult SetDistalVelocity(int16_t rpm)
Definition: perching_arm.cc:127
perching_arm::PerchingArm::HOST_ARM_TELEMETRY_DC_GRIPPER_STATE
@ HOST_ARM_TELEMETRY_DC_GRIPPER_STATE
Definition: perching_arm.h:319
HOST_ARM_TELEMETRY_MAX_LOG_MSG_LEN
#define HOST_ARM_TELEMETRY_MAX_LOG_MSG_LEN
Definition: perching_arm.h:37
perching_arm::PerchingArm::__attribute__::prefix
host_arm_cmd_prefix_t prefix
Definition: perching_arm.h:293
perching_arm::PerchingArm::PROX_VEL_MIN
static constexpr int16_t PROX_VEL_MIN
Definition: perching_arm.h:114
perching_arm::PerchingArm::SetProximalEnabled
PerchingArmResult SetProximalEnabled()
Definition: perching_arm.cc:116
perching_arm::PerchingArm::K_TEMPERATURE_DEG
static constexpr double K_TEMPERATURE_DEG
Definition: perching_arm.h:152
perching_arm::RESULT_PORT_NOT_OPEN
@ RESULT_PORT_NOT_OPEN
Definition: perching_arm.h:72
perching_arm::PerchingArm::__attribute__::header
host_arm_telemetry_header_t header
Definition: perching_arm.h:311
perching_arm::PerchingArm::ProcessErrorMsgTelemetry
void ProcessErrorMsgTelemetry(const host_arm_error_msg_telemetry_t *packet)
Definition: perching_arm.cc:296
perching_arm::PerchingArm::__attribute__::leadin
host_arm_cmd_leadin_t leadin
Definition: perching_arm.h:282
perching_arm::PerchingArm::ADDRESS_GRIPPER_CALIBRATE
static constexpr int16_t ADDRESS_GRIPPER_CALIBRATE
Definition: perching_arm.h:237
perching_arm::PerchingArm::DIST_POS_MIN
static constexpr int16_t DIST_POS_MIN
Definition: perching_arm.h:116
perching_arm::PerchingArm::SetGripperPosition
PerchingArmResult SetGripperPosition(int16_t perc)
Definition: perching_arm.cc:156
perching_arm::PerchingArm::HOST_ARM_BASIC_CMD_DUMP_JOINT_STATS
@ HOST_ARM_BASIC_CMD_DUMP_JOINT_STATS
Definition: perching_arm.h:351
perching_arm::PerchingArmRaw::prox
PerchingArmRawJoint prox
Definition: perching_arm.h:96
perching_arm::PerchingArm::HOST_ARM_RESET_REASON_CM
@ HOST_ARM_RESET_REASON_CM
Definition: perching_arm.h:461
perching_arm::PerchingArm::STOW_DIST
static constexpr int16_t STOW_DIST
Definition: perching_arm.h:137
perching_arm::PerchingArm::ADDRESS_GRIPPER_OPEN
static constexpr int16_t ADDRESS_GRIPPER_OPEN
Definition: perching_arm.h:238
perching_arm::PerchingArm::PROTOCOL_WF_CHECKSUM
@ PROTOCOL_WF_CHECKSUM
Definition: perching_arm.h:255
perching_arm::PerchingArm::HOST_ARM_BOARD_FLAG_HAS_LOGMSG
@ HOST_ARM_BOARD_FLAG_HAS_LOGMSG
Definition: perching_arm.h:475
perching_arm::PerchingArm::SetDistalEnabled
PerchingArmResult SetDistalEnabled()
Definition: perching_arm.cc:145
perching_arm::PerchingArm::__attribute__::avg_current
uint16_t avg_current
Definition: perching_arm.h:376
perching_arm::PerchingArm::HOST_ARM_TELEMETRY_JOINT_STATS
@ HOST_ARM_TELEMETRY_JOINT_STATS
Definition: perching_arm.h:333
perching_arm::PerchingArm::HOST_ARM_TELEMETRY_ERROR_MSG
@ HOST_ARM_TELEMETRY_ERROR_MSG
Definition: perching_arm.h:330
perching_arm::PerchingArm::__attribute__::avg_pwm
int16_t avg_pwm
Definition: perching_arm.h:381
perching_arm::PerchingArm::GRIP_R_D_MIN
static constexpr int16_t GRIP_R_D_MIN
Definition: perching_arm.h:132
perching_arm::PerchingArm::ADDRESS_RESET
static constexpr int16_t ADDRESS_RESET
Definition: perching_arm.h:235
perching_arm::PerchingArmRaw::grip
PerchingArmRawGripper grip
Definition: perching_arm.h:98
perching_arm::PerchingArm::PROTOCOL_WF_HEADER_1
@ PROTOCOL_WF_HEADER_1
Definition: perching_arm.h:251
perching_arm::PerchingArm::HOST_ARM_SERVO_ERROR_FLAG_OVERLOAD
@ HOST_ARM_SERVO_ERROR_FLAG_OVERLOAD
Definition: perching_arm.h:412
perching_arm::PerchingArm::ProcessServoJointStateTelemetry
void ProcessServoJointStateTelemetry(const host_arm_servo_joint_state_telemetry_t *packet)
Definition: perching_arm.cc:267
perching_arm::PerchingArmRaw::PerchingArmRawGripper::maximum
int16_t maximum
Definition: perching_arm.h:94
perching_arm::PerchingArm::HOST_ARM_BASIC_CMD_NULL
@ HOST_ARM_BASIC_CMD_NULL
Definition: perching_arm.h:337
perching_arm::PerchingArm::HOST_ARM_TELEMETRY_ACK
@ HOST_ARM_TELEMETRY_ACK
Definition: perching_arm.h:323
perching_arm::PerchingArm::HOST_ARM_BASIC_CMD_DUMP_LOG
@ HOST_ARM_BASIC_CMD_DUMP_LOG
Definition: perching_arm.h:355
perching_arm::PerchingArm::STOW_PROX
static constexpr int16_t STOW_PROX
Definition: perching_arm.h:136
perching_arm::PerchingArm::TILT_MAX
static constexpr int16_t TILT_MAX
Definition: perching_arm.h:141
perching_arm::PerchingArm::Protocol
Protocol
Definition: perching_arm.h:250
perching_arm::PerchingArm::TARGET_DISTAL
static constexpr int16_t TARGET_DISTAL
Definition: perching_arm.h:224
perching_arm::PerchingArm::DEPLOY_DIST
static constexpr int16_t DEPLOY_DIST
Definition: perching_arm.h:139
perching_arm::PerchingArm::GRIP_CALIBRATE
static constexpr int16_t GRIP_CALIBRATE
Definition: perching_arm.h:122
perching_arm::PerchingArm::PAN_MAX
static constexpr int16_t PAN_MAX
Definition: perching_arm.h:143
perching_arm::PerchingArm::__attribute__::pwm
int16_t pwm
Definition: perching_arm.h:397
perching_arm::PerchingArm::HOST_ARM_RESET_REASON_PWRON
@ HOST_ARM_RESET_REASON_PWRON
Definition: perching_arm.h:471
perching_arm::PerchingArm::ProcessPacket
void ProcessPacket(const uint8_t *buffer, size_t length, double curr_time)
perching_arm::PerchingArm::EnableGripper
PerchingArmResult EnableGripper()
Definition: perching_arm.cc:185
perching_arm::PerchingArm::__attribute__::error_flags
uint16_t error_flags
Definition: perching_arm.h:420
perching_arm::RESULT_RESPONSE_TIMEOUT
@ RESULT_RESPONSE_TIMEOUT
Definition: perching_arm.h:78
perching_arm::PerchingArm::__attribute__::build_time
uint32_t build_time
Definition: perching_arm.h:504
perching_arm::PerchingArm::HOST_ARM_ACK_STATUS_ERROR
@ HOST_ARM_ACK_STATUS_ERROR
Definition: perching_arm.h:439
perching_arm::PerchingArm::GRIP_L_D_MIN
static constexpr int16_t GRIP_L_D_MIN
Definition: perching_arm.h:128
perching_arm::PerchingArmRaw::PerchingArmRawGripper::position
int16_t position
Definition: perching_arm.h:93
perching_arm::PerchingArm::HOST_ARM_ACK_STATUS_NULL
@ HOST_ARM_ACK_STATUS_NULL
Definition: perching_arm.h:438
perching_arm::PerchingArm::Checksum
uint8_t Checksum(const uint8_t *buf, size_t len)
Definition: perching_arm.cc:420
perching_arm::host_arm_comm_crc8_table
static const uint8_t host_arm_comm_crc8_table[256]
Definition: perching_arm.h:45
perching_arm::PerchingArm::__attribute__::index
uint16_t index
Definition: perching_arm.h:289
perching_arm::PerchingArmRawDataCallback
std::function< void(PerchingArmRaw const &)> PerchingArmRawDataCallback
Definition: perching_arm.h:107
perching_arm::RESULT_COMMAND_REJECTED
@ RESULT_COMMAND_REJECTED
Definition: perching_arm.h:73
perching_arm::PerchingArm::HOST_ARM_SERVO_ERROR_FLAG_ENCODER_ERR
@ HOST_ARM_SERVO_ERROR_FLAG_ENCODER_ERR
Definition: perching_arm.h:414
perching_arm::PerchingArmRaw::PerchingArmRawGripper
Definition: perching_arm.h:91
perching_arm::PerchingArm::__attribute__::header
host_arm_cmd_header_t header
Definition: perching_arm.h:287
perching_arm::PerchingArm::__attribute__::leadin1
uint8_t leadin1
Definition: perching_arm.h:277
perching_arm::PerchingArm::HOST_ARM_BASIC_CMD_TILT_JOINT
@ HOST_ARM_BASIC_CMD_TILT_JOINT
Definition: perching_arm.h:339
perching_arm::PerchingArm::TARGET_TORQUE
static constexpr int16_t TARGET_TORQUE
Definition: perching_arm.h:226
perching_arm::PerchingArm::HOST_ARM_ACK_STATUS_BUSY
@ HOST_ARM_ACK_STATUS_BUSY
Definition: perching_arm.h:440
perching_arm::PerchingArm::K_CURRENT_5V
static constexpr double K_CURRENT_5V
Definition: perching_arm.h:150
perching_arm::PerchingArm::HOST_ARM_TELEMETRY_PONG
@ HOST_ARM_TELEMETRY_PONG
Definition: perching_arm.h:324
perching_arm::PerchingArm::__attribute__::pan_state
host_arm_servo_joint_state_telemetry_element_t pan_state
Definition: perching_arm.h:408
signal_lights::__attribute__
class signal_lights::SignalPair __attribute__
Definition: signal_lights.h:95
perching_arm::PerchingArm::__attribute__::gripper_tick_goal
int32_t gripper_tick_goal
Definition: perching_arm.h:373
perching_arm::PerchingArm::__attribute__::type
uint8_t type
Definition: perching_arm.h:288