|
73 | 73 | - [ ] Command 2π rad/s with gear_ratio=1.0, pole_pairs=1 → verify VESC receives 60 ERPM |
74 | 74 | - [ ] Command 1 rad/s with gear_ratio=5.0, pole_pairs=7 → verify VESC receives ~333 ERPM |
75 | 75 |
|
76 | | -## Published topics |
| 76 | +## Motor Current State Interfaces (D/Q Components) |
| 77 | + |
| 78 | +### Average D-axis Current (Amperes) |
| 79 | +- [ ] Verify `average_id` is in Amperes |
| 80 | +- [ ] Verify value matches VESC packet `avg_id()` |
| 81 | +- [ ] Check sign: positive/negative indicates direction in D-axis |
| 82 | +- [ ] Verify updates in real-time during motor operation |
| 83 | + |
| 84 | +### Average Q-axis Current (Amperes) |
| 85 | +- [ ] Verify `average_iq` is in Amperes |
| 86 | +- [ ] Verify value matches VESC packet `avg_iq()` |
| 87 | +- [ ] Check sign: positive/negative indicates direction in Q-axis |
| 88 | +- [ ] Verify updates in real-time during motor operation |
| 89 | +- [ ] Iq typically correlates with torque production |
| 90 | + |
| 91 | +## Motor Voltage State Interfaces (D/Q Components) |
| 92 | + |
| 93 | +### Average D-axis Voltage (Volts) |
| 94 | +- [ ] Verify `average_vd` is in Volts |
| 95 | +- [ ] Verify value matches VESC packet `avg_vd()` |
| 96 | +- [ ] Check magnitude relative to battery voltage |
| 97 | +- [ ] Verify updates in real-time during motor operation |
| 98 | + |
| 99 | +### Average Q-axis Voltage (Volts) |
| 100 | +- [ ] Verify `average_vq` is in Volts |
| 101 | +- [ ] Verify value matches VESC packet `avg_vq()` |
| 102 | +- [ ] Check magnitude relative to battery voltage |
| 103 | +- [ ] Verify updates in real-time during motor operation |
| 104 | + |
| 105 | +## Duty Cycle State Interface |
| 106 | + |
| 107 | +### Duty Cycle (unitless, range [0, 1]) |
| 108 | +- [ ] Verify `duty_cycle` is unitless (0.0 to 1.0) |
| 109 | +- [ ] Verify value matches VESC packet `duty_cycle_now()` |
| 110 | +- [ ] At rest: duty cycle should be near 0.0 |
| 111 | +- [ ] At full throttle: duty cycle should approach 1.0 |
| 112 | +- [ ] Verify updates in real-time during motor operation |
| 113 | + |
| 114 | +## Servo State Interface |
| 115 | + |
| 116 | +### Servo Position (unitless) |
| 117 | +- [ ] Verify `servo` mirrors the commanded servo value |
| 118 | +- [ ] VESC cannot read back servo position, so state = last command |
| 119 | +- [ ] Verify value persists between write cycles |
| 120 | + |
| 121 | +## Command Interfaces |
| 122 | + |
| 123 | +### Position Command (radians, mechanical) |
| 124 | +- [ ] Command position in mechanical radians |
| 125 | +- [ ] Verify conversion to VESC degrees: `vesc_deg = mechanical_rad * gear_ratio * 180/π` |
| 126 | +- [ ] Test with various gear_ratio values |
| 127 | +- [ ] Verify motor moves to commanded position |
| 128 | + |
| 129 | +### Velocity Command (rad/s, mechanical) |
| 130 | +- [ ] Command velocity in mechanical rad/s |
| 131 | +- [ ] Verify conversion to VESC ERPM: `erpm = mechanical_rad_s * (60/2π) * gear_ratio * pole_pairs` |
| 132 | +- [ ] Test with various gear_ratio and pole_pairs values |
| 133 | +- [ ] Verify motor rotates at commanded speed |
| 134 | + |
| 135 | +### Servo Command (unitless) |
| 136 | +- [ ] Command servo position (typically -1.0 to +1.0 or 0.0 to 1.0) |
| 137 | +- [ ] Verify value is sent directly to VESC `setServo()` |
| 138 | +- [ ] Verify state interface mirrors commanded value |
| 139 | + |
| 140 | +### Current/Effort Command (Amperes) |
| 141 | +- [ ] Command current in Amperes using `effort` interface |
| 142 | +- [ ] Verify value is sent to VESC `setCurrent()` |
| 143 | +- [ ] Test positive values (forward torque) |
| 144 | +- [ ] Test negative values (reverse torque) |
| 145 | +- [ ] Verify motor torque correlates with commanded current |
| 146 | + |
| 147 | +### Duty Cycle Command (unitless, range [0, 1]) |
| 148 | +- [ ] Command duty cycle between 0.0 and 1.0 |
| 149 | +- [ ] Verify values are clamped to [0, 1] range |
| 150 | +- [ ] Test command < 0.0 → verify clamped to 0.0 |
| 151 | +- [ ] Test command > 1.0 → verify clamped to 1.0 |
| 152 | +- [ ] Test command = 0.5 → verify exactly 0.5 sent to VESC |
| 153 | +- [ ] Verify motor speed correlates with duty cycle |
| 154 | + |
| 155 | +### Brake Command (Amperes) |
| 156 | +- [ ] Command brake current in Amperes |
| 157 | +- [ ] Verify value is sent to VESC `setBrake()` |
| 158 | +- [ ] Test various brake current values |
| 159 | +- [ ] Verify motor decelerates/stops when brake is applied |
| 160 | +- [ ] Brake current should be positive (magnitude of braking force) |
| 161 | + |
| 162 | +## Published Topics |
77 | 163 |
|
78 | 164 | - [ ] Verify `~/vesc_state` topic publishes `vesc_msgs::msg::VescState` messages |
79 | 165 | - [ ] Verify `~/vesc_imu` topic publishes `vesc_msgs::msg::VescImuStamped` messages |
0 commit comments