使用樹莓派製作智慧型小車

2021-10-24 16:40:20 字數 4830 閱讀 2957

小車的控制最主要有兩方面的控制,乙個是小車的前後左右的運動控制,乙個是攝像頭的拍攝、上下左右轉運的控制。

複製**

#-- 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簡化只保留搖桿操作 最後貼上我新增的小...