专栏算法工具链AI 可编程智能小车 | 开发与部署教程

AI 可编程智能小车 | 开发与部署教程

billionaire2020-05-11
1071
4
在上一期,AI 开发,不必从0开始 | 本期案例: AI 可编程智能小车 中,我们分享了 AI 可编程智能小车,为了更好的让大家了解这个项目,学习 AI 产品开发,我们在此将我们开发教程和代码分享给大家。

你是否准备好了,

动手实践,

那就按照我们的步骤一起来体验吧~

一、技术方案介绍

BCK (本项目名称)技术链路较长,由于是针对教育市场开发的套件,所以做了很多 SDK 的封装,其目的是在于更加便利的二次开发和更加有趣的体验,激发创意,简单开发是我们核心的理念。

BCK 技术上充分采用了软硬结合,具体围绕硬件,控制,算法,云端,前端五个方向打造套件一体化,各方向职责明确,相互串联,共同作用。

由于本版本开发套件是为了 Hackathon 2019 短时间打造,技术方案倾向在 MVP 产品完成,但「三万块团队」在设计上预留了足够的想象空间,技术方案提升空间仍有很多。未来希望更加符合我们的愿景,让编程没有年龄边界。

下面依次介绍各方向的技术方案

1.1 硬件

底层小车平台采用一个麦克纳姆轮小车实现,其控制板搭载意法半导体 STM32F1xx 系列MCU。

AI 开发板主要由叠放的三张 PCB 板和摄像头模块组成,三张 PCB 版从上到下依次为搭载地平线 Sunrise™ 2 人工智能芯片的运算板、一个接口转接板和 96Boards 搭载高通 410c 的主板组成。

1.2 控制

麦轮小车的运动控制采用带编码器的电机做闭环控制,控制逻辑在小车控制板上的 STM32 MCU 上运行。

AI 开发板 通过 USB-to-MicroUSB 连接线连接小车控制核心板,核心板上使用 CH341芯片用于USB转串口信号向 STM32 发送控制信号。96Boards 侧 CH341 芯片被挂载为一个 USB 串口设备,软件层提供了简单的 python 库用于直接调用下发控制指令。

1.3 算法

BCK在芯片上预置了一套人体检测和骨骼分析的感知计算流程,可以直接取出计算结果用于应用分析。同时,BCK提供了一套动作识别的Python框架,提供例如“左手举起”、“右手伸展”、“有人/无人在视野内”等示例动作,同时支持用户自定义新的动作作为扩充。

1.4 云端

使用golang的gin框架搭建了一套后台转发服务。前端将更新的命令post到云端服务,小车又到云端轮询get新的指令。由此解决了无线小车连接WIFI没有固定IP的问题。

1.5 前端

可视化编程页面基于 React + TypeScript 开发,组件库使用 antd, 使用 rematch 进行数据管理,UI 视图分为可视化操作区和逻辑代码显示区。

二、开发教程

本次项目代码均已上传到github,软件库列表:

2.1 X2 SDK 部署

2.1.1 开发板环境设置

AI 开发板主要由叠放的三张PCB板和摄像头模块组成,三张PCB版从上到下依次为搭载地平线X2人工智能芯片的运算板(以下简称X2板)、一个接口转接板 和 96Boards搭载高通410c的主板(以下简称410c版)组成。此外,运行Demo还需要准备一台Windows PC用于展示Demo的显示端。

a. 连线:

将410c板上连接上电源线、usb转网口转接器(连接网线)、usb hub(连接键盘鼠标)、HDMI视频输出;并连号通过转接口转接的网线和键盘鼠标。

将X2板连接上网线,并将Micro USB转USB线连接上白色3pin接口旁的Micro USB接口用于串口调试。

b. 配置固定IP地址(非必须)

为保证正常ssh连接,可使用固定IP地址。

● 配置410c板IP地址:

通过HDMI接入显示器,通过usb hub连接键盘鼠标,410c上电之后进入板子的图形界面,右键点击右下角网络连接图标,点击“Edit Connections...”打开配置界面

在配置界面选中Ethernet中的wired connection 1,点击下方齿轮图标(如有多个wired connection,则在齿轮图标弹出的窗口中选择Ethernet页,确认配置的网卡名为enx[XXX],其中[XXX]为mac值)。

在界面中选中IPv4 Settings,将IP地址和相关参数配置为需要的参数。

重新插拔网线,410c设备IP将变为新配置IP地址。此后即可通过ssh连入410c板,用户名密码均为linaro。

● 配置X2板IP地址:

X2板需要通过串口连接接入配置IP地址:

首先在 https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers 下载串口芯片驱动安装。

以 Mac OSX为例,安装minicom串口调试工具,参考https://blog.csdn.net/u010285246/article/details/72354038 配置minicom,串口连入410c(串口接入密码为root)。

接入后,使用vi在/etc/init.d目录下建立名为ipinit.sh的启动脚本,内容如下(请将10.31.32.111、10.31.32.1替换为需要的IP地址和网关地址)

ipinit.sh:

之后,修改文件权限为775,在/etc/init.d目录下执行以下命令,将脚本加入自启动即可。

执行./ipinit.sh,x2板设备IP将变为新配置IP地址,此后即可通过ssh连入x2板,用户名为root。

2.1.2 部署Demo

a. 嵌入式环境确认:

首先确保ap与cp的内核版本的一致性,目前用的ap与cp的内核版本如下图:

b. X2板部署:

1. 参考http://wiki.hobot.cc/pages/viewpage.action?pageId=74423879中2.3.2步骤,将 xppcp_smart_96board.tgz安装包,拷贝到x2板CP端/home/root下,解压后cd xppcp_smart进入目录,运行文件根路径下的安装脚本 ./xpp_start.sh启动cp侧程序,ps查看进程中有./xpp_cp_smart -i configs/smart_config.json在运行。

2. 复制Billionaire SDK (http://gitlab.hobot.cc/ptd/experimental/alg/eevee/awesome/bilionaire) init文件夹中initx2.sh脚本到CP侧的/etc/init.d文件夹中。

3. 在CP侧的/etc/init.d文件夹中执行chmod +x initx2.sh为脚本添加可执行权限。

4. 在/etc/init.d文件夹中执行如下命令添加开机启动项:

c. 410c板部署:

1. 参考http://wiki.hobot.cc/pages/viewpage.action?pageId=74423879 中2.3.1节内容,安装AP端基础环境到 96Boards 410c板上

2. 复制Billionaire SDK (http://gitlab.hobot.cc/ptd/experimental/alg/eevee/awesome/bilionaire) init文件夹中initap.sh脚本到AP侧的/etc/init.d文件夹中。

3. 在AP侧的/etc/init.d文件夹中执行chmod +x initap.sh为脚本添加可执行权限。

4. 在/etc/init.d下执行以下命令,添加开机启动项。


2.2 AP 侧部署

AP侧程序为端上系统的核心控制模块,负责执行:

1. 通过调用X2 SDK,循环读取CP的计算结果并进行解析。

2. 通过轮询云端接口,获取前端下发的配置。

3. 进行人体动作识别。

4. 根据前端配置,将人体动作识别的结果映射为小车需要执行的动作。

5. 调用小车控制的SDK接口,向小车发送动作指令。

部署流程:

1. git clone AP程序,cd ap_process/

2. sudo python ws_server.py

2.3 云端部署

云端基于 golang 编写,负责:

1. 提供前端配置接收接口,并存储该配置在内存中。

2. 提供 AP 轮询获取命令接口,如内存中有前端更新命令则返回新命令。

部署流程:

1. git clone 云端程序,cd cloud_server/

2. go mod vendor

3. go run main.go

4.4 前端部署

前端开发环境采用 webpack 进行构建,建议使用 node 12+ 以上版本环境,安装好 node 后会有 npm 包管理工具。

项目 clone 到本地后安装开发所需依赖,一般步骤为:

- npm i (依赖不更新只用执行一次)

- npm start

执行以上操作,浏览器会自动打开对应网页,开发建议使用 chrome。

打包生产版本执行 npm run build,然后会在项目中生成 dist 文件,部署到指定文件,一般使用 nginx 进行代理。

4.5 AP侧代码详解

AP 侧的代码入口为ws_server.py,其中,首先对所调用的X2 SDK与bilioncar SDK进行初始化,然后在smart_process线程中轮询X2智能信息并进行解析、交互控制。另一方面在主线程启动websocket server,用于请求前端下发的配置。

h2v 模块(human-to-vehicle)为对动作进行识别并与小车进行交互的入口。


大家对于代码和开发过程有任何问题,欢迎留言 ❤️。

算法工具链
官方教程
+4
评论2
0/1000
  • zdi
    Lv.1

    你好,我在前端部署的时候遇到了一些问题,在Github上发了issue,希望可以得到解答,谢谢。

    在Windows和ubuntu上都试过了,具体的细节写在https://github.com/sunshaoyan/BillionaireProject/issues/1。

    2020-05-15
    0
    2
    • billionaire回复zdi:

      您好,感谢您的反馈。这个问题是由于npmrc文件中指定了公司内部的npm服务导致的,我们已经在github上更新的repo,请试用,多谢!

      2020-05-16
      0
    • zdi回复billionaire:

      你好,我还是遇到了一些问题,我已近反馈到github的issue上了,希望可以得到解答,谢谢!

      2020-05-19
      0
  • wangning
    Lv.1

    你好!开发板如何使用 CH341与外部串口设备通信?有开发教程实例吗?跪求!!!或者我可以加您的微信。

    2021-02-20
    0
    0