《实时控制软件设计》第三周作业
一、博客作业:
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
2. 本课程需要完成一个团队项目,主要功能是实现一个两轴机械手的运动控制仿真,主要功能包括:
-
用户接口任务:负责接收来自用户的请求,并发送运动指令给轨迹插补任务。
-
轨迹插补任务:接收运动指令,实时计算各轴的位置和速度设定值。
-
物理引擎接口:基于ODE开源物理引擎,创建一个两轴机械手及环境的物理模型,用轨迹插补任务输出的各轴位置和速度设定值控制模型的运动,并把实时状态反馈给轨迹插补任务。
-
图形化用户接口:可基于qt把上述功能集成到一个GUI界面。
1)请思考你最擅长或最有兴趣参与哪一个模块的开发,并写在博客上。
2)除了编程,你可以以多种形式为一个软件项目做贡献,如团队管理、需求分析、功能定义、算法设计、仿真分析、软件测试、文档写作......,快速阅读邹欣老师《构建之法》一书前五章和邹欣老师的博客(http://www.cnblogs.com/xinz),请写下你对团队协作开发的理解,以及自己在一个控制软件项目中倾向于承担的角色或任务。
3. 请本着迭代优化的精神,参照Markdown格式不断对之前发表的博客进行文字和排版上的改进。
二、实时编程作业:
1. 下载代码库并编译:
用git下载课程github主页上的代码库到虚拟机
git clone https://github.com/RTCSD2016/simple_motion.git
如果虚拟机上尚未安装cmake工具,先安装cmake
sudo apt-get install cmake
进入源代码目录,运行
cmake .
make
如果编译成功,则运行程序,查看打印输出。
./simple_motion
2. 编程实现定位运动轨迹生成器
在task_trajectory_generator任务中增加代码来处理来自task_command_sender的定位运动命令new_cmd,按照该命令中给出的位置、速度、加速度、减速度,实现一个梯形加减速(原理见数控技术教材)的运动轨迹生成器,当达到目标位置时,把new_cmd.Done设为true,主程序检测到new_cmd.Done为true时将结束运行。
编程要求:
- 轨迹生成器的代码结构能充分体现出基于状态机的编程方法。
- 把第一个可以运行的版本发布到自己的github账号上,并不断优化和提交。
- 创建一个TODO.md文档写下自己的编程思路和下一步要做的工作。
遇到github使用上的问题可请教老师或助教。
3. 本课程后续的个人编程练习将是不断完善这个程序,在完成基本功能的基础上可以考虑后续的改进,每次改进都提交到github上:
- 目前用全局变量实现任务间通信,如何使用xenomai提供的任务间同步和通信机制来更好的完成这一工作?
- 目前只考虑单个定位命令的轨迹生成,如果连续接收到多个定位命令,如何进行命令的缓冲和运动轨迹的平滑工作?
- 能否把运动轨迹以曲线图形方式显示出来并保存到数据文件中?
- 能否以参数文件的形式保存轨迹生成器的参数,并实现对配置文件的读写?
- 能否以S形加减速(设定Jerk值)生成更光滑的运动轨迹?