2021-11-06 20:42:20 索炜达电子 1052
项目编号:E2185
文件大小:93M
源码说明:带中文注释
开发环境:C编译器
简要概述:
设计一种基于机器视觉的仿生机械手。该仿生机械手尝试运用OpenCV图像处理技术预处理摄像头采集到的数据,匹配对应模型实现机械手掌的动作,同时运用多舵机协同控制来提高手掌的可操作性以及灵活性
一、树莓派上的手势分类
首先需安装树莓派官方系统,搭建好opencv和tensorflow开发环境;
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,如果网速可以,直接安装:
sudo pip3 install tensorflow
如若安装失败,则请下载本地安装包,我这使用的是tensorflow-1.13.1-cp37-none-linux_armv7l.whl,在存放这个文件的文件夹下:
sudo pip3 install tensorflow-1.13.1-cp37-none-linux_armv7l.whl
如若报错少了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__)
如果正常打印出版本信息,则安装正确,会有警告,但无妨;
安装完环境后:
---------------------------------------------------------------------------********重点-------------------------------------------------------------------
最好将 树莓派4B上手势识别 这个文件夹重命名为英文,我这命名为:rps ;
在rps文件夹中新建一个文件夹 images。运行cam.py文件,会自动采集照片到images文件夹。文件名为imageX.jpg,其中X为序号。需采集“石头”“剪刀”“布”“干扰手势”,分别保存到“paper”"rock""scissors""others"
model.py: 卷积神经网络模型
read_image.py:将图片读入内存
train.py:训练模型
test.py :测试手势图片识别结果
rps.py:最终完成
test1.py:是一个测试脚本,需首先在当前文件夹中,新建一个文件夹testdata,在此文件夹放置石头剪刀布手势图片各100张,会生成识别结果图。
二、STM32舵机控制
没啥好说的,看原理图,本程序主要产生五路PWM信号控制舵机,并接收串口信息。STM32的基础操作请自行学习。
三、串口通信
采用树莓派的ttyAMA0的串口,但此设备默认给了蓝牙,所以需要改变映射规则,具体操作,请百度。
将 串口通信 文件夹重命名为serial。在serial文件夹中make。会生成libserial.so静态链接库,里面实现了具体的串口通信的方法,源码中有注释。
目录│文件列表:
└ Undergraduate-graduation-project
│ h5py-2.7.1-cp37-cp37m-linux_armv7l.whl
│ tensorflow-1.13.1-cp37-none-linux_armv7l.whl
├ STM32舵机控制
│ ├ 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