人工智能神经网络与深度学习:原理、实践与挑战
立即解锁
发布时间: 2025-08-29 10:15:23 阅读量: 7 订阅数: 12 AIGC 

# 人工智能神经网络与深度学习:原理、实践与挑战
## 1. 霍普菲尔德网络与大脑映射
霍普菲尔德网络与人类大脑存在显著的相似性。人类大脑的特定区域负责特定行为,如视觉、语言和运动。同样,霍普菲尔德网络的加权矩阵中的某些区域或元素集与机器人的特定行为、功能或感官输入相关。将这些功能和感官输入映射到加权矩阵上,具有提高计算效率的实际用途。例如,在实现与寻光目标直接相关的电机控制功能时,仅涉及电机控制向量 v5 和 v6,只需进行 8 次元素乘法和求和,而无需处理完整的 36 元素矩阵。
此外,还可以针对特定矩阵值进行更改,以增强或减弱感官效果或电机控制激活。但这样做可能导致矩阵不稳定,甚至无法达到平衡。不过,通过运行程序可以轻松重构整个加权矩阵。
使用部分霍普菲尔德网络类似于人类大脑中风后的情况。大脑的某些区域受损,但随着时间的推移,患者可以通过治疗和康复恢复一些失去的功能,因为部分大脑网络仍然可行并能够执行这些功能。
## 2. 光强度传感器
使用光电池(也称为硫化镉(CdS)光敏电阻)来测量光强度。光电池是一种依赖光的电阻器,其电阻与照射其有源表面的光强度直接相关。为了产生电流和光电池两端的电压降,需要向光电池和外部电阻施加电压。
MCP3008 ADC 测量的电压是 10K 欧姆串联电阻上的压降,该电压通过另一个分压器减半,以不超过 ADC 的 3.3V 最大输入电压限制。ADC 测量的绝对电压并不重要,只需进行相对电压比较,以判断机器人是接近还是远离光源。需要确保所有测量电压位于 ADC 中值附近,以避免饱和或截止。
使用与节能项目中相同的 MCP3008 电路,不同的是,这次 ADC 测量的是与照射光电池的光强度相关的电压。MCP3008 使用 SPI 总线与树莓派通信,需要在树莓派启动时启用该总线。
## 3. 寻光机器人汽车的 Python 控制脚本
控制程序名为 lightSeeker.py,它使用了 annRobot.py 代码的大部分内容,并添加了 MCP3008 接口代码和一个处理光传感器的新模块。由于机器人的主要目标是寻找光源而不是避障,因此删除了所有随机抽取代码。
以下是代码示例:
```python
import RPi.GPIO as GPIO
import time
from random import randint
import numpy as np
# next two libraries must be installed IAW appendix
instructions
import Adafruit_GPIO.SPI as SPI
import Adafruit_MCP3008
global pwmL, pwmR, mcp
lightOld = 0
hysteresis = 2
# Hardware SPI configuration:
SPI_PORT = 0
SPI_DEVICE = 0
mcp = Adafruit_MCP3008.MCP3008(spi=SPI.SpiDev(SPI_PORT,
SPI_DEVICE))
threshold = 25.4
# use the BCM pin numbers
GPIO.setmode(GPIO.BCM)
# setup the motor control pins
GPIO.setup(18, GPIO.OUT)
GPIO.setup(19, GPIO.OUT)
pwmL = GPIO.PWM(18,20) # pin 18 is left wheel pwm
pwmR = GPIO.PWM(19,20) # pin 19 is right wheel pwm
# must 'start' the motors with 0 rotation speeds
pwmL.start(2.8)
pwmR.start(2.8)
# ultrasonic sensor pins
TRIG1 = 23 # an output
ECHO1 = 24 # an input
TRIG2 = 25 # an output
ECHO2 = 27 # an input
# set the output pins
GPIO.setup(TRIG1, GPIO.OUT)
GPIO.setup(TRIG2, GPIO.OUT)
# set the input pins
GPIO.setup(ECHO1, GPIO.IN)
GPIO.setup(ECHO2, GPIO.IN)
# initialize sensors
GPIO.output(TRIG1, GPIO.LOW)
GPIO.output(TRIG2, GPIO.LOW)
time.sleep(1)
# The following matrix elements are all that are needed
# (and a bit more) to implement the motor control function.
# Read the brain mapping section to see why this is true.
m25 = 2
m26 = -2
m27 = 4
m28 = -8
m29 = 10
m30 = -4
m31 = 0
m32 = 0
m33 = -10
m34 = 2
m35 = -4
m36 = 10
# robotAction module
def robotAction(select):
global pwmL, pwmR
if select == 0: # drive straight
pwmL.ChangeDutyCycle(3.6)
pwmR.ChangeDutyCycle(2.2)
elif select == 1: # turn left
pwmL.ChangeDutyCycle(2.4)
pwmR.ChangeDutyCycle(2.8)
elif select == 2: # turn right
pwmL.ChangeDutyCycle(2.8)
pwmR.ChangeDutyCycle(3.4)
elif select == 3: # stop
pwmL.ChangeDutyCycle(2.8)
pwmR.ChangeDutyCycle(2.8)
# forever loop
while True:
# light sensor readings
# acquire new reading
lightNew = mcp.read_adc(0)
v7 = 0
# debug
print 'lightNew = ',lightNew, ' lightOld = ',lightOld
# determine if moving toward or away from light source
if lightNew > (lightOld+hysteresis):
# moving toward the ligh
```
0
0
复制全文
相关推荐





