关于代码
emmm,这里只包含了控制代码
获取摄像头的数据可以通过之前的网络摄像头搭建完成,那个还是挺全面的,我就不在这里明抄了
代码源码,一个C币带走
关于价格
其实我也不知道C币有什么用,因为作为白嫖党我一般遇到要花钱的基本就直接走人
但是理论上来说,按照我对我自己的了解,如果把我的树莓派系列的从头读到尾的人,应该不需要从这里花钱要代码?
关于这个系列
重要提示!!如果从你头读到尾,但是发现依然有缺少的地方,请在评论区留言让我知道或者私信我
我个人是非常倾向于 能把我的树莓派wifi小车系列 从头读到尾 ,就能把代码在小车上跑起来的做法,但我不清楚我的系列是否能够真的达成这个目标,所以这需要读者们你们的提醒
如果有缺斤少两,欢迎留言提醒,我看情况会将对应的内容补充
目录
0.树莓派 wifi小车制作(0)总览
1.树莓派 wifi小车制作(1)获取手柄按键输入
2. 树莓派 wifi小车制作(2)搭建网络摄像头
3.树莓派 wifi小车制作(3)小车移动控制模块
4.树莓派wifi小车制作(4)舵机云台控制
5.树莓派 wifi小车制作(5)socket通讯连接PC与树莓派
当然,你如果说有的代码只控制了两个舵机,但是你要我提供三个舵机的控制代码之类的问题……我……只能说你去研究下单个舵机云台是怎么控制的去吧
我总不能来个人就提供份三个舵机,四个舵机……N个舵机吧?
是吧?
代码
电脑端
只需要运行socket_client.py的文件
嘛,几个需要import的的环境自己安装
电脑端需要修改的就是树莓派的ip地址了,要是找不到ip地址……那我也没办法了
电脑端两个文件,一个开线程获取手柄输入的文件,一个发送信息的文件
from socket import *
import time
import test_shoubing_noclass
#下面的ip地址要改!!!!!!!!!!!!!!!!!!!!!!!
HOST = '192.168.0.106' # or 'localhost'
#上面的ip地址要改!!!!!!!!!!!!!!!!!!!!!!!
PORT = 21567
BUFSIZ =1024
ADDR = (HOST,PORT)
tcpCliSock = socket(AF_INET,SOCK_STREAM)
tcpCliSock.connect(ADDR)
while True:
a=test_shoubing_noclass.get_shoubing_info()
send_str=""
ID=str(1001)
send_str+=ID
for i in a :
send_str+="#"+str(int(i))
send_str+="##"
tcpCliSock.send(send_str.encode())
time.sleep(0.01)
树莓派端
只需要运行socket_server.py文件
理论上看我的文章的人应该都会运行python吧?不会真的有人连运行python都不会就想搞树莓派吧?
不会吧?不会吧?
from socket import *
from time import ctime
import car_control
import time
import MotorHAT.control as duoji
def socket_car_control(arr):
l_speed=arr[1]
r_speed=arr[2]
duoji_parr=arr[3]
duoji_hor=arr[4]
if l_speed>=99:
l_speed=99
if l_speed<=-99:
l_speed=-99
if r_speed>=99:
r_speed=99
if r_speed<=-99:
r_speed=-99
print(arr)
car_control.L_motor_control(l_speed)
car_control.R_motor_control(r_speed)
duoji.camera_move_parral(duoji_parr)
duoji.camera_move_horizontal(duoji_hor)
time.sleep(0.01)
HOST = ''
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST,PORT)
tcpSerSock = socket(AF_INET,SOCK_STREAM)
tcpSerSock.bind(ADDR)
tcpSerSock.listen(5)
while True:
print('waiting for connection...')
tcpCliSock, addr = tcpSerSock.accept()
print('...connnecting from:', addr)
while True:
data = tcpCliSock.recv(BUFSIZ)
if not data:
break
split_data_0=data.decode('utf-8').split("##")
#print('ss==== ',split_data_0)
split_data=split_data_0[0]
split_data=split_data.split("#")
int_split_data=[]
for i in split_data:
if i!='':
int_split_data.append(int(i))
#print(int_split_data)
if int_split_data[0]==1001:
#print(int_split_data)
socket_car_control(int_split_data)
tcpCliSock.close()
car_control.car_stop(10)
死循环读取电脑端传来的tcp报文,通过简单的处理(分隔)后获取对应的控制信息,然后调用对应的控制模块
代码运作的整体思路
控制方法:
首先是输入,我有一个理论上用来打游戏但我是个键鼠党的手柄,通过python的pygame(是这个名字吧?我懒得翻代码了)获取手柄输入
然后通过socket通信,连接上树莓派与电脑
然后通过一定的通信规则,将输入的手柄控制信息传送到树莓派上
然后树莓派通过调用自身的控制代码(预先调试过可行),然后进行控制
杂七杂八的废话
说实话,这个项目完成有一段时间了,但是一直没有发剩下的文章
(自制力不强)
(b站里又都是人才,说话又好听,视频又好看)
(谁要没事干来写文章是吧?)
然后有人私信我,问我舵机云台的教程怎么还没好
(虽然他可能只是伸手,但对我来说有人看我的文章确实蛮……意外的)
(说感动有点过了)
(总归有人在期待我,虽然很大一部分的“期待”是我自己杜撰出来的)
但是完成人啊……要懂得欺骗自己
好,不说废话了,就这样了