从零开始做一架智能小车

故事上这样开始的…….由于我在深圳工作,家在广州,回家陪家里人的机会就少,总有一种想法,做一部带摄像头的wifi遥控车,在深圳也可以看到陪着老妈子做饭。
出于个人的兴趣爱好(就是爱瞎折腾),上年开始就又打算了解一下硬件相关知识,由于半路入行,走了很多弯路,期间心酸值得回味。。。就先记录一下我这部小车子的整个制作过程。
在淘宝上搜索了一些关于智能小车的店铺,找到了一个比较便宜的小车套件,教程说明相对比较完善,就拿下了。
淘宝地址是 http://item.taobao.com/item.htm?spm=a1z09.2.9.71.Fg16EI&id=15891886317
这个小车相对功能比较多(寻迹,超声波避障,红外避障,蓝牙遥控,红外遥控,但其实对我来说都说用来学习传感器的使用,其实真正的用处不大)是用51单片机控制的。刚刚开始上手拼接起来有点难度,需要反复的对照电路图。这个只要稍微有点耐心应该能做得出来的,因为都有教程。成品如下:2.pic_hd
刚做完这个车子后初步对超声波,红外线,直流电机,舵机,蓝牙的使用有了了解,大概都是些vcc gnd 和gpio口的连接,难点在51单片机的代码编写。
虽然这个车是做出来了,能做到红外线和蓝牙遥控了,可是依然没有解决两个问题:
1:我在深圳遥控广州家里的小车(需要wifi遥控)
2:没有摄像头 (51单片机似乎很难找到摄像头而且还能用wifi传输图像的)
 
为了解决这个问题,我采用树莓派作为我的主控制中心,成品如下:
3.pic_hd
这个树莓派究竟是什么东西?我这里就不细讲了,我通常跟别人解释就是一台可以控制外部电路的超级微型电脑。
要用这个树莓派做控制的好处是
1.我能在华强北随便买一个摄像头插上去都能用
2.能够插入无线网卡,自由连接互联网
3.linux系统,入门门槛低
 
这个树莓派其实就是个linux系统,特别之处是提供了一排GPIO接口,利用这些接口可以实现与外部世界的IO连接。
树莓派控制直流电机这个在网上有很多教程,主要是利用树莓派的gpio库,这里是用python写的
import RPi.GPIO
import time
RPi.GPIO.setmode(RPi.GPIO.BOARD)  #GPIO.BOARD GPIO.BCM分别表示IO口的标号方式
RPi.GPIO.setup(12,RPi.GPIO.OUT)
RPi.GPIO.setup(11,RPi.GPIO.IN)
RPi.GPIO.output(12,GPIO.HIGH)
 
车子的摄像头是用一个云台支撑的,能够左右上下转动(看起来特别叼炸天),云台上面有两个舵机,控制舵机的关键是如果控制旋转角度,一个叫pwn的冲脉控制方案,具体这个pwn其实也不是很了解,大概是按照电压的高低和间隔的差别来控制舵机的,之前有记录一篇文章说树莓派是怎么控制舵机的

树莓派控制云台按角度转动


 
另外一个是网络连接的问题,网上提供的教程都是直接把树莓当作服务器作为控制,也就是如果我在公网控制家里的内网的小车就比较麻烦。我画了一个图可以这样理解6C220E80-8657-4456-A7FF-17CEADDF983A
 
我这里用的是阿里云,做服务器,这样就能处理好公网访问的问题,就是多了个中转服务器,因此车子反应时间也会慢一些(后来发现这种稍微慢几百毫秒的速度根本不能接受)。
 
接下来一个难题是视频怎么传输,由于之前做过类似电视直播这样的事情,把同样的方法用到这个小车上面。其实就是在阿里云上面架设一个流媒体服务器 一个叫 “simple-rtmp-server”
https://github.com/winlinvip/simple-rtmp-server 的服务器,用来接收来自小车的视频流,小车那端直接用ffmpeg 这个命令用来发送视频到服务器。
 
后来我发现家里的adsl网络上传速度最高只是50kb/s,用来上传视频的速度被全部占据流,导致我发送控制指令的延迟严重还经常掉线,看来玩这个车子还是要很高速的网络才行。
 

发表评论