Bemerkung
Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Tauchen Sie tiefer ein in die Welt von Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten.
Warum beitreten?
Expertenunterstützung: Lösen Sie Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams.
Lernen & Teilen: Tauschen Sie Tipps und Anleitungen aus, um Ihre Fähigkeiten zu verbessern.
Exklusive Vorschauen: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.
Spezialrabatte: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.
Festliche Aktionen und Gewinnspiele: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.
👉 Sind Sie bereit, mit uns zu erkunden und zu erschaffen? Klicken Sie auf [here] und treten Sie heute bei!
10. Stierkampf
Mache PiCar-X zu einem wütenden Stier! Verwende seine Kamera, um das rote Tuch zu verfolgen und darauf zuzurasen!
Code ausführen
cd ~/picar-x/example
sudo python3 10.bull_fight.py
Das Bild ansehen
Nachdem der Code ausgeführt wurde, zeigt das Terminal folgende Aufforderung an:
No desktop !
* Serving Flask app "vilib.vilib" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://0.0.0.0:9000/ (Press CTRL+C to quit)
Anschließend können Sie http://<Ihre IP>:9000/mjpg im Browser eingeben, um das Videosignal zu sehen, z.B.: https://192.168.18.113:9000/mjpg
Code
Bemerkung
Sie können den untenstehenden Code modifizieren/zurücksetzen/kopieren/ausführen/stoppen. Bevor Sie das tun, sollten Sie zum Quellcodepfad wie picar-x\beispiele gehen. Nachdem Sie den Code modifiziert haben, können Sie ihn direkt ausführen, um die Wirkung zu sehen.
from picarx import Picarx
from time import sleep
from vilib import Vilib
px = Picarx()
def clamp_number(num,a,b):
return max(min(num, max(a, b)), min(a, b))
def main():
Vilib.camera_start()
Vilib.display()
Vilib.color_detect("red")
speed = 50
dir_angle=0
x_angle =0
y_angle =0
while True:
if Vilib.detect_obj_parameter['color_n']!=0:
coordinate_x = Vilib.detect_obj_parameter['color_x']
coordinate_y = Vilib.detect_obj_parameter['color_y']
# change the pan-tilt angle for track the object
x_angle +=(coordinate_x*10/640)-5
x_angle = clamp_number(x_angle,-35,35)
px.set_cam_pan_angle(x_angle)
y_angle -=(coordinate_y*10/480)-5
y_angle = clamp_number(y_angle,-35,35)
px.set_cam_tilt_angle(y_angle)
# move
# The movement direction will change slower than the pan/tilt direction
# change to avoid confusion when the picture changes at high speed.
if dir_angle > x_angle:
dir_angle -= 1
elif dir_angle < x_angle:
dir_angle += 1
px.set_dir_servo_angle(x_angle)
px.forward(speed)
sleep(0.05)
else :
px.forward(0)
sleep(0.05)
if __name__ == "__main__":
try:
main()
finally:
px.stop()
print("stop and exit")
sleep(0.1)
Wie funktioniert des?
Sie sollten auf die folgenden drei Teile dieses Beispiels achten:
Die Hauptfunktion definieren:
Starten Sie die Kamera mit
Vilib.camera_start().Zeigen Sie das Kamera-Feed mit
Vilib.display()an.Aktivieren Sie die Farberkennung und legen Sie die Zielfarbe als „rot“ fest mit
Vilib.color_detect("red").Initialisieren Sie Variablen:
speedfür die Bewegungsgeschwindigkeit des Autos,dir_anglefür den Richtungswinkel der Bewegung des Autos,x_anglefür den Schwenkwinkel der Kamera undy_anglefür den Neigungswinkel der Kamera.
Treten Sie in eine kontinuierliche Schleife (while True), um das rotfarbene Objekt zu verfolgen:
Überprüfen Sie, ob ein rotfarbenes Objekt erkannt wurde (
Vilib.detect_obj_parameter['color_n'] != 0).Wenn ein rotfarbenes Objekt erkannt wird, erhalten Sie dessen Koordinaten (
coordinate_xundcoordinate_y).Berechnen Sie neue Schwenk- und Neigungswinkel (
x_angleundy_angle) basierend auf der Position des erkannten Objekts und passen Sie diese an, um das Objekt zu verfolgen.Begrenzen Sie die Schwenk- und Neigungswinkel innerhalb des festgelegten Bereichs mit der Funktion
clamp_number.Stellen Sie die Schwenk- und Neigungswinkel der Kamera mit
px.set_cam_pan_angle()undpx.set_cam_tilt_angle()ein, um das Objekt im Blick zu behalten.
Steuern Sie die Bewegung des Autos basierend auf dem Unterschied zwischen
dir_angleundx_angle:Wenn
dir_anglegrößer alsx_angleist, verringern Siedir_angleum 1, um den Richtungswinkel allmählich zu ändern.Wenn
dir_anglekleiner alsx_angleist, erhöhen Siedir_angleum 1.Stellen Sie den Lenkservo-Winkel mit
px.set_dir_servo_angle()ein, um die Räder des Autos entsprechend zu steuern.Bewegen Sie das Auto vorwärts mit der festgelegten Geschwindigkeit mit
px.forward(speed).