本文章用于记录和整理本鼠鼠在学习智能小车中学到的芝士和经验。
注:关于镜像刷入和树莓派镜像资源请看我的这篇文章:https://hash070.top/raspberry-image-flush.html
小车初始化
我用的是Raspbot视觉基础小车的第三方镜像,用的其他镜像的不用在意这两个步骤,资源链接如下
链接:https://pan.baidu.com/s/1dVcEgVg5-Q4Mr-Rxt_82wg?pwd=8888
提取码:8888
第一步:关闭主程序(可能是会影响使用)
ps -ef|grep raspbot.pyc
#找到这个程序的pid然后关闭
打开JypterLab运行程序
在浏览器中输入
[ip]:8888
#登录密码yahboom
小车马达操控
舵机控制机制分析
这个是小车运动代码
#!/usr/bin/env python
# coding=UTF-8
import RPi.GPIO as GPIO
import time
PWMA = 18
AIN1 = 22
AIN2 = 27
PWMB = 23
BIN1 = 25
BIN2 = 24
def t_up(speed,t_time):
L_Motor.ChangeDutyCycle(speed)
GPIO.output(AIN2,False)#AIN2
GPIO.output(AIN1,True) #AIN1
#up
R_Motor.ChangeDutyCycle(speed)
GPIO.output(BIN2,False)#BIN2
GPIO.output(BIN1,True) #BIN1
time.sleep(t_time)
def t_stop(t_time):
L_Motor.ChangeDutyCycle(0)
GPIO.output(AIN2,False)#AIN2
GPIO.output(AIN1,False) #AIN1
#stop
R_Motor.ChangeDutyCycle(0)
GPIO.output(BIN2,False)#BIN2
GPIO.output(BIN1,False) #BIN1
time.sleep(t_time)
def t_down(speed,t_time):
L_Motor.ChangeDutyCycle(speed)
GPIO.output(AIN2,True)#AIN2
GPIO.output(AIN1,False) #AIN1
R_Motor.ChangeDutyCycle(speed)
GPIO.output(BIN2,True)#BIN2
GPIO.output(BIN1,False) #BIN1
time.sleep(t_time)
def t_left(speed,t_time):
L_Motor.ChangeDutyCycle(speed)
GPIO.output(AIN2,True) #AIN2
GPIO.output(AIN1,False) #AIN1
R_Motor.ChangeDutyCycle(speed)
GPIO.output(BIN2,False)#BIN2
GPIO.output(BIN1,True) #BIN1
time.sleep(t_time)
def t_right(speed,t_time):
L_Motor.ChangeDutyCycle(speed)
GPIO.output(AIN2,False)#AIN2
GPIO.output(AIN1,True) #AIN1
R_Motor.ChangeDutyCycle(speed)
GPIO.output(BIN2,True)#BIN2
GPIO.output(BIN1,False) #BIN1
time.sleep(t_time)
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(AIN2,GPIO.OUT)
GPIO.setup(AIN1,GPIO.OUT)
GPIO.setup(PWMA,GPIO.OUT)
GPIO.setup(BIN1,GPIO.OUT)
GPIO.setup(BIN2,GPIO.OUT)
GPIO.setup(PWMB,GPIO.OUT)
L_Motor= GPIO.PWM(PWMA,100)
L_Motor.start(0)
R_Motor = GPIO.PWM(PWMB,100)
R_Motor.start(0)
#控制模块开始
try:
while True:
t_up(50,3)
t_down(50,3)
t_left(50,3)
t_right(50,3)
t_stop(3)
except KeyboardInterrupt:
GPIO.cleanup()
根据分析,这里的PWMA/B分别指的是左右两边轮子的速度,A/BIN分别控制左右两侧的电机的运动方向,即分别控制左右马达是前进还是后退。
下图归纳总结了A/BIN的状态和运动方向的关系(对号=True;叉叉=False)
Socket远程控制
关于PythonSocket网络编程的文章:
https://hash070.top/python-socket.html
学习Python网络编程语法后写出来的小车控制程序
https://hash070.top/rasp-with-tcp.html
获取树莓派摄像头实时视频流
如何获取树莓派的摄像头的实时视频流:
https://hash070.top/mjpg-streamer.html