PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hilfe bei Odometrie



DrBest
17.07.2009, 12:35
Hallo Leute !

Ich glaube, dass bei meinem Asuro die Odometrie nicht funktioniert.

Wenn ich die Go oder Turn Funktionen einsetze, beginnt er die Bewegung hört aber nicht mehr damit auf. Fährt also immer nur in eine Richtung oder dreht sich endlos im Kreis.

Ich habe diesen Code zum Testen ausgeführt:

#include "asuro.h"
#include <string.h>
#include <stdio.h>

int main(void)
{
unsigned int data[200][2];
char c[12];
int i;
Init();

// Motoren auf Vorw�ts
MotorDir(FWD, FWD);
MotorSpeed(160,160);
// Warten, bis Motoren Drehzahl erreicht haben
for (i=0; i<1000; i++) Sleep(72);

// 200 Odometrie-Werte einlesen
for (i=0; i<200; i++) {
OdometrieData(data[i]);
}

MotorSpeed(0,0);

for (i=0; i<200; i++) {
sprintf(c,"%4d\t%4d\n\r",data[i][0],data[i][1]);
SerWrite(c,12);
}


while(1) {
}
return 0;
}

Das Ergebnis war folgendes:
518 753
787 751
783 753
779 752
772 754
770 755
765 757
765 758
761 755
760 756
759 753
764 755
771 756
776 763
784 769
787 776
791 784
793 789
800 799
807 804
816 815
826 822
836 833
847 843
853 855
863 868
870 880
881 895
888 903
898 913
905 919
911 927
918 929
920 933
926 934
926 934
929 937
928 934
929 936
928 933
928 936
931 934
930 936
933 936
932 935
934 936
932 934
933 936
933 934
934 935
937 932
934 933
937 932
934 930
936 931
932 924
932 921
930 913
929 907
927 897
921 889
918 880
909 868
903 858
891 843
883 831
871 814
859 801
848 785
832 773
820 764
804 754
791 748
777 738
767 734
759 728
750 728
743 728
734 728
730 731
724 734
721 743
719 744
718 747
719 742
718 737
722 730
722 726
726 729
727 735
729 745
730 751
731 759
733 763
732 769
734 773
732 778
733 784
733 790
735 800
737 807
742 819
748 829
754 844
764 855
769 869
780 881
788 892
800 902
809 906
820 914
831 916
842 921
855 922
864 926
878 926
886 928
897 932
901 931
908 935
911 934
913 938
916 938
916 942
920 943
920 945
924 948
924 945
927 946
927 942
927 943
928 938
927 937
929 933
928 930
930 927
929 920
931 918
931 909
932 905
932 896
930 889
931 878
926 867
925 857
918 839
914 828
907 813
899 802
892 788
881 777
873 765
859 750
849 740
837 727
829 722
821 720
814 723
810 724
802 726
799 728
794 726
792 730
789 730
789 734
789 733
787 735
788 736
785 738
786 743
784 745
785 752
783 756
783 764
784 770
784 779
788 787
790 797
797 807
801 815
810 826
817 833
826 846
834 856
843 871
852 881
857 894
867 901
875 907
887 914
894 915
905 921
912 920
918 925
924 924
926 926
931 926
931 927
935 928
934 927

Was läuft da falsch? Ich hoffe ihr könnt mir helfen

radbruch
17.07.2009, 13:39
Hallo


Was läuft da falsch? Falsche Rubrik im Forum gewählt, keine Code-Tags verwendet...

Die Werte der Odometrie geben die Helligkeit an mit der die Sensoren beleuchtet werden. Die hellen und dunklen Segmente auf den Codescheiben reflektieren unterschiedlich.

btw: die erste Lesung des ADCs ist offensichtlich Schrott:


Das Ergebnis war folgendes:
518 753
787 751
783 753
779 752
Diesen Effekt kann man bei den Liniensensoren auch feststellen.

Ach ja, fast vergessen: Glückwunsch zum asuro und willkommen im RN-Forum :)

Gruß

mic

DrBest
17.07.2009, 14:20
Sorry, dass es nicht im richtigen Bereich gepostet ist. War keine Absicht.

Das Odometrieverfahren kenne ich. Aber warum fährt er denn endlos ?

Ich habe schon die Schwellenwerte angepasst:

/* Odometrie / Encoder */
/*! Wert, der in der Odometrie ueberschritten werden muss, um zum
weiterzaehlen der Ticks in encoder[] zu fuehren bei aktivierter
Automatik\n
Die Originalwerte (links, rechts) sind \b 160.
Diese Werte sind sehr stark vom Umgebungslicht abhaengig.
Sie MUESSEN GROESSER als die Werte fuer MY_ODO_DARK_VALUE_L sein.
*/
#define MY_ODO_LIGHT_VALUE_L 900 /*!< Encoderschwellwert fuer Hell (linke Seite) */
/*! Wert, der in der Odometrie unterschritten werden muss, um zum
weiterzaehlen der Ticks in encoder[] zu fuehren bei aktivierter
Automatik\n
Die Originalwerte (links, rechts) sind \b 140.
Diese Werte sind sehr stark vom Umgebungslicht abhaengig.
Sie MUESSEN KLEINER als die Werte fuer MY_ODO_LIGHT_VALUE_L sein.
*/
#define MY_ODO_DARK_VALUE_L 800 /*!< Encoderschwellwert fuer Dunkel (linke Seite) */
/*! Wert, der in der Odometrie ueberschritten werden muss, um zum
weiterzaehlen der Ticks in encoder[] zu fuehren bei aktivierter
Automatik\n
Die Originalwerte (links, rechts) sind \b 160.
Diese Werte sind sehr stark vom Umgebungslicht abhaengig.
Sie MUESSEN GROESSER als die Werte fuer MY_ODO_DARK_VALUE_R sein.
*/
#define MY_ODO_LIGHT_VALUE_R 900 /*!< Encoderschwellwert fuer Hell (rechte Seite) */
/*! Wert, der in der Odometrie unterschritten werden muss, um zum
weiterzaehlen der Ticks in encoder[] zu fuehren bei aktivierter
Automatik\n
Die Originalwerte (links, rechts) sind \b 140.
Diese Werte sind sehr stark vom Umgebungslicht abhaengig.
Sie MUESSEN KLEINER als die Werte fuer MY_ODO_LIGHT_VALUE_R sein.
*/
#define MY_ODO_DARK_VALUE_R 800 /*!< Encoderschwellwert fuer Dunkel (rechte Seite) */

Bei über 900 oder unter 800 müsste der Asuro ja nun einen Wechsel von schwarz nach weiß oder umgekehrt feststellen können.

Also wo liegt das Problem ? Ich komme nicht weiter...