查看: 2834|回复: 0

角蜂鸟实例教程 > 扩展DIY > 树莓派小车

[复制链接]

该用户从未签到

发表于 2018-8-13 09:17:21 | 显示全部楼层 |阅读模式
分享到:
本帖最后由 cll826 于 2018-8-12 10:28 编辑

树莓派小车

这里给大家带来一个借助角蜂鸟实现的基于物体识别控制的树莓派小车。                        
硬件清单参考如下:                                                               
  • 角蜂鸟
  • 树莓派3b + 小车配件

构思
1.jpg

在角蜂鸟内置的模型中,为我们提供了 Mobilenet-SSD 模型,我们将使用这个模型实现物体检测的功能。大概的处理逻辑如下:

2.jpg

具体实现

首先我们需要将小车组装起来,虽然购买到的树莓派小车的可能不同,但组装过程大同小异,实际上都是通过 GPIO控制驱动板,进而控制电机转动。

安装好小车、固定好角蜂鸟之后,就可以配置树莓派以及 SungemSDK 的运行环境了。树莓派的图形界面不太友好,本着要优雅的原则,可以使用 pycharm 进行远程开发调试,具体配置过程可询问谷哥和度娘。

这里需要说明的是,树莓派的USB接口有电流限制,最高只能达到600mA,可能当多个IO输出的时候,会造成工作不稳定。这里可以考虑为USB提供额外的供电,飞根线或者采用外源HUB。

3.jpg

主要流程实现直接上代码:
  1. #!/usr/bin/env python3
  2. # coding=utf-8

  3. import sys
  4. sys.path.append("../../SungemSDK-Python")
  5. import hsapi as hs
  6. import drive
  7. from video import VideoProcessor


  8. def process(ret):
  9.     bicycles = [x for x in ret[1] if x[0] in {1}]  # 1 bicycle
  10.     if len(bicycles) > 0:  # 当检测到自行车时
  11.         bike = bicycles[0]
  12.         x_mid = (bike[2] + bike[4]) / 2 / ret[0].shape[1]
  13.         if x_mid < 0.4:  # 目标在左前方
  14.             return drive.Direction.left
  15.         elif x_mid > 0.6:  # 目标在右前方
  16.             return drive.Direction.right
  17.         else:  # 目标在正前方
  18.             return drive.Direction.up
  19.     else:
  20.         return drive.Direction.stop


  21. if __name__ == '__main__':
  22.     t_driver = drive.DriveThread()  # 小车驱动线程
  23.     t_video = VideoProcessor(("192.168.50.201", 10700))  # socket线程传输视频到远端

  24.     try:
  25.         net = hs.HS('ObjectDetector', zoom=True, verbose=0, threshSSD=0.2,
  26.                     graphFolder="../../SungemSDK-Python/examples/graphs/")
  27.         t_driver.start()
  28.         t_video.start()

  29.         while True:
  30.             result = net.run()  # 读取角蜂鸟返回的结果
  31.             t_driver.direction = process(result)
  32.             image = net.plotSSD(result)
  33.             if t_video.has_client():
  34.                 t_video.input_queue.put(image)  # 传输视频到远端
  35.     finally:
  36.         drive.cleanup()
复制代码

展示


4.jpg

当检测到目标物体(自行车)时,根据目标物体在视野中的位置,驱动小车发生移动。

3-2 (1).gif


产品购买链接:https://www.cirmall.com/shop/?c=products&a=view&id=5113



回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /2 下一条

手机版|小黑屋|与非网

GMT+8, 2024-4-25 18:23 , Processed in 0.118464 second(s), 16 queries , MemCache On.

ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

苏公网安备 32059002001037号

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.