paddy
Active member
Hallo,
für meinen Mower basierend auf ROS habe ich mich am Perimeter Code von Azurit bedient. Als Sender kommt der normale Sender Code zum Einsatz. Als Empfänger dient ein Arduino Nano, der mit zwei Spulen ausgestattet ist. Dabei verwende ich die Perimeter Klasse von Azurit und den ADCManager.
Der Sender ist eingestellt auf SIGCODE_1. Wenn ich dies am Empfänger einstelle, werden gute Werte für MAG und SMAG gelesen. Aber es wird nicht erkannt, ob der Mower innerhalb oder außerhalb der Schleife ist. Man kann den Perimeter kreuzen wie man will, es ändern sich nur die MAG/SMAG Werte, aber nicht das Vorzeichen.
Bei den Test Skripten gibt es einen Perimeter Test, der ein anderes Signal verwendet (useDifferentialSignal). Wenn ich dieses Signal in den Empfänger als Protokoll einstelle, wird das Signal vom Typ SIGCODE_1 im Empfänger korrekt erkannt. Werte für MAG und SMAG erscheinen stimmig, der Wechsel zwischen innen / außen wird ebenfalls korrekt erkannt.
Der Sendercode ist so eingestellt
Warum erkennt der Mower dies als SIGCODE_4 (differentialSignal, aber nicht als SIGCODE_1?
Die erste Zeile zeigt das erzeugte Signal vom Sender, die zweite Zeile stellt das Signal dar, mit dem das Signal erfolgreich empfangen wird
Sample Rate vom ADC Manager ist eingestellt auf SRATE_38462.
Wie kann es sein, dass der Mower bei eingestelltem SIGCODE_1 das Signal nicht korrekt empängt, bei dem völlig anderem SIGCODE_4 als Pattern hingegen schon?
Der komplette Code ist hier zu finden https://github.com/HoverMower/ros_hovermower_base_controller
Ich würde mich sehr freuen, wenn jemand mit Kenntnisse zum Perimeter mir dies erklären könnte.
Gruß Patrick
für meinen Mower basierend auf ROS habe ich mich am Perimeter Code von Azurit bedient. Als Sender kommt der normale Sender Code zum Einsatz. Als Empfänger dient ein Arduino Nano, der mit zwei Spulen ausgestattet ist. Dabei verwende ich die Perimeter Klasse von Azurit und den ADCManager.
Der Sender ist eingestellt auf SIGCODE_1. Wenn ich dies am Empfänger einstelle, werden gute Werte für MAG und SMAG gelesen. Aber es wird nicht erkannt, ob der Mower innerhalb oder außerhalb der Schleife ist. Man kann den Perimeter kreuzen wie man will, es ändern sich nur die MAG/SMAG Werte, aber nicht das Vorzeichen.
Bei den Test Skripten gibt es einen Perimeter Test, der ein anderes Signal verwendet (useDifferentialSignal). Wenn ich dieses Signal in den Empfänger als Protokoll einstelle, wird das Signal vom Typ SIGCODE_1 im Empfänger korrekt erkannt. Werte für MAG und SMAG erscheinen stimmig, der Wechsel zwischen innen / außen wird ebenfalls korrekt erkannt.
Der Sendercode ist so eingestellt
Code:
#define SIGCODE_1
...
...
#if defined (SIGCODE_1)
int8_t sigcode[] = { 1, 1,-1,-1, 1,-1, 1,-1,-1,1, -1, 1, 1,-1,-1, 1,-1,-1, 1,-1,-1, 1, 1,-1 };
#elif defined (SIGCODE_2)
int8_t sigcode[] = { 1,-1, 1, 1,-1,-1, 1, 1,-1,-1, 1,-1, 1, 1,-1,-1, 1, 1,-1,-1, 1,-1, 1,-1 };
#elif defined (SIGCODE_3)
int8_t sigcode[] = { 1, 1,-1,-1, 1,-1, 1, 1,-1, 1, 1,-1,-1, 1, 1,-1, 1,-1,-1, 1,-1,-1, 1,-1 };
#endif
Warum erkennt der Mower dies als SIGCODE_4 (differentialSignal, aber nicht als SIGCODE_1?
Code:
#define SIGCODE_4
...
...
...
#if defined (SIGCODE_1)
int8_t sigcode[] = { 1, 1,-1,-1, 1,-1, 1,-1,-1,1, -1, 1, 1,-1,-1, 1,-1,-1, 1,-1,-1, 1, 1,-1 };
#elif defined (SIGCODE_2)
int8_t sigcode[] = { 1,-1, 1, 1,-1,-1, 1, 1,-1,-1, 1,-1, 1, 1,-1,-1, 1, 1,-1,-1, 1,-1, 1,-1 };
#elif defined (SIGCODE_3)
int8_t sigcode[] = { 1, 1,-1,-1, 1,-1, 1, 1,-1, 1, 1,-1,-1, 1, 1,-1, 1,-1,-1, 1,-1,-1, 1,-1 };
#elif defined (SIGCODE_4)
int8_t sigcode[] = { 1,0,-1, 0,1,-1,1,-1, 0,1,-1,1,0,-1, 0,1,-1, 0,1,-1, 0,1,0,-1 };
#endif
Die erste Zeile zeigt das erzeugte Signal vom Sender, die zweite Zeile stellt das Signal dar, mit dem das Signal erfolgreich empfangen wird
Code:
{ 1, 1,-1,-1, 1,-1, 1,-1,-1,1, -1, 1, 1,-1,-1, 1,-1,-1, 1,-1,-1, 1, 1,-1 }
{ 1, 0,-1, 0, 1,-1, 1,-1, 0,1, -1, 1, 0,-1, 0, 1,-1, 0, 1,-1, 0, 1, 0,-1 }
Sample Rate vom ADC Manager ist eingestellt auf SRATE_38462.
Wie kann es sein, dass der Mower bei eingestelltem SIGCODE_1 das Signal nicht korrekt empängt, bei dem völlig anderem SIGCODE_4 als Pattern hingegen schon?
Der komplette Code ist hier zu finden https://github.com/HoverMower/ros_hovermower_base_controller
Ich würde mich sehr freuen, wenn jemand mit Kenntnisse zum Perimeter mir dies erklären könnte.
Gruß Patrick