Blog

Blog

PHODAL

freescale那时的设计方案。

系统框架

本系统采用了两种不同的方案来进行远程的智能小车控制,小车只需要加上个无线模块来接收无线信号,便可以实现远程控制方案。

在本系统的两个方案中:

方案一,没有复杂的组织结构,同时不需要如此多的设备。

方案二,由于采用的是有线设备,同时由于采用的是C/S结构,那么其相对比较稳定,同时可在任意可连接上网络的地方来进行,远程控制。

简化为框架图的系统组成:

由于在控制上采用B/S结构,因而在用户端的设备选择上我们可以选用:

等设备。

而对于移动台的选取,本系统采用的是智能机的简单方便,由于在小车与控制之间不需要太多的交互,只需要简单的下达指令。因而,我们采取的是这种方案,同时也可以借由计算机、平板等带有无线网络的方案来控制。

总体设计

总体设计方案

在设计方案的时候,由于需要考虑多种因素,及为了对整体有个更好的把握,对此采用了思维导视的方法进行设计。那么,总体的结构可以很清晰的由下图看出。对于小车的设计将它划分到下一部分,那么这一层的设计就主要依赖于软件及设计。

在开发及语言上的选择,客户端采用了QT作为GUI方案,移动台采用python作为主要语言。相比其他语言,脚本语言的python可以一次编写多平台运行,同时即编写即运行,无法编译,而且可以在目标机上运行。

 

小车设计方案

由于调试及管理的需要,及系统的完整性。在设计调试系统的时候,采用了与无线通讯相结合的方法。

同时,我们知道操作系统其核心本质就是资源管理,也就是涉及RAM、文件系统等等。

系统硬件框架

系统软件框架

根据系统硬件的选择及与软件结构的设计应该与系统剥离的原则,独立出系统的软件结构。

整个系统由以下几部分组成:传感器、舵机、直流电机、无线模块、测速等结构组成。在考虑了,无线设计、拓展等原因后采用了以下设计。

MCU控制了整个系统的大总数模块,将拓展算法及预测算法移至子系统,用子系统优化和控制小车速度及转向等。

 

软件体系结构

系统软件层

本系统采用的是uC/OS嵌入系统,由于该系统对于系统的开销相较于其它系统开支比较低,可在51单片机等系统运行。因此,本系统采用了此系统,同时采用嵌入系统有利于程序开发,可实现应用层与系统层的剥离。

与其它操作系统相似的是,uC/OS具有相似的内核结构。由其带来的系统花销,可由此来抵消。

如图所示为,本系统的软件总方案。

 

无线模块方案

在选择无线模块时,本方案首选蓝牙模块,同时也为其他无线模块预留了接口。因而,我们为此设计了简易的通讯模块。

 

那么对于IO口的处理也就是以下的模型。

蓝牙模块程序设计

由于无法保持无线连接处于通讯状态,因此,也应当避免指定每一步采用并发策略的类型或同步的类型。于是,需要转为为每一步提供一个特定的选择。如图如示:

蓝牙模块程序概述

在整个模块的设计中,由于小车可能处于主、从机状态,因此得接收指令和返回指令。同时,在pys60上采用的是socket协议控制蓝牙。因而,将此程序简化为UML图,也就是下图的模式。

系统方案

在选择系统方案时,本方案优先考虑了uC/OS,由于其运行花销低。同时,由于在编写程序的时候可以减少平台的关联度,也方便了程序的移植。

任务调度

采用uC/OS操作系统的设计,使得整个程序在任务的调度上有着更好的可操作性,同时在某种条件下可以将整个系统的多任务设置为并发执行。Main函数初始化了系统,同时创建了一个任务。而这也是uC/OS的任务管理机制,由于uC/OS有着良好的时间控制能力。因此,系统在定时事件等上有着更好的可操作性。同时,可以处理多I/O事件。

示例:

void main (void)

{

OSInit (); //初始化操作系统

OSTaskCreate(TaskStart,(void *)0,&TaskStartStk[TASK_STK_SIZE-1],1);//创建启动任务

OSStart (); //启动操作系统

}

void TaskStart(void *pdata) //启动任务

{

pdata = pdata;

OSTaskDel (OS_PRIO_SELF);

}

图像处理

图像处理框架

在摄像头方案智能车控制系统的软件设计中,程序的主流程是:通过外部中断采集程序对摄像头的视频信号进行采集,主程序在两次外部中断的间隙中完成对数据进行处理及计算并给出控制量,采样周期为20ms。其中,主程序中主要完成的任务是:单片机初始化和黑线提取算法;图像滤波算法;舵机控制算法及驱动电机算法。

简易算法

在行驶路径上,小车只有两种情况,即弯道和直线,而在这时可视为其是连续的,也就是我们可以通过此来完成对小车路径的预测及速度的控制。

在平面上的任意三点,我们可以由一条曲线来表示,同时可以由此来推测第四点位置的存在。任意的三点可以由算法算出曲线的方程,也就是当这四点在X方向上距离相等,或当图像为平面视图时,采用相对等距的方法来算出第四点,进而借此而预测第四点。

那么,假定我们设这四点的y坐标分别为y1,y2,y3,y4那么,y4=y1+3*y3-3*y2。

同时,可算出该曲线的一元两次方程,并可算出其转向角。进而,可以通过此,来控制小车在转向时的行驶速度。

也就是我们可以将此算法简单叙述为右图。

首先,由上一步的图像处理获取、存储点的坐标,同时,由简单算法计算出这几个坐标的位置。再由此预测下一点的位置及转向角。进而达到预测和控制速度的目的。


或许您还需要下面的文章:

关于我

Github: @phodal     微博:@phodal     知乎:@phodal    

微信公众号(Phodal)

围观我的Github Idea墙, 也许,你会遇到心仪的项目

QQ技术交流群: 321689806

新书《前端架构:从入门到微前端》

《前端架构:从入门到微前端》是一本围绕前端架构的实施手册,从基础的架构规范,到如何设计前端架构,再到采用微前端架构拆分复杂的前端应用。本书通过系统地介绍前端架构世界的方方面面,来帮助前端工程师更好地进行系统设计。

前端架构包含以下五部分内容:

  • 设计:讲述了架构设计的模式,以及设计和制定前端工作流。
  • 基础:通过深入构建系统、单页面应用原理、前端知识体系等,来构建出完整的前端应用架构体系。
  • 实施:通过与代码结构的方式,介绍如何在企业级应用中实施组件化架构、设计系统和前后端分离架构。
  • 微前端:引入6种微前端的概念,以及如何划分、设计微前端应用,并展示了如何实现这6种微前端架构。
  • 演进:提出更新、迁移、重构、重写、重新架构等架构演进方式,来帮助开发人员更好地设计演进式架构。
comment

Feeds

RSS / Atom

最近文章

关于作者

Phodal Huang

Developer, Consultant, Writer, Designer

ThoughtWorks 高级咨询师

工程师 / 咨询师 / 作家 / 设计学徒

开源深度爱好者

出版有《前端架构:从入门到微前端》、《自己动手设计物联网》、《全栈应用开发:精益实践》

联系我: h@phodal.com

微信公众号: 与我沟通

标签