57
社区成员




使用说明和视频演示将上传至代码仓库:https://gitee.com/yang-quanshun/uuvttuu
通过本学期课堂的学习与大作业的完成过程,我们学习到了软件开发由项目计划、需求分析、软件设计、编码实现、测试、部署交互等等这一完整的软件开发流程。虽说课本中的很多内容仍不能清晰地理解掌握,但对于软件工程确实也有了比以前更明晰系统的概念和理解,同时也在老师授课下对许多以前未所听闻的开发软件和开发方法如代码规范检查工具,UML模型等有了初步的了解。
以前在编写一些功能比较复杂的程序时,常常因为打补丁式的添加代码而让整个程序一团糟,在接触数据结构和设计模式以后这种情况终于有了改善。而软件工程更是一门自顶而下的设计思想,学完后应初步具备具备管理整个软件开发流程的能力。从而提高软件的质量与生产率,最终实现软件的社会化生产。在给定成本,进度的前提下,开发出具有可修改性的,可靠性的,可维护性的,可移植性的,可重用性的并且满足用户需求的软件产品。
需求分析
软件需求的三个层次:业务需求、用户需求、功能需求。需求分析的目的是为了说明软件的工作特征,指明软件和其他系统元素的接口,规定软件必须满足的约束。需求分析的主要任务是细化在前期需求工程的基础需求,构建一种或多种模型以描述用户场景、功能活动、类、类之间的关系、系统和类的行为、数据流等。
本软件需求来源于某项自动驾驶的课题,需要根据海图给出一系列规划好的路径,以对比和验证设计的自动驾驶算法的性能,它应当具备以下功能:
1.提供用户界面,用于手动规划航行器三维航迹;
2.仿真在某一套控制参数下航行器的实际运动轨迹;
3.保存与载入;
4.导出.xlsx或.m格式的航迹数据;
5.导出.jpg或.jiff格式的航迹图片;
6.导入.xlsx格式的航迹
软件设计
总体设计过程通常有两个主要阶段组成:
1.系统设计阶段,确定系统的具体实现方案;
2.结构设计阶段,确定软件的结构。
软件设计的启发式规则:
1. 软件结构提高模块独立性
2. 模块规模应该适中
3. 深度、宽度、扇出和扇入都应适当
4. 模块的应用域应该在控制域之内
5. 力争降低模块接口的复杂程度
6. 设计单入口单出口的模块
7. 模块功能应该可以预测
本软件对各模块功能和职责划分如下图所示:
用户界面设计是为了满足软件专业化标准化的需求而产生的对软件的使用界面进行美化优化规范化的设计分支。具体包括软件启动封面设计,软件框架设计,按钮设计,面板设计,菜单设计,标签设计,图标设计,滚动条及状态栏设计,安装过程设计,包装及商品化。
本软件的用户界面设计遵循了以下原则:
1.操作反馈:对鼠标悬停的按钮有深色效果;对操作平面的选取有黄色高亮标记。
2.一致性:按钮之间的排版和样式风格是统一的。
3.控制权:为了防止程序跑飞导致的错误,分别提供了强行中断任务进行和强行退出软件的功能。
4.效率:根据工作流程对按钮的顺序进行了设计。
对用户界面设计如下图所示:
编码实现
1.程序设计语言分为两大类:
面向机器语言:
面向机器语言包括机器语言和汇编语言;
高级语言:
高级语言分为专用语言和通用语言;
2.程序设计语言的选择
理想标准、实用标准、系统用户的要求、工程的规模、软件的运行环境、可以得到的软件开发工具、
软件开发人员的知识、软件的可移植性要求。
3.软件测试在软件开发过程中的体现:
a.寻找软件错误,以便进行修正;
b.证明软件符合要求,是可用的;
c.验证软件是否符合用户要求;
d.指导软件的开发过程;
e.提供软件的相关特征;
4.、编码基本要求:
标识符有意义符合规范,需要加注释,缩进换行等要规范(视觉组织), 最终要求可读性高。
输入要求:输入要求必须检验合格后才可以应用,格式确定,且有提示信息等。
输出要求:格式化输出,例如报表,并且应该有注释信息,易阅读。
效率要求:在保证程序可读性的条件下,保证程序的运行效率和存储效率。
在编写软件的过程中,路径跟踪算法的实现花费了较大精力。本软件基于前向视线导航+PID速度环实现了一种路径跟踪算法。
转向参数整定:
抬艏参数整定:
跑点测试:
基于贝塞尔插值法的三维路径绘制:
数据导入与导出:
工具
图表制作工具: visio
代码仓库:gitee
软件实现工具:Unity、Visual Studio
遵循的代码规范:谷歌C#代码规范 https://google.github.io/styleguide/csharp-style.html
参考文档:Unity参考文档 https://docs.unity3d.com/ScriptReference/index.html