今年6月份时做了一份关于小车远程控制的教程,放在book.52robot.org上面。然后在我们的52Robot社区QQ群里面,有朋友想在小车的基础上实现远程监控。正好最近有时间,就把之前的小车代码进行了更新,让其实现远程监控。
我们先看下客户端效果图:
客户端实现原理
-
小车服务端启动一个capture的线程,它负责每隔0.1s将摄像头的快照放到redis缓存里面。
-
服务端里面加入一个新的路由 /video_feed,当客户端通过http协议访问此连接,服务端会将redis里面的摄像头快照返回给客户端。
-
ionic编写的客户端里面用js写了一个轮询的定时器,每隔0.1s去向服务端的/video_feed请求图片。
难点和新功能
现在回头看上面的这些感觉很容易,但是我在实际写代码的过程还是遇到了不少难点,下面总结下:
-
摄像头调用:最初没用redis去做缓存,每次服务端被请求数据,都会去请求摄像头读取快照。这种设计发现会造成延迟大,而且频率高的情况下,由于http是异步的,会造成多个线程同时调用摄像头设备,从而造成阻塞。
-
ionic内图片的更新:由于地址是固定的,在ionic的js里面写好代码后进行测试时,发现图片是无法更新的,一直使用的最初的第一张图片。后来通过Google在stackoverflow.com上面找到答案,那就是在图片地址后面加个时间戳参数,这样就不会触发ionic的本地缓存机制了。
小车的下一步改造
大家看上图会发现有个自动避章功能,这个最初是我用声波测距模块通过硬编码,让小车发现左前方和右前方的障碍物距离实现避章。下一阶段的目标是通过人为操作小车采集测距模块的数据,然后交由机器学习的程序让小车实现自动避章。
项目地址
关注我们了解更多原创文章
网友评论