Revision e5606def
devices/DiWheelDrive/global.hpp | ||
---|---|---|
169 | 169 |
int rpmHardLeft[2] = {5,20}; |
170 | 170 |
int rpmSoftRight[2] = {rpmSoftLeft[1],rpmSoftLeft[0]}; |
171 | 171 |
int rpmHardRight[2] = {rpmHardLeft[1],rpmHardLeft[0]}; |
172 |
// uint32_t stateTracker[24] = { 0 };
|
|
173 |
|
|
172 |
uint32_t stateTracker[24] = { 0 }; |
|
173 |
uint32_t stateTransitionCounter = 0; |
|
174 | 174 |
// Line Following thresholds set due to calibration |
175 | 175 |
// MaxDelta: 18676, FL: 4289, FR: 22965 |
176 | 176 |
// Thresh FL: 5241, FR: 25528 |
devices/DiWheelDrive/main.cpp | ||
---|---|---|
914 | 914 |
// Print out the error info collected. Clear buffer after calling |
915 | 915 |
chprintf(chp, "Error Info\n"); |
916 | 916 |
chprintf(chp, "\n"); |
917 |
// uint8_t IDLE = 0;
|
|
918 |
// uint8_t FOLLOW_LINE = 1;
|
|
919 |
// uint8_t DETECT_STATION = 2;
|
|
920 |
// uint8_t REVERSE = 3;
|
|
921 |
// uint8_t PUSH_BACK = 4;
|
|
922 |
// uint8_t CHECK_POSITIONING = 5;
|
|
923 |
// uint8_t CHECK_VOLTAGE = 6;
|
|
924 |
// uint8_t CHARGING = 7;
|
|
925 |
// uint8_t RELEASE = 8;
|
|
926 |
// uint8_t RELEASE_TO_CORRECT = 9;
|
|
927 |
// uint8_t CORRECT_POSITIONING = 10;
|
|
928 |
// uint8_t TURN = 12;
|
|
929 |
// uint8_t INACTIVE = 13;
|
|
930 |
// uint8_t CALIBRATION = 14;
|
|
931 |
// uint8_t CALIBRATION_CHECK = 15;
|
|
932 |
// uint8_t DEVIATION_CORRECTION = 16;
|
|
933 |
// uint8_t DOCKING_ERROR = 16+1;
|
|
934 |
// uint8_t REVERSE_TIMEOUT_ERROR = 16+2;
|
|
935 |
// uint8_t CALIBRATION_ERROR = 16+3;
|
|
936 |
// uint8_t WHITE_DETECTION_ERROR = 16+4;
|
|
937 |
// uint8_t PROXY_DETECTION_ERROR = 16+5;
|
|
938 |
// uint8_t NO_CHARGING_POWER_ERROR = 16+6;
|
|
939 |
// uint8_t UNKNOWN_STATE_ERROR = 16+7;
|
|
940 |
|
|
941 |
// chprintf(chp, "IDLE: %d\n", global.stateTracker[IDLE]);
|
|
942 |
// chprintf(chp, "FOLLOW_LINE: %d\n", global.stateTracker[FOLLOW_LINE]);
|
|
943 |
// chprintf(chp, "DETECT_STATION: %d\n", global.stateTracker[DETECT_STATION]);
|
|
944 |
// chprintf(chp, "REVERSE: %d\n", global.stateTracker[REVERSE]);
|
|
945 |
// chprintf(chp, "PUSH_BACK: %d\n", global.stateTracker[PUSH_BACK]);
|
|
946 |
// chprintf(chp, "CHECK_POSITIONING: %d\n", global.stateTracker[CHECK_POSITIONING]);
|
|
947 |
// chprintf(chp, "CHECK_VOLTAGE: %d\n", global.stateTracker[CHECK_VOLTAGE]);
|
|
948 |
// chprintf(chp, "CHARGING: %d\n", global.stateTracker[CHARGING]);
|
|
949 |
// chprintf(chp, "RELEASE: %d\n", global.stateTracker[RELEASE]);
|
|
950 |
// chprintf(chp, "RELEASE_TO_CORRECT: %d\n", global.stateTracker[RELEASE_TO_CORRECT]);
|
|
951 |
// chprintf(chp, "CORRECT_POSITIONING: %d\n", global.stateTracker[CORRECT_POSITIONING]);
|
|
952 |
// chprintf(chp, "TURN: %d\n", global.stateTracker[TURN]);
|
|
953 |
// chprintf(chp, "INACTIVE: %d\n", global.stateTracker[INACTIVE]);
|
|
954 |
// chprintf(chp, "CALIBRATION: %d\n", global.stateTracker[CALIBRATION]);
|
|
955 |
// chprintf(chp, "CALIBRATION_CHECK: %d\n", global.stateTracker[CALIBRATION_CHECK]);
|
|
956 |
// chprintf(chp, "DEVIATION_CORRECTION: %d\n", global.stateTracker[DEVIATION_CORRECTION]);
|
|
957 |
// chprintf(chp, "DOCKING_ERROR: %d\n", global.stateTracker[DOCKING_ERROR]);
|
|
958 |
// chprintf(chp, "REVERSE_TIMEOUT_ERROR: %d\n", global.stateTracker[REVERSE_TIMEOUT_ERROR]);
|
|
959 |
// chprintf(chp, "CALIBRATION_ERROR: %d\n", global.stateTracker[CALIBRATION_ERROR]);
|
|
960 |
// chprintf(chp, "WHITE_DETECTION_ERROR: %d\n", global.stateTracker[WHITE_DETECTION_ERROR]);
|
|
961 |
// chprintf(chp, "PROXY_DETECTION_ERROR: %d\n", global.stateTracker[PROXY_DETECTION_ERROR]);
|
|
962 |
// chprintf(chp, "NO_CHARGING_POWER_ERROR: %d\n", global.stateTracker[NO_CHARGING_POWER_ERROR]);
|
|
963 |
// chprintf(chp, "UNKNOWN_STATE_ERROR: %d\n", global.stateTracker[UNKNOWN_STATE_ERROR]);
|
|
964 |
|
|
965 |
// for (int i=0; i<24;i++){
|
|
966 |
// global.stateTracker[i] = 0;
|
|
967 |
|
|
968 |
// }
|
|
917 |
uint8_t IDLE = 0; |
|
918 |
uint8_t FOLLOW_LINE = 1; |
|
919 |
uint8_t DETECT_STATION = 2; |
|
920 |
uint8_t REVERSE = 3; |
|
921 |
uint8_t PUSH_BACK = 4; |
|
922 |
uint8_t CHECK_POSITIONING = 5; |
|
923 |
uint8_t CHECK_VOLTAGE = 6; |
|
924 |
uint8_t CHARGING = 7; |
|
925 |
uint8_t RELEASE = 8; |
|
926 |
uint8_t RELEASE_TO_CORRECT = 9; |
|
927 |
uint8_t CORRECT_POSITIONING = 10; |
|
928 |
uint8_t TURN = 12; |
|
929 |
uint8_t INACTIVE = 13; |
|
930 |
uint8_t CALIBRATION = 14; |
|
931 |
uint8_t CALIBRATION_CHECK = 15; |
|
932 |
uint8_t DEVIATION_CORRECTION = 16; |
|
933 |
uint8_t DOCKING_ERROR = 16+1; |
|
934 |
uint8_t REVERSE_TIMEOUT_ERROR = 16+2; |
|
935 |
uint8_t CALIBRATION_ERROR = 16+3; |
|
936 |
uint8_t WHITE_DETECTION_ERROR = 16+4; |
|
937 |
uint8_t PROXY_DETECTION_ERROR = 16+5; |
|
938 |
uint8_t NO_CHARGING_POWER_ERROR = 16+6; |
|
939 |
uint8_t UNKNOWN_STATE_ERROR = 16+7; |
|
940 |
|
|
941 |
chprintf(chp, "IDLE: %d\n", global.stateTracker[IDLE]); |
|
942 |
chprintf(chp, "FOLLOW_LINE: %d\n", global.stateTracker[FOLLOW_LINE]); |
|
943 |
chprintf(chp, "DETECT_STATION: %d\n", global.stateTracker[DETECT_STATION]); |
|
944 |
chprintf(chp, "REVERSE: %d\n", global.stateTracker[REVERSE]); |
|
945 |
chprintf(chp, "PUSH_BACK: %d\n", global.stateTracker[PUSH_BACK]); |
|
946 |
chprintf(chp, "CHECK_POSITIONING: %d\n", global.stateTracker[CHECK_POSITIONING]); |
|
947 |
chprintf(chp, "CHECK_VOLTAGE: %d\n", global.stateTracker[CHECK_VOLTAGE]); |
|
948 |
chprintf(chp, "CHARGING: %d\n", global.stateTracker[CHARGING]); |
|
949 |
chprintf(chp, "RELEASE: %d\n", global.stateTracker[RELEASE]); |
|
950 |
chprintf(chp, "RELEASE_TO_CORRECT: %d\n", global.stateTracker[RELEASE_TO_CORRECT]); |
|
951 |
chprintf(chp, "CORRECT_POSITIONING: %d\n", global.stateTracker[CORRECT_POSITIONING]); |
|
952 |
chprintf(chp, "TURN: %d\n", global.stateTracker[TURN]); |
|
953 |
chprintf(chp, "INACTIVE: %d\n", global.stateTracker[INACTIVE]); |
|
954 |
chprintf(chp, "CALIBRATION: %d\n", global.stateTracker[CALIBRATION]); |
|
955 |
chprintf(chp, "CALIBRATION_CHECK: %d\n", global.stateTracker[CALIBRATION_CHECK]); |
|
956 |
chprintf(chp, "DEVIATION_CORRECTION: %d\n", global.stateTracker[DEVIATION_CORRECTION]); |
|
957 |
chprintf(chp, "DOCKING_ERROR: %d\n", global.stateTracker[DOCKING_ERROR]); |
|
958 |
chprintf(chp, "REVERSE_TIMEOUT_ERROR: %d\n", global.stateTracker[REVERSE_TIMEOUT_ERROR]); |
|
959 |
chprintf(chp, "CALIBRATION_ERROR: %d\n", global.stateTracker[CALIBRATION_ERROR]); |
|
960 |
chprintf(chp, "WHITE_DETECTION_ERROR: %d\n", global.stateTracker[WHITE_DETECTION_ERROR]); |
|
961 |
chprintf(chp, "PROXY_DETECTION_ERROR: %d\n", global.stateTracker[PROXY_DETECTION_ERROR]); |
|
962 |
chprintf(chp, "NO_CHARGING_POWER_ERROR: %d\n", global.stateTracker[NO_CHARGING_POWER_ERROR]); |
|
963 |
chprintf(chp, "UNKNOWN_STATE_ERROR: %d\n", global.stateTracker[UNKNOWN_STATE_ERROR]); |
|
964 |
|
|
965 |
for (int i=0; i<24;i++){ |
|
966 |
global.stateTracker[i] = 0; |
|
967 |
|
|
968 |
} |
|
969 | 969 |
} |
970 | 970 |
|
971 | 971 |
|
devices/DiWheelDrive/userthread.cpp | ||
---|---|---|
723 | 723 |
break; |
724 | 724 |
// --------------------------------------- |
725 | 725 |
case states::RELEASE: |
726 |
|
|
726 | 727 |
if (global.forwardSpeed != DETECTION_SPEED){ |
727 | 728 |
global.rpmForward[0] = DETECTION_SPEED; |
728 | 729 |
} |
... | ... | |
781 | 782 |
break; |
782 | 783 |
// --------------------------------------- |
783 | 784 |
case states::TEST_MAP_STATE:{ |
784 |
/* Test suit for amiro map */
|
|
785 |
// Test suit for amiro map
|
|
785 | 786 |
|
786 | 787 |
|
787 | 788 |
setAttributes(global.testmap, 0, 1, 2, 1); |
... | ... | |
790 | 791 |
setAttributes(global.testmap, 3, 0, 0, 0xff); |
791 | 792 |
// AmiroMap map = AmiroMap(&global); |
792 | 793 |
|
793 |
// // --------------------------------------------------
|
|
794 |
// -------------------------------------------------- |
|
794 | 795 |
|
795 | 796 |
global.tcase = 0; |
796 | 797 |
map.initialize(); |
... | ... | |
839 | 840 |
break; |
840 | 841 |
} |
841 | 842 |
|
843 |
// In case a new state is set: |
|
844 |
// 1. Record the state transition |
|
842 | 845 |
if (currentState != newState){ |
846 |
|
|
847 |
global.stateTransitionCounter++; |
|
848 |
// Clear all state transitions to prevent overflow |
|
849 |
if (global.stateTransitionCounter >= 255) { |
|
850 |
global.stateTransitionCounter = 0; |
|
851 |
for (int i = 0; i < 24; i++) { |
|
852 |
global.stateTracker[i] = 0; |
|
853 |
} |
|
854 |
} |
|
855 |
// Transmit the new state over can |
|
843 | 856 |
chprintf((BaseSequentialStream*)&global.sercanmux1, "Transmit state %d\n", newState); |
844 | 857 |
global.robot.transmitState(newState); |
845 |
// if (newState == states::IDLE) |
|
846 |
// {global.stateTracker[states::IDLE] += 1;} |
|
847 |
// else if (newState == states::FOLLOW_LINE) |
|
848 |
// {global.stateTracker[states::FOLLOW_LINE] += 1;} |
|
849 |
// else if (newState == states::DETECT_STATION) |
|
850 |
// {global.stateTracker[states::DETECT_STATION] += 1;} |
|
851 |
// else if (newState == states::REVERSE) |
|
852 |
// {global.stateTracker[states::REVERSE] += 1;} |
|
853 |
// else if (newState == states::PUSH_BACK) |
|
854 |
// {global.stateTracker[states::PUSH_BACK] += 1;} |
|
855 |
// else if (newState == states::CHECK_POSITIONING) |
|
856 |
// {global.stateTracker[states::CHECK_POSITIONING] += 1;} |
|
857 |
// else if (newState == states::CHECK_VOLTAGE) |
|
858 |
// {global.stateTracker[states::CHECK_VOLTAGE] += 1;} |
|
859 |
// else if (newState == states::CHARGING) |
|
860 |
// {global.stateTracker[states::CHARGING] += 1;} |
|
861 |
// else if (newState == states::RELEASE) |
|
862 |
// {global.stateTracker[states::RELEASE] += 1;} |
|
863 |
// else if (newState == states::RELEASE_TO_CORRECT) |
|
864 |
// {global.stateTracker[states::RELEASE_TO_CORRECT] += 1;} |
|
865 |
// else if (newState == states::CORRECT_POSITIONING) |
|
866 |
// {global.stateTracker[states::CORRECT_POSITIONING] += 1;} |
|
867 |
// else if (newState == states::TURN) |
|
868 |
// {global.stateTracker[states::TURN] += 1;} |
|
869 |
// else if (newState == states::INACTIVE) |
|
870 |
// {global.stateTracker[states::INACTIVE] += 1;} |
|
871 |
// else if (newState == states::CALIBRATION) |
|
872 |
// {global.stateTracker[states::CALIBRATION] += 1;} |
|
873 |
// else if (newState == states::CALIBRATION_CHECK) |
|
874 |
// {global.stateTracker[states::CALIBRATION_CHECK] += 1;} |
|
875 |
// else if (newState == states::DEVIATION_CORRECTION) |
|
876 |
// {global.stateTracker[states::DEVIATION_CORRECTION] += 1;} |
|
877 |
// else if (newState == states::DOCKING_ERROR) |
|
878 |
// {global.stateTracker[16+(-states::DOCKING_ERROR)] += 1;} |
|
879 |
// else if (newState == states::REVERSE_TIMEOUT_ERROR) |
|
880 |
// {global.stateTracker[16+(-states::REVERSE_TIMEOUT_ERROR)] += 1;} |
|
881 |
// else if (newState == states::CALIBRATION_ERROR) |
|
882 |
// {global.stateTracker[16+(-states::CALIBRATION_ERROR)] += 1;} |
|
883 |
// else if (newState == states::WHITE_DETECTION_ERROR) |
|
884 |
// {global.stateTracker[16+(-states::WHITE_DETECTION_ERROR)] += 1;} |
|
885 |
// else if (newState == states::PROXY_DETECTION_ERROR) |
|
886 |
// {global.stateTracker[16+(-states::PROXY_DETECTION_ERROR)] += 1;} |
|
887 |
// else if (newState == states::NO_CHARGING_POWER_ERROR) |
|
888 |
// {global.stateTracker[16+(-states::NO_CHARGING_POWER_ERROR)] += 1;} |
|
889 |
// else if (newState == states::UNKNOWN_STATE_ERROR) |
|
890 |
// {global.stateTracker[16+(-states::UNKNOWN_STATE_ERROR)] += 1;} |
|
858 |
|
|
859 |
// Increase state count for specific state |
|
860 |
// TODO: Improve with dictionary or other than switch case |
|
861 |
if (newState == states::IDLE) |
|
862 |
{global.stateTracker[states::IDLE] += 1;} |
|
863 |
else if (newState == states::FOLLOW_LINE) |
|
864 |
{global.stateTracker[states::FOLLOW_LINE] += 1;} |
|
865 |
else if (newState == states::DETECT_STATION) |
|
866 |
{global.stateTracker[states::DETECT_STATION] += 1;} |
|
867 |
else if (newState == states::REVERSE) |
|
868 |
{global.stateTracker[states::REVERSE] += 1;} |
|
869 |
else if (newState == states::PUSH_BACK) |
|
870 |
{global.stateTracker[states::PUSH_BACK] += 1;} |
|
871 |
else if (newState == states::CHECK_POSITIONING) |
|
872 |
{global.stateTracker[states::CHECK_POSITIONING] += 1;} |
|
873 |
else if (newState == states::CHECK_VOLTAGE) |
|
874 |
{global.stateTracker[states::CHECK_VOLTAGE] += 1;} |
|
875 |
else if (newState == states::CHARGING) |
|
876 |
{global.stateTracker[states::CHARGING] += 1;} |
|
877 |
else if (newState == states::RELEASE) |
|
878 |
{global.stateTracker[states::RELEASE] += 1;} |
|
879 |
else if (newState == states::RELEASE_TO_CORRECT) |
|
880 |
{global.stateTracker[states::RELEASE_TO_CORRECT] += 1;} |
|
881 |
else if (newState == states::CORRECT_POSITIONING) |
|
882 |
{global.stateTracker[states::CORRECT_POSITIONING] += 1;} |
|
883 |
else if (newState == states::TURN) |
|
884 |
{global.stateTracker[states::TURN] += 1;} |
|
885 |
else if (newState == states::INACTIVE) |
|
886 |
{global.stateTracker[states::INACTIVE] += 1;} |
|
887 |
else if (newState == states::CALIBRATION) |
|
888 |
{global.stateTracker[states::CALIBRATION] += 1;} |
|
889 |
else if (newState == states::CALIBRATION_CHECK) |
|
890 |
{global.stateTracker[states::CALIBRATION_CHECK] += 1;} |
|
891 |
else if (newState == states::DEVIATION_CORRECTION) |
|
892 |
{global.stateTracker[states::DEVIATION_CORRECTION] += 1;} |
|
893 |
else if (newState == states::DOCKING_ERROR) |
|
894 |
{global.stateTracker[16+(-states::DOCKING_ERROR)] += 1;} |
|
895 |
else if (newState == states::REVERSE_TIMEOUT_ERROR) |
|
896 |
{global.stateTracker[16+(-states::REVERSE_TIMEOUT_ERROR)] += 1;} |
|
897 |
else if (newState == states::CALIBRATION_ERROR) |
|
898 |
{global.stateTracker[16+(-states::CALIBRATION_ERROR)] += 1;} |
|
899 |
else if (newState == states::WHITE_DETECTION_ERROR) |
|
900 |
{global.stateTracker[16+(-states::WHITE_DETECTION_ERROR)] += 1;} |
|
901 |
else if (newState == states::PROXY_DETECTION_ERROR) |
|
902 |
{global.stateTracker[16+(-states::PROXY_DETECTION_ERROR)] += 1;} |
|
903 |
else if (newState == states::NO_CHARGING_POWER_ERROR) |
|
904 |
{global.stateTracker[16+(-states::NO_CHARGING_POWER_ERROR)] += 1;} |
|
905 |
else if (newState == states::UNKNOWN_STATE_ERROR) |
|
906 |
{global.stateTracker[16+(-states::UNKNOWN_STATE_ERROR)] += 1;} |
|
891 | 907 |
} |
908 |
|
|
909 |
// Keep track of last state and set the new state for next iteration |
|
892 | 910 |
prevState = currentState; |
893 | 911 |
currentState = newState; |
894 | 912 |
|
Also available in: Unified diff