小車的控制最主要有兩方面的控制,乙個是小車的前後左右的運動控制,乙個是攝像頭的拍攝、上下左右轉運的控制。
複製**
#-- coding:utf-8 --
import rpi.gpio as gpio
import time
#小車電機引腳定義
leftin1 = 20
leftin2 = 21
leftspeed = 16
rightin1 = 19
rightin2 = 26
rightspeed = 13
#設定gpio口為bcm編碼方式
gpio.setmode(gpio.bcm)
#忽略警告資訊
gpio.setwarnings(false)
#電機引腳初始化操作
def car_init():
global pwm_leftspeed
global pwm_rightspeed
global delaytime
gpio.setup(leftspeed,gpio.out,initial=gpio.low)
gpio.setup(leftin1,gpio.out,initial=gpio.low)
gpio.setup(leftin2,gpio.out,initial=gpio.low)
gpio.setup(rightspeed,gpio.out,initial=gpio.low)
gpio.setup(rightin1,gpio.out,initial=gpio.low)
gpio.setup(rightin2,gpio.out,initial=gpio.low)
#設定pwm引腳和頻率為2000hz
pwm_leftspeed = gpio.pwm(leftspeed, 2000)
pwm_rightspeed = gpio.pwm(rightspeed, 2000)
pwm_leftspeed.start(0)
pwm_rightspeed.start(0)
#小車前進
def run(delaytime):
gpio.output(leftin1, gpio.high)
gpio.output(leftin2, gpio.low)
gpio.output(rightin1, gpio.high)
gpio.output(rightin2, gpio.low)
pwm_leftspeed.changedutycycle(80)
pwm_rightspeed.changedutycycle(80)
time.sleep(delaytime)
#小車後退
def back(delaytime):
gpio.output(leftin1, gpio.low)
gpio.output(leftin2, gpio.high)
gpio.output(rightin1, gpio.low)
gpio.output(rightin2, gpio.high)
pwm_leftspeed.changedutycycle(80)
pwm_rightspeed.changedutycycle(80)
time.sleep(delaytime)
#小車左轉
def left(delaytime):
gpio.output(leftin1, gpio.low)
gpio.output(leftin2, gpio.low)
gpio.output(rightin1, gpio.high)
gpio.output(rightin2, gpio.low)
pwm_leftspeed.changedutycycle(80)
pwm_rightspeed.changedutycycle(80)
time.sleep(delaytime)
#小車右轉
def right(delaytime):
gpio.output(leftin1, gpio.high)
gpio.output(leftin2, gpio.low)
gpio.output(rightin1, gpio.low)
gpio.output(rightin2, gpio.low)
pwm_leftspeed.changedutycycle(80)
pwm_rightspeed.changedutycycle(80)
time.sleep(delaytime)
#小車原地左轉
def spin_left(delaytime):
gpio.output(leftin1, gpio.low)
gpio.output(leftin2, gpio.high)
gpio.output(rightin1, gpio.high)
gpio.output(rightin2, gpio.low)
pwm_leftspeed.changedutycycle(80)
pwm_rightspeed.changedutycycle(80)
time.sleep(delaytime)
#小車原地右轉
def spin_right(delaytime):
gpio.output(leftin1, gpio.high)
gpio.output(leftin2, gpio.low)
gpio.output(rightin1, gpio.low)
gpio.output(rightin2, gpio.high)
pwm_leftspeed.changedutycycle(80)
pwm_rightspeed.changedutycycle(80)
time.sleep(delaytime)
#小車停止
def brake(delaytime):
gpio.output(leftin1, gpio.low)
gpio.output(leftin2, gpio.low)
gpio.output(rightin1, gpio.low)
gpio.output(rightin2, gpio.low)
pwm_leftspeed.changedutycycle(80)
pwm_rightspeed.changedutycycle(80)
time.sleep(delaytime)
複製**
攝像頭控制有兩部分,一是拍攝、二是雲台轉動。
攝像頭的拍攝:拍攝部分,我使用的是mjpg-streamer,這個工具可以把小車上的攝像頭當作遠端攝像頭(web camera)使用,安裝的方式也很簡單:
複製**
#安裝必要的庫
sudo apt-get update
sudo apt-get install libjpeg8-dev
sudo apt-get install imagemagick
sudo apt-get install libv4l-dev
sudo apt-get autoremove cmake
sudo apt-get install cmake
複製**
通過以上操作,就可以啟動攝像頭了:
#執行mjpg-streamer
攝像頭啟動後,可以在區域網內的任何一台電腦上使用瀏覽器輸入:http://樹莓派ip:8080/?action=stream 即可看到攝像頭拍到的畫面。
雲台控制:雲台的主是對控制上下和左右的兩舵機進行編碼控制:
複製**
import rpi.gpio as gpio
import time
import pygame
#舵機引腳定義
servoupdownpin = 9
servoleftrightpin = 11
#設定gpio口為bcm編碼方式
gpio.setmode(gpio.bcm)
#忽略警告資訊
gpio.setwarnings(false)
#初始化上下左右角度為90度
servoleftrightpos = 90
servoupdownpos = 90
def init():
global pwm_updownservo
global pwm_leftrightservo
gpio.setup(servoupdownpin, gpio.out)
gpio.setup(servoleftrightpin, gpio.out)
#設定舵機的頻率和起始占空比
pwm_updownservo = gpio.pwm(servoupdownpin, 50)
pwm_leftrightservo = gpio.pwm(servoleftrightpin, 50)
pwm_updownservo.start(0)
pwm_leftrightservo.start(0)
#舵機停止
def servo_stop():
pwm_leftrightservo.changedutycycle(0) #歸零訊號
pwm_updownservo.changedutycycle(0) #歸零訊號
龍華大道1號
樹莓派 4 尋跡小車
學習的時候百分之99參考了這篇文章 yzy 1996 方法 樹莓派小車自動循跡 攝像頭 具體內容都在裡面了,因為我用的是l298n電機驅動模組,所以是用enab來控制pwm的,所以適當更改一下 因為我是在辦公室地面,不像他一樣有顏色清楚的軌道,所以修改了二值化型別和腐蝕膨脹的順序係數 import ...
人工智慧 樹莓派小車(4) 通過語音玩轉智慧型小車
核心 完整 系列教程 content u 雲端下發directive s directive content content裡即為我們要讀取的命令資料,是一種類json格式,所以有兩種辦法將資料讀取出來。1.採用json的字典格式 import json with open out.json a a...
樹莓派 wifi小車製作(1)獲取手柄遙感輸入
這部分主要是通過某些模組獲取控制資訊,輸入單獨寫乙個模組,以後想要調整成其他的裝置只需要單獨改一下這部分的 哦 目前模仿我這個小車前提要求要有個手柄233 這部分主要是使用了pygame裡面的joystick模組 joystick的學習教程 使用joystick簡化只保留搖桿操作 最後貼上我新增的小...