本帖最后由 cll826 于 2018-8-12 10:28 编辑
树莓派小车
这里给大家带来一个借助角蜂鸟实现的基于物体识别控制的树莓派小车。 硬件清单参考如下:
构思
在角蜂鸟内置的模型中,为我们提供了 Mobilenet-SSD 模型,我们将使用这个模型实现物体检测的功能。大概的处理逻辑如下:
具体实现
首先我们需要将小车组装起来,虽然购买到的树莓派小车的可能不同,但组装过程大同小异,实际上都是通过 GPIO控制驱动板,进而控制电机转动。
安装好小车、固定好角蜂鸟之后,就可以配置树莓派以及 SungemSDK 的运行环境了。树莓派的图形界面不太友好,本着要优雅的原则,可以使用 pycharm 进行远程开发调试,具体配置过程可询问谷哥和度娘。
这里需要说明的是,树莓派的USB接口有电流限制,最高只能达到600mA,可能当多个IO输出的时候,会造成工作不稳定。这里可以考虑为USB提供额外的供电,飞根线或者采用外源HUB。
主要流程实现直接上代码: - #!/usr/bin/env python3
- # coding=utf-8
- import sys
- sys.path.append("../../SungemSDK-Python")
- import hsapi as hs
- import drive
- from video import VideoProcessor
- def process(ret):
- bicycles = [x for x in ret[1] if x[0] in {1}] # 1 bicycle
- if len(bicycles) > 0: # 当检测到自行车时
- bike = bicycles[0]
- x_mid = (bike[2] + bike[4]) / 2 / ret[0].shape[1]
- if x_mid < 0.4: # 目标在左前方
- return drive.Direction.left
- elif x_mid > 0.6: # 目标在右前方
- return drive.Direction.right
- else: # 目标在正前方
- return drive.Direction.up
- else:
- return drive.Direction.stop
- if __name__ == '__main__':
- t_driver = drive.DriveThread() # 小车驱动线程
- t_video = VideoProcessor(("192.168.50.201", 10700)) # socket线程传输视频到远端
- try:
- net = hs.HS('ObjectDetector', zoom=True, verbose=0, threshSSD=0.2,
- graphFolder="../../SungemSDK-Python/examples/graphs/")
- t_driver.start()
- t_video.start()
- while True:
- result = net.run() # 读取角蜂鸟返回的结果
- t_driver.direction = process(result)
- image = net.plotSSD(result)
- if t_video.has_client():
- t_video.input_queue.put(image) # 传输视频到远端
- finally:
- drive.cleanup()
复制代码
展示
当检测到目标物体(自行车)时,根据目标物体在视野中的位置,驱动小车发生移动。
产品购买链接:https://www.cirmall.com/shop/?c=products&a=view&id=5113
|