EdgeBroad(智能车) 功能部件 调试功能 过程汇总(包括 主要代码,环境,背景等 )

首先总框(图片很全,来自 博客47991812):

EdgeBroad(智能车) 功能部件 调试功能 过程汇总(包括 主要代码,环境,背景等 )

目录

目录 3

  1. 系统搭建 1

2.界面设计 8

  1. 功能和代码 16

3.1. 智能小车的电机驱动 16

3.1.1. 功能简介 16

3.1.2. 操作截图 17

3.1.3. 代码说明 17

3.2. 摄像头的使用,以及舵机与摄像头平台的转动 24

3.2.1. 功能简介 24

3.2.2. 操作截图 25

3.2.3. 代码说明 29

3.3. 蓝牙通信控制驱动 40

3.3.1. 功能简介 40

3.3.2. 操作截图 40

3.3.3. 代码说明 41

3.4. 蓝牙通信控制舵机 57

3.4.1. 功能简介 57

3.4.2. 操作截图 57

3.4.3. 代码说明 58

3.5. USB摄像头捕获道路图片同时获取方向信息 74

3.5.1. 功能简介 74

3.5.2. 操作截图 75

3.5.3. 代码说明 75

3.6. 根据超声波传感器距离调整 92

3.6.1. 功能简介 92

3.6.2. 操作截图 93

3.6.3. 代码说明 96

3.7. edgeboardAI 小车驱动实现 118

3.7.1. 功能简介 118

3.7.2. 操作截图 118

3.7.3. 代码说明 120

3.8. 基于edgeboardAI和WOBOT超声波微调 131

3.8.1. 功能简介 131

3.8.2. 操作截图 132

3.8.3. 代码说明 132

3.9. edgeboardAI 小车展旗,放粮架主要代码 151

3.9.1. 功能简介 151

3.9.2. 操作截图 151

3.9.3. 代码说明 152

3.10. 基于多个舵机的抓机的实现,以及1,2两块电机板驱动对于上层AI的调用接口实现 155

3.10.1. 功能简介 155

3.10.2. 操作截图 155

3.10.3. 代码说明 155

1.系统搭建

针对树莓派平台的系统的制作、驱动程序安装、各种软件的安装和配置(Qt、SSH、VNC等),详细撰写,相当于一个指南,其他人按照这个指南,就可以一步一步在空白的树莓派上把所有环境安装配置好。

0.搭建树梅派Linux系统,基于SD卡安装Ubuntu系统

1.点击 Software

2.Raspberry PI OS

3.下拉 根据 系统 选择 为选择的 是第二个

4.安装拷贝 工具

拷贝成功,将SD卡放回树莓派接口,

接入PC显示器/LCD屏等测试

启动 并 初始化 树莓派系统,为下载编译等环境做准备

1.Linux安装ssh使用ssh pi@地址 或者 putty工具进行SSH连接

2.需要用到树莓派操作系统,并且安装编译环境.py以及gpio库模板sudo pip install rpi.gpio

sudo apt-get update

sudo apt-get install -y python3

sudo apt-get install -y libatlas-base-dev

sudo apt-get install -y libjasper-dev

sudo apt-get install -y libqtgui4

用vim编写并.py并用python test.py 测试环境

3.安装socat和minicom和hterm模拟程序的通讯。

sudo apt-get install socat

sudo apt-get install minicom

下载hterm源码编译,./hterm运行

4.安装python带的蓝牙通信模块

pip install pybluez

导入模板import bluetooth

5.安装pygame手柄控制(360无线)

sudo apt-get install joystick

ls /dev/input/

jstest /dev/input/js0

然后调试手柄通信,

或者c语言版控制

gcc Xbox_Joystick.c -o Xbox_Joystick

sudo ./Xbox_Joystick

6.树莓派GPIO库安装

1)编译环境(python)

先安装python

sudo apt-get install python-dev

然后pip安装依赖

pip install RPi.GPIO

pip install spidev

2)然后安装I2C和UART接口库

sudo apt install python-smbus

sudo apt install python-serial

7.c语言给python写接口

gcc -fPIC -shared func.c -o libfunc.so 编译成动态库

Python test.py 运行调用c接口的函数测试

8.树莓派 USB摄像头 网络监控环境

1.确认设备

lsusb -> ls /dev 找到video0(或者有类似的设备)

2.安装MJPG-Streamer

先安装cmake环境:

sudo apt-get install cmake libjpeg8-dev

让后 拷贝源码

git clone https://e.coding.net/fivecc/mjpg-streamer/mjpg-streamer.git

或者

wget https://github.com/Five-great/mjpg-streamer/archive/master.zip

然后进入有cmake的目录:

执行 make

以及 sudo make install

再测试:

1)首先创建 该摄像头的 输出 以及 端口号(这里 是 8080):

/usr/local/bin/mjpg_streamer -i “/usr/local/lib/mjpg-streamer/input_uvc.so -n -f 30 -r 1280×720” -o “/usr/local/lib/mjpg-streamer/output_http.so -p 8080 -w /usr/local/share/mjpg-streamer/ww

2)然后使用javastrip地址(http://

或者编写 .html文件(后面有该编码)

9.树莓派 自启动程序

Nuhup查看是否有

如有没有安装

然后使用命令

nohup python test.py > pomelo.js.log &

将test.py挂到后台运行

然后将该命令放在 /etc目录下

rc.local文件中 即sudo vim rc.local(因为是系统文件 需要权限)

10.scrot屏幕截图

1.安装

sudo apt-get install scrot

2.查看scrot -v

3使用scrot -s(选择区域截图)

11.wobot以及edgeboardAI和STM32的连接

在固件按最上面到下面依次WOBOT和edgeboardAI,STM的顺序依次连接好的基础上。

1.双头USB线连接edgeboardAI的USB接口

2.绿色的电源线一端连接STM一段连接edgeboardAI的电源线

3.然后个驱动马达和传感器通过网络数据线连接WOBOT的M1~M4和P1~P4

4.连接好后STM32和WOBOT都需要接通圆孔电源线,其中STM32给edgeboardAI供电,wobot通过自己的电源线供电。

5.如果需要远程,则将STM32电源线换成2500MA的电池,将WOBOT换成800MA+的电池。

2.界面设计

实际的界面截图,标出各控件的名称

Jacvstrip地址

Html 语言 firefox web.html 获知谷歌 chromium-browser web.html

Web.html 文件

3.功能和代码

3.1.智能小车的电机驱动

3.1.1.功能简介

驱动 小车 前进 后退 左转 右转 左上走 右上走等:

前进和后退,左右两边的方向都朝前或朝后,速度一致;

原地顺时针旋转时,左边轮子前进,右边轮子后退,速度一致;

原地逆时针旋转时,左边轮子后退,右边轮子前进,速度一致;

偏左前进时,左右两边的方向都朝前,左轮速度比右轮速度慢一点;

偏右前进时,左右两边的方向都朝前,左轮速度比右轮速度快一点;

偏左后退时,左右两边的方向都朝后,左轮速度比右轮速度慢一点;

偏右后退时,左右两边的方向都朝后,左轮速度比右轮速度快一点;

3.1.2.操作截图

3.1.3.代码说明

初始化代码

– coding:UTF-8 –

import RPi.GPIO as GPIO

import time

小车电机引脚定义

IN1 = 20

IN2 = 21

IN3 = 19

IN4 = 26

ENA = 16

ENB = 13

设置GPIO口为BCM编码方式

GPIO.setmode(GPIO.BCM)

忽略警告信息

GPIO.setwarnings(False)

电机引脚初始化操作

def motor_init():

global pwm_ENA

global pwm_ENB

GPIO.setup(ENA,GPIO.OUT,initial=GPIO.HIGH)

GPIO.setup(IN1,GPIO.OUT,initial=GPIO.LOW)

GPIO.setup(IN2,GPIO.OUT,initial=GPIO.LOW)

GPIO.setup(ENB,GPIO.OUT,initial=GPIO.HIGH)

GPIO.setup(IN3,GPIO.OUT,initial=GPIO.LOW)

GPIO.setup(IN4,GPIO.OUT,initial=GPIO.LOW)

设置pwm引脚和频率为2000hz

pwm_ENA = GPIO.PWM(ENA, 2000)

pwm_ENB = GPIO.PWM(ENB, 2000)

控制驱动代码

小车前进

def run():

GPIO.output(IN1, GPIO.HIGH)

GPIO.output(IN2, GPIO.LOW)

GPIO.output(IN3, GPIO.HIGH)

GPIO.output(IN4, GPIO.LOW)

pwm_ENA.ChangeDutyCycle(CarSpeedControl)

pwm_ENB.ChangeDutyCycle(CarSpeedControl)

小车后退

def back():

GPIO.output(IN1, GPIO.LOW)

GPIO.output(IN2, GPIO.HIGH)

GPIO.output(IN3, GPIO.LOW)

GPIO.output(IN4, GPIO.HIGH)

pwm_ENA.ChangeDutyCycle(CarSpeedControl)

pwm_ENB.ChangeDutyCycle(CarSpeedControl)

小车左转

def left():

GPIO.output(IN1, GPIO.LOW)

GPIO.output(IN2, GPIO.LOW)

GPIO.output(IN3, GPIO.HIGH)

GPIO.output(IN4, GPIO.LOW)

pwm_ENA.ChangeDutyCycle(CarSpeedControl)

pwm_ENB.ChangeDutyCycle(CarSpeedControl)

小车右转

def right():

GPIO.output(IN1, GPIO.HIGH)

GPIO.output(IN2, GPIO.LOW)

GPIO.output(IN3, GPIO.LOW)

GPIO.output(IN4, GPIO.LOW)

pwm_ENA.ChangeDutyCycle(CarSpeedControl)

pwm_ENB.ChangeDutyCycle(CarSpeedControl)

小车原地左转

def spin_left():

GPIO.output(IN1, GPIO.LOW)

GPIO.output(IN2, GPIO.HIGH)

GPIO.output(IN3, GPIO.HIGH)

GPIO.output(IN4, GPIO.LOW)

pwm_ENA.ChangeDutyCycle(CarSpeedControl)

pwm_ENB.ChangeDutyCycle(CarSpeedControl)

小车原地右转

def spin_right():

GPIO.output(IN1, GPIO.HIGH)

GPIO.output(IN2, GPIO.LOW)

GPIO.output(IN3, GPIO.LOW)

GPIO.output(IN4, GPIO.HIGH)

pwm_ENA.ChangeDutyCycle(CarSpeedControl)

pwm_ENB.ChangeDutyCycle(CarSpeedControl)

小车沿左前轮前进

def upleft():

GPIO.output(IN1, GPIO.HIGH)

GPIO.output(IN2, GPIO.LOW)

GPIO.output(IN3, GPIO.HIGH)

GPIO.output(IN4, GPIO.LOW)

pwm_ENA.ChangeDutyCycle(CarSpeedControl-20)

pwm_ENB.ChangeDutyCycle(CarSpeedControl+20)

小车沿左后方后退

def downleft():

GPIO.output(IN1, GPIO.LOW)

GPIO.output(IN2, GPIO.HIGH)

GPIO.output(IN3, GPIO.LOW)

GPIO.output(IN4, GPIO.HIGH)

pwm_ENA.ChangeDutyCycle(CarSpeedControl-20)

pwm_ENB.ChangeDutyCycle(CarSpeedControl+20)

小车沿右上方前进

def upright():

GPIO.output(IN1, GPIO.HIGH)

GPIO.output(IN2, GPIO.LOW)

GPIO.output(IN3, GPIO.HIGH)

GPIO.output(IN4, GPIO.LOW)

pwm_ENA.ChangeDutyCycle(CarSpeedControl+20)

pwm_ENB.ChangeDutyCycle(CarSpeedControl-20)

小车沿右下方后退

def downright():

GPIO.output(IN1, GPIO.LOW)

GPIO.output(IN2, GPIO.HIGH)

GPIO.output(IN3, GPIO.LOW)

GPIO.output(IN4, GPIO.HIGH)

pwm_ENA.ChangeDutyCycle(CarSpeedControl+20)

pwm_ENB.ChangeDutyCycle(CarSpeedControl-20)

小车停止

def brake():

GPIO.output(IN1, GPIO.LOW)

GPIO.output(IN2, GPIO.LOW)

GPIO.output(IN3, GPIO.LOW)

GPIO.output(IN4, GPIO.LOW)0

time.sleep(2)

try/except语句用来检测try语句块中的错误

从而让except语句捕捉异常信息并处理

try:

motor_init()

while True:

run()

except KeyboardInterrupt:

pass

pwm_ENA.stop()

pwm_ENB.stop()

GPIO.cleanup()

3.2.摄像头的使用,以及舵机与摄像头平台的转动

3.2.1.功能简介

1.USB摄像头

初始化摄像头

USB摄像头工作时,读取一帧图像

显示图像窗口在树莓派的屏幕上

或用命令行在 web 网页上显示 摄像图像

2.舵机的控制

调整舵机PWM的占空比,将占空比的改变变成

具体角度的变化

或用命令行在 web 网页上显示 摄像图像

3.2.2.操作截图

代码方式

运行代码截图

Web方式 MJPG-Streamer

实时视频接收

启用树梅派摄像

*.html web启用

javascript地址模式

3.2.3.代码说明

列出主要的源码,对重要语句用文字注释

1舵机的控制

– coding:UTF-8 –

舵机转动控制舵机采用系统的pwm库 对占空比进行更改

import RPi.GPIO as GPIO

import time

RGB三色灯引脚定义

LED_R = 22

LED_G = 27

LED_B = 24

舵机引脚定义

ServoPin = 11

设置GPIO口为BCM编码方式

GPIO.setmode(GPIO.BCM)

忽略警告信息

GPIO.setwarnings(False)

RGB三色灯初始化为输出模式

舵机引脚设置为输出模式

def init():

global pwm_servo

GPIO.setup(LED_R, GPIO.OUT)

GPIO.setup(LED_G, GPIO.OUT)

GPIO.setup(LED_B, GPIO.OUT)

GPIO.setup(ServoPin, GPIO.OUT)

设置pwm引脚和频率为50hz

pwm_servo = GPIO.PWM(ServoPin, 50)

pwm_servo.start(0)

根据转动的角度来点亮相应的颜色

def corlor_light(pos):

if pos > 150:

GPIO.output(LED_R, GPIO.HIGH)

GPIO.output(LED_G, GPIO.LOW)

GPIO.output(LED_B, GPIO.LOW)

elif pos > 125:

GPIO.output(LED_R, GPIO.LOW)

GPIO.output(LED_G, GPIO.HIGH)

GPIO.output(LED_B, GPIO.LOW)

elif pos >100:

GPIO.output(LED_R, GPIO.LOW)

GPIO.output(LED_G, GPIO.LOW)

GPIO.output(LED_B, GPIO.HIGH)

elif pos > 75:

GPIO.output(LED_R, GPIO.HIGH)

GPIO.output(LED_G, GPIO.HIGH)

GPIO.output(LED_B, GPIO.LOW)

elif pos > 50:

GPIO.output(LED_R, GPIO.LOW)

GPIO.output(LED_G, GPIO.HIGH)

GPIO.output(LED_B, GPIO.HIGH)

elif pos > 25:

GPIO.output(LED_R, GPIO.HIGH)

GPIO.output(LED_G, GPIO.LOW)

GPIO.output(LED_B, GPIO.HIGH)

elif pos > 0:

GPIO.output(LED_R, GPIO.HIGH)

GPIO.output(LED_G, GPIO.HIGH)

GPIO.output(LED_B, GPIO.HIGH)

else :

GPIO.output(LED_R, GPIO.LOW)

GPIO.output(LED_G, GPIO.LOW)

GPIO.output(LED_B, GPIO.LOW)

舵机来回转动

def servo_control_color():

for pos in range(181):

pwm_servo.ChangeDutyCycle(2.5 + 10 * pos/180)

corlor_light(pos)

time.sleep(0.009)

for pos in reversed(range(181)):

pwm_servo.ChangeDutyCycle(2.5 + 10 * pos/180)

corlor_light(pos)

time.sleep(0.009)

延时2s

time.sleep(2)

try/except语句用来检测try语句块中的错误,

从而让except语句捕获异常信息并处理。

try:

init()

舵机初始化向前

pwm_servo.ChangeDutyCycle(2.5 + 10 * 90/180)

while True:

servo_control_color()

except KeyboardInterrupt:

pass

pwm_servo.stop()

GPIO.cleanup()

2 打开usb摄像头读取帧照片

import CV2

import matplotlib.pyplot as plt

opencv调用csi摄像头优先0,然后usb按顺序排列下去

capture = CV2.VideoCapture(0)

获取一帧

ret, frame = capture.read()

plt.imshow(frame[:,:,::-1])#BGRtoRGB

plt.show()

释放资源

capture.release()

除了程序打开

还可以使用 命令行,打开USB摄像头进行录制和拍摄

cd mjpg-streamer-master/mjpg-streamer-experimental(切换到树莓派上 摄像头软件目录)

./mjpg_stream -i “./input_uvc.so” -o “./output_http.so -w ./www”(命令启动 usb摄像头 这里实例 主要用了USB摄像头 没有用 树莓派摄像头)

或者 ./start.sh(bash 命令快捷启动)

注意开启后 保持终端 防止 摄像头中断

实现视频接受 html

3.3.蓝牙通信控制驱动

3.3.1.功能简介

简要说明该功能

1.蓝牙通信控制驱动

获取手柄传入的蓝牙信息,

调整案件和左边转轴的范围

,根据获取到的案件信息调取对应的驱动功能

按键

(-1,0)向左

(1,0)右

(0,-1)上

(0,1)下

左右转轴

Axi1 axi2 axi3 axi4 axi5

测试

3.3.2.操作截图

该功能的操作截图

3.3.3.代码说明

列出主要的源码,对重要语句用文字注释

自己添加功能章节

– coding:UTF-8 –

import RPi.GPIO as GPIO

import time

import spidev

import pygame

手柄按键定义

PSB_forward = 1

PSB_back = 2

PSB_Right = 3

PSB_left = 4

PSB_stop = 5

PS2引脚设置

回发过来的后4个数据是摇杆的数据

小车运行状态值定义

enSTOP = 0

enRUN =1

enBACK = 2

enLEFT = 3

enRIGHT = 4

enTLEFT =5

enTRIGHT = 6

enUPLEFT = 7

enUPRIGHT = 8

enDOWNLEFT = 9

enDOWNRIGHT = 10

小车电机引脚定义

IN1 = 20

IN2 = 21

IN3 = 19

IN4 = 26

ENA = 16

ENB = 13

舵机引脚定义

ServoPin = 11

蜂鸣器引脚定义

buzzer = 8

灭火电机引脚设置

OutfirePin = 2

RGB三色灯引脚定义

LED_R = 22

LED_G = 27

LED_B = 24

小车速度变量

CarSpeedControl = 50

小车舵机状态变量

g_ServoState = 0

设置GPIO口为BCM编码方式

GPIO.setmode(GPIO.BCM)

忽略警告信息

GPIO.setwarnings(False)

电机引脚初始化为输出模式

RGB三色灯,舵机引脚初始化

def init():

global pwm_ENA

global pwm_ENB

global pwm_servo

global pwm_rled

global pwm_gled

global pwm_bled

GPIO.setup(ENA,GPIO.OUT,initial=GPIO.HIGH)

GPIO.setup(IN1,GPIO.OUT,initial=GPIO.LOW)

GPIO.setup(IN2,GPIO.OUT,initial=GPIO.LOW)

GPIO.setup(ENB,GPIO.OUT,initial=GPIO.HIGH)

Original: https://blog.csdn.net/qq_47991812/article/details/119279440
Author: AlexCookie
Title: EdgeBroad(智能车) 功能部件 调试功能 过程汇总(包括 主要代码,环境,背景等 )

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/782727/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球