1. 阅读笔记
结合本周课堂所讲的实时操作系统知识内容,浏览如下商用和开源实时操作系统网站,写一段文字向其他同学简要介绍下某个实时操作系统的性能特点或进行操作系统间性能的比较:
- Vxworks: www.windriver.com/products/vxworks
- QNX:www.qnx.com
- Xenomai: xenomai.org
- Intime: www.tenasys.com/tenasys-products/intime-rtos-family/overview-rtos
- Sylixos: www.sylixos.com
- ucos: www.micrium.com
uC/OS II 简介
uC/OS II(Micro Control Operation System Two)是一个可以基于ROM运行的、可裁减的、抢占式、实时多任务内核,具有高度可移植性,特别适合于微处理器和控制器,是和很多商业操作系统性能相当的实时操作系统(RTOS)。为了提供最好的移植性能,uC/OS II最大程度上使用ANSI C语言进行开发,并且已经移植到近40多种处理器体系上,涵盖了从8位到64位各种CPU(包括DSP)。
uC/OS II可以简单的视为一个多任务调度器,在这个任务调度器之上完善并添加了和多任务操作系统相关的系统服务,如信号量、邮箱等。其主要特点有公开源代码,代码结构清晰、明了,注释详尽,组织有条理,可移植性好,可裁剪,可固化。内核属于抢占式,最多可以管理60个任务。μC/OS-II 的前身是μC/OS,最早出自于1992 年美国嵌入式系统专家Jean J.Labrosse 在《嵌入式系统编程》杂志的5 月和6 月刊上刊登的文章连载,并把μC/OS 的源码发布在该杂志的B B S 上。
μC/OS 和μC/OS-II 是专门为计算机的嵌入式应用设计的, 绝大部分代码是用C语言编写的。CPU 硬件相关部分是用汇编语言编写的、总量约200行的汇编语言部分被压缩到最低限度,为的是便于移植到任何一种其它的CPU 上。用户只要有标准的ANSI 的C交叉编译器,有汇编器、连接器等软件工具,就可以将μC/OS-II嵌人到开发的产品中。μC/OS-II 具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点, 最小内核可编译至 2KB 。μC/OS-II 已经移植到了几乎所有知名的CPU 上。 严格地说uC/OS-II只是一个实时操作系统内核,它仅仅包含了任务调度,任务管理,时间管理,内存管理和任务间的通信和同步等基本功能。没有提供输入输出管理,文件系统,网络等额外的服务。但由于uC/OS-II良好的可扩展性和源码开放,这些非必须的功能完全可以由用户自己根据需要分别实现。
uC/OS-II目标是实现一个基于优先级调度的抢占式的实时内核,并在这个内核之上提供最基本的系统服务,如信号量,邮箱,消息队列,内存管理,中断管理等。uC/OS-II以源代码的形式发布,但并不意味着它是开源软件。你可以将其用于教学和私下研究(peaceful research);但是如果你将其用于商业用途,那么你必须通过Micrium获得商用许可。虽然uCOS-II在商业上使用时需要的得到授权并且费用也是一笔不小的数字,但是他的开源毕竟带领我们走入了内核的世界。
2. 本课程需要完成一个团队项目,主要功能是实现一个两轴机械手的运动控制仿真,主要功能包括:
-
用户接口任务:负责接收来自用户的请求,并发送运动指令给轨迹插补任务。
-
轨迹插补任务:接收运动指令,实时计算各轴的位置和速度设定值。
-
物理引擎接口:基于ODE开源物理引擎,创建一个两轴机械手及环境的物理模型,用轨迹插补任务输出的各轴位置和速度设定值控制模型的运动,并把实时状态反馈给轨迹插补任务。
-
图形化用户接口:可基于qt把上述功能集成到一个GUI界面。
1)请思考你最擅长或最有兴趣参与哪一个模块的开发,并写在博客上。
2)除了编程,你可以以多种形式为一个软件项目做贡献,如团队管理、需求分析、功能定义、算法设计、仿真分析、软件测试、文档写作......,快速阅读邹欣老师《构建之法》一书前五章和邹欣老师的博客(http://www.cnblogs.com/xinz),请写下你对团队协作开发的理解,以及自己在一个控制软件项目中倾向于承担的角色或任务。
设想:
图形化用户接口上用户可以选择典型的轨迹曲线或者NC文件等,解析后给插补任务发送直线、圆弧、样条曲线轨迹命令,插补任务再根据速度、加速度要求实时计算出各个轴转速和加速度(传动比等参数自己设定),物理引擎接口当作是运动的实体,以仿真的形式以规定的角度信息运动,并以仿真的形式将位置信息等反馈给插补任务(因为是仿真,数据流的方向只是单向的,所以是没有实际误差的,反馈也没用),同时实时显示所给定的速度、位置信息。
各个模块的具体功能:
图形化用户界面:用户选择所需要的路径,并发送给下一层(可以使用网络等);实时显示已经加工过的路径信息;实时显示各轴转速等;
轨迹插补任务:接受基本的插补任务信息(直线、圆弧等),解析成发送给电机的转速和加速度(具体如何实现还要看书);
物理引擎接口:相当于是机械实体,根据各轴位置和速度信息实现相应的运动(并将位置信息反馈给插补任务),将各轴转速等反馈给图形化用户界面;
各个模块的功能分解:
图形化用户界面:
显示图形图像等;
读取文件(dxf、G指令等);
实现不同模块之间的网络通信(模拟计算机与伺服装置的通信),定制自己的通信协议(轨迹类型-直线、圆弧;起点终点;方向),校验;
数据的存储和缓冲(接受方插补任务接受数据要缓存下来);
插补任务:
接受数据并校验、缓存;
按照给定的运动起点、终点等信息计算中间点(插补)(假设数控装置采用电压脉冲作为插补点坐标的输出增量,即以步进电机作为驱动装置,计算得到的就是进给脉冲,采用脉冲增量插补算法,具体讲就是逐点比较法和数字积分法;另外还有数据采样插补)
将脉冲数据发送给物理接口;
物理引擎接口:
接受脉冲数据,经过计算后得到关节角度,关节运动到指定的位置(可以使用KDE或者OpenGL);
将自身位置信息发送给用户界面(网络通信等),发送给插补任务(如果是闭环伺服系统);
可以仿照下面这个流程图:
可参考资源:
ODE: http://www.ode.org/
openrave :http://www.openrave.org/docs/latest_stable/
Open Robot Control Software:http://www.orocos.org/
Kinematics and Dynamics Library :http://www.orocos.org/kdl
some other rescources on sourceforge about trajectory planning:https://sourceforge.net/directory/os:windows/?q=trajectory
eigen: http://eigen.tuxfamily.org/dox/GettingStarted.html