Ich arbeite an einem Quadrotor. Ich kenne seine Position - , wohin ich gehen möchte - Zielposition b und berechne daraus einen Vektor c - einen Einheitsvektor, der mich zu meinem Ziel führt:
c = b - a
c = normalize(c)
Da sich ein Quadrotor ohne Drehung in jede Richtung bewegen kann, habe ich versucht, dies zu tun
- um den Gierwinkel des Roboters drehen
- Teilen Sie es in seine Komponenten auf
- Übergeben Sie sie als Roll- und Nickwinkel an den Roboter.
Das Problem ist, dass wenn das Gieren 0 ° ± 5 ist, dies funktioniert, aber wenn das Gieren nahe +90 oder -90 ist, versagt es und lenkt in falsche Richtungen. Meine Frage ist, vermisse ich hier etwas Offensichtliches?
quadcopter
uav
navigation
slam
kinect
computer-vision
algorithm
c++
ransac
mobile-robot
arduino
microcontroller
machine-learning
simulator
rcservo
arduino
software
wifi
c
software
simulator
children
multi-agent
ros
roomba
irobot-create
slam
kalman-filter
control
wiring
routing
motion
kinect
motor
electronics
power
mobile-robot
design
nxt
programming-languages
mindstorms
algorithm
not-exactly-c
nxt
programming-languages
mindstorms
not-exactly-c
raspberry-pi
operating-systems
mobile-robot
robotic-arm
sensors
kinect
nxt
programming-languages
mindstorms
sensors
circuit
motion-planning
algorithm
rrt
theory
design
electronics
accelerometer
calibration
arduino
sensors
accelerometer
Hamza
quelle
quelle
Antworten:
Wenn Sie Ihre Lösung erneut implementieren, erhalten Sie Folgendes:
Winkel zwischen Vektoren
Fahrzeuggierwinkel
Überschrift gegen Gieren
Die 90-Grad-Überlappung zwischen diesen Messungen in Kombination mit dem Addieren (anstatt Subtrahieren) des Fahrzeuggierens vom gewünschten Gieren kann der Grund dafür sein, dass Dinge funktionierten, wenn sich Ihr Ziel innerhalb von ± 5 ° befand und sich bei ± 90 ° schlecht verhielt.
Umstellung auf Komponente X und Y.
PID-Regelung
Sie können am besten mit PID-Regelkreisen für das Rollen und die Neigung des Fahrzeugs bedient werden. Das heißt, sobald Sie Ihren Code repariert haben und in der Lage sind, Ihr Ziel zu treffen, werden Sie wahrscheinlich anfangen, ihn zu überschießen - hin und her oszillieren. Eine korrekt eingestellte PID verhindert dies und ermöglicht es Ihnen, sich dem Ziel schnell zu nähern.
quelle
Ich gehe davon aus, dass Sie hier von einem 3D-Vektor sprechen. Können Sie das einfach so verallgemeinern
normalize()
? Ist es so üblich (ich habe es noch nie gesehen, wenn es so ist, dann Neuigkeiten für mich). Andernfalls treten bei jeder X- und Y-Komponente offensichtliche Probleme mit der Kompassumhüllung auf. Warum nennst du sie nicht Roll und / oder Pitch und / oder Yaw? (Das Mischen der 3D- und 2D-Nomenklatur verwirrt die Frage).Meine 2D-Normalisierung sieht ungefähr so aus.
Wenn es sich tatsächlich um ein Quad handelt, gehe ich davon aus, dass Ihre X- und Y-Komponenten wirklich YAW, Altitude ((X, Y) & Z) sind. Sie müssen das
YAW(X, Y)
in 2D handhaben und einfach die Höhe für Z fallen lassen oder gewinnen (und aus diesem Grund vermute ich, dass Normalisieren mehr ist, als Sie es haben).quelle