123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- // Code by Rustom Jehangir: rusty@bluerobotics.com
- #include "Sub.h"
- // Count total vehicle turns to avoid tangling tether
- void Sub::update_turn_counter()
- {
- // Determine state
- // 0: 0-90 deg, 1: 90-180 deg, 2: -180--90 deg, 3: -90--0 deg
- uint8_t turn_state;
- if (ahrs.yaw >= 0.0f && ahrs.yaw < radians(90)) {
- turn_state = 0;
- } else if (ahrs.yaw > radians(90)) {
- turn_state = 1;
- } else if (ahrs.yaw < -radians(90)) {
- turn_state = 2;
- } else {
- turn_state = 3;
- }
- // If yaw went from negative to positive (right turn)
- switch (last_turn_state) {
- case 0:
- if (turn_state == 1) {
- quarter_turn_count++;
- }
- if (turn_state == 3) {
- quarter_turn_count--;
- }
- break;
- case 1:
- if (turn_state == 2) {
- quarter_turn_count++;
- }
- if (turn_state == 0) {
- quarter_turn_count--;
- }
- break;
- case 2:
- if (turn_state == 3) {
- quarter_turn_count++;
- }
- if (turn_state == 1) {
- quarter_turn_count--;
- }
- break;
- case 3:
- if (turn_state == 0) {
- quarter_turn_count++;
- }
- if (turn_state == 2) {
- quarter_turn_count--;
- }
- break;
- }
- last_turn_state = turn_state;
- }
|