赞
踩
原理:
之前在教程(一)中我们讨论了制作无人驾驶小车的方案,结论是当小车采集到图片之后,通过网络传给笔记本,然后笔记本通过深度学习推理,得出结果,反馈给小车。但是目前通过一些优秀的开源库,将cnn网络优化之后在手机或者树莓派这样的终端上面也有比较好的效果。所以这里真正开始实践的时候,我采用了树莓派的方式,摒弃了笔记本,直接通过树莓派进行图片的采集和深度学习推理,并实时的控制小车的运动。这样的话极大的扩展了无人驾驶小车的便携性。那么重新梳理一下我们无人驾驶小车的原理。
第一步:搭建一个带有摄像头功能的小车
第二步:使用手机或者电脑等进行手动遥控,在手动遥控的过程中,小车自动保存图像和指令
第三步:将小车保存的大量图像和指令导出到电脑上,使用深度学习网络进行训练
第四步:将训练好的深度学习网络导出到小车上,小车就可以实现无人驾驶了
小车搭建:
这里使用最普通的四驱亚克力小车底盘 树莓派3B+ 云台 摄像头 电压转换板 锂电池组装一辆小车。如下图所示:
编写代码:
首先需要编写小车端的代码(树莓派3B+上的程序)以及电脑端的控制程序
以上程序会开源上传到GITHUB上面。随后会贴出链接。
下面介绍一下程序的主题逻辑
RaspberryCar(小车端程序)
from socket import *
from tcp_package import TcpPackage
from car_control import *
HOST = '' #监听地址
PORT = 60000 #监听端口
ADDRESS = (HOST, PORT)
def recv_data(socket):
data = socket.recv(8)
if data:
package_recv = TcpPackage(data)
cmd, value = package_recv.get_package()
return cmd, value
else:
return None, None
def send_data(socket, cmd, value):
package_send = TcpPackage()
package_send.add_package(cmd, value)
socket.send(package_send.package)
if __name__ == "__main__":
car_init()
print("car init.")
tcp_server_socket = socket(AF_INET, SOCK_STREAM)
tcp_server_socket.bind(ADDRESS)
tcp_server_socket.listen(1)
print("start server...")
try:
while True:
print('waitint for client...')
client_socket, client_address = tcp_server_socket.accept()
try:
while True:
cmd, value = recv_data(client_socket)
print("recv cmd:%d value:%d"%(cmd, value))
if cmd <= 4:
car_moving(cmd, value)
send_data(client_socket, cmd, value)
pass
else:
pass
finally:
client_socket.close()
finally:
tcp_server_socket.close()
car_uninit()
效果展示:
手动控制小车
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。