2021-11-06 20:42:20 索煒達(dá)電子 1050
項(xiàng)目編號:E2185
文件大?。?3M
源碼說明:帶中文注釋
開發(fā)環(huán)境:C編譯器
簡要概述:
設(shè)計(jì)一種基于機(jī)器視覺的仿生機(jī)械手。該仿生機(jī)械手嘗試運(yùn)用OpenCV圖像處理技術(shù)預(yù)處理攝像頭采集到的數(shù)據(jù),匹配對應(yīng)模型實(shí)現(xiàn)機(jī)械手掌的動作,同時(shí)運(yùn)用多舵機(jī)協(xié)同控制來提高手掌的可操作性以及靈活性
一、樹莓派上的手勢分類
首先需安裝樹莓派官方系統(tǒng),搭建好opencv和tensorflow開發(fā)環(huán)境;
opencv安裝方法請參考:https://blog.csdn.net/leaves_joe/article/details/67656340?utm_source=app
tensorflow安裝方法:
首先安裝pip3。
sudo apt-get install python3-dev
sudo apt-get install python-dev
查看python3的版本:
python3 -v
一般樹莓派4使用的是python3.7,如果網(wǎng)速可以,直接安裝:
sudo pip3 install tensorflow
如若安裝失敗,則請下載本地安裝包,我這使用的是tensorflow-1.13.1-cp37-none-linux_armv7l.whl,在存放這個(gè)文件的文件夾下:
sudo pip3 install tensorflow-1.13.1-cp37-none-linux_armv7l.whl
如若報(bào)錯(cuò)少了h5py,則請下載h5py-2.7.1-cp37-cp37m-linux_armv7l.whl,先安裝h5py,再安裝tensorflow:
sudo pip3 install h5py-2.7.1-cp37-cp37m-linux_armv7l.whl
在安裝完opencv和tensorflow后在終端輸入python3后,鍵入:
import cv2
import tensorflow as tf
print(cv2.__version__)
print(tf.__version__)
如果正常打印出版本信息,則安裝正確,會有警告,但無妨;
安裝完環(huán)境后:
---------------------------------------------------------------------------********重點(diǎn)-------------------------------------------------------------------
最好將 樹莓派4B上手勢識別 這個(gè)文件夾重命名為英文,我這命名為:rps ;
在rps文件夾中新建一個(gè)文件夾 images。運(yùn)行cam.py文件,會自動采集照片到images文件夾。文件名為imageX.jpg,其中X為序號。需采集“石頭”“剪刀”“布”“干擾手勢”,分別保存到“paper”"rock""scissors""others"
model.py: 卷積神經(jīng)網(wǎng)絡(luò)模型
read_image.py:將圖片讀入內(nèi)存
train.py:訓(xùn)練模型
test.py :測試手勢圖片識別結(jié)果
rps.py:最終完成
test1.py:是一個(gè)測試腳本,需首先在當(dāng)前文件夾中,新建一個(gè)文件夾testdata,在此文件夾放置石頭剪刀布手勢圖片各100張,會生成識別結(jié)果圖。
二、STM32舵機(jī)控制
沒啥好說的,看原理圖,本程序主要產(chǎn)生五路PWM信號控制舵機(jī),并接收串口信息。STM32的基礎(chǔ)操作請自行學(xué)習(xí)。
三、串口通信
采用樹莓派的ttyAMA0的串口,但此設(shè)備默認(rèn)給了藍(lán)牙,所以需要改變映射規(guī)則,具體操作,請百度。
將 串口通信 文件夾重命名為serial。在serial文件夾中make。會生成libserial.so靜態(tài)鏈接庫,里面實(shí)現(xiàn)了具體的串口通信的方法,源碼中有注釋。
目錄│文件列表:
└ Undergraduate-graduation-project
│ h5py-2.7.1-cp37-cp37m-linux_armv7l.whl
│ tensorflow-1.13.1-cp37-none-linux_armv7l.whl
├ STM32舵機(jī)控制
│ ├ APP
│ │ │ alldef.h
│ │ │ control.c
│ │ │ control.h
│ │ │ led.c
│ │ │ led.h
│ │ │ pwm.c
│ │ │ pwm.h
│ │ │ tim.c
│ │ │ tim.h
│ │ │ usart.c
│ │ │ usart.h
│ │ └ LobotServoController
│ │ │ bool.h
│ │ │ LobotServoController.c
│ │ └ LobotServoController.h
│ ├ CORE
│ │ │ core_cm3.c
│ │ │ core_cm3.h
│ │ │ startup_stm32f10x_hd.s
│ │ │ system.c
│ │ │ system.h
│ │ │ SysTick.c
│ │ └ SysTick.h
│ ├ OBJ
│ │ │ control.crf
│ │ │ control.d
│ │ │ control.o
│ │ │ core_cm3.crf
│ │ │ core_cm3.d
│ │ │ core_cm3.o
│ │ │ ExtDll.iex
│ │ │ led.crf
│ │ │ led.d
│ │ │ led.o
│ │ │ lobotservocontroller.crf
│ │ │ lobotservocontroller.d
│ │ │ lobotservocontroller.o
│ │ │ main.crf
│ │ │ main.d
│ │ │ main.o
│ │ │ misc.crf
│ │ │ misc.d
│ │ │ misc.o
│ │ │ pwm.crf
│ │ │ pwm.d
│ │ │ pwm.o
│ │ │ startup_stm32f10x_hd.d
│ │ │ startup_stm32f10x_hd.o
│ │ │ stm32f10x_exti.crf
│ │ │ stm32f10x_exti.d
│ │ │ stm32f10x_exti.o
│ │ │ stm32f10x_gpio.crf
│ │ │ stm32f10x_gpio.d
│ │ │ stm32f10x_gpio.o
│ │ │ stm32f10x_it.crf
│ │ │ stm32f10x_it.d
│ │ │ stm32f10x_it.o
│ │ │ stm32f10x_rcc.crf
│ │ │ stm32f10x_rcc.d
│ │ │ stm32f10x_rcc.o
│ │ │ stm32f10x_tim.crf
│ │ │ stm32f10x_tim.d
│ │ │ stm32f10x_tim.o
│ │ │ stm32f10x_usart.crf
│ │ │ stm32f10x_usart.d
│ │ │ stm32f10x_usart.o
│ │ │ system.crf
│ │ │ system.d
│ │ │ system.o
│ │ │ system_stm32f10x.crf
│ │ │ system_stm32f10x.d
│ │ │ system_stm32f10x.o
│ │ │ system_stm32f10x_1.crf
│ │ │ system_stm32f10x_1.d
│ │ │ system_stm32f10x_1.o
│ │ │ systick.crf
│ │ │ systick.d
│ │ │ systick.o
│ │ │ template.axf
│ │ │ template.build_log.htm
│ │ │ template.hex
│ │ │ template.htm
│ │ │ template.lnp
│ │ │ template.sct
│ │ │ template_Target 1.dep
│ │ │ tim.crf
│ │ │ tim.d
│ │ │ tim.o
│ │ │ usart.crf
│ │ │ usart.d
│ │ └ usart.o
│ ├ TM32F10x_FWLib
│ │ ├ inc
│ │ │ │ misc.h
│ │ │ │ stm32f10x_adc.h
│ │ │ │ stm32f10x_bkp.h
│ │ │ │ stm32f10x_can.h
│ │ │ │ stm32f10x_cec.h
│ │ │ │ stm32f10x_crc.h
│ │ │ │ stm32f10x_dac.h
│ │ │ │ stm32f10x_dbgmcu.h
│ │ │ │ stm32f10x_dma.h
│ │ │ │ stm32f10x_exti.h
│ │ │ │ stm32f10x_flash.h
│ │ │ │ stm32f10x_fsmc.h
│ │ │ │ stm32f10x_gpio.h
│ │ │ │ stm32f10x_i2c.h
│ │ │ │ stm32f10x_iwdg.h
│ │ │ │ stm32f10x_pwr.h
│ │ │ │ stm32f10x_rcc.h
│ │ │ │ stm32f10x_rtc.h
│ │ │ │ stm32f10x_sdio.h
│ │ │ │ stm32f10x_spi.h
│ │ │ │ stm32f10x_tim.h
│ │ │ │ stm32f10x_usart.h
│ │ │ └ stm32f10x_wwdg.h
│ │ └ src
│ │ │ misc.c
│ │ │ stm32f10x_adc.c
│ │ │ stm32f10x_bkp.c
│ │ │ stm32f10x_can.c
│ │ │ stm32f10x_cec.c
│ │ │ stm32f10x_crc.c
│ │ │ stm32f10x_dac.c
│ │ │ stm32f10x_dbgmcu.c
│ │ │ stm32f10x_dma.c
│ │ │ stm32f10x_exti.c
│ │ │ stm32f10x_flash.c
│ │ │ stm32f10x_fsmc.c
│ │ │ stm32f10x_gpio.c
│ │ │ stm32f10x_i2c.c
│ │ │ stm32f10x_iwdg.c
│ │ │ stm32f10x_pwr.c
│ │ │ stm32f10x_rcc.c
│ │ │ stm32f10x_rtc.c
│ │ │ stm32f10x_sdio.c
│ │ │ stm32f10x_spi.c
│ │ │ stm32f10x_tim.c
│ │ │ stm32f10x_usart.c
│ │ └ stm32f10x_wwdg.c
│ └ USER
│ │ JLinkLog.txt
│ │ JLinkSettings.ini
│ │ main.c
│ │ stm32f10x.h
│ │ stm32f10x_conf.h
│ │ stm32f10x_it.c
│ │ stm32f10x_it.h
│ │ system_stm32f10x.c
│ │ system_stm32f10x.h
│ │ template.uvguix.zhouzhou
│ │ template.uvoptx
│ │ template.uvprojx
│ └ Listings
│ │ startup_stm32f10x_hd.lst
│ └ template.map
├ 串口通信
│ │ bool.h
│ │ makefile
│ │ serial.c
│ │ serial.h
│ └ ServoController.h
└ 樹莓派4B上手勢識別
│ cam.py
│ model.py
│ read_image.py
│ rps.py
│ test.py
│ test1.py
└ train.py