Category Archives: Journal

如何构建和管理自己的知识系统

1. 背景

三年前,我在做硕士毕业设计的时候第一次使用Evernote(印象笔记)收集资料,之后就一直使用Evernote记录一些备忘和生活琐事,但也没有形成相对完整的系统。开始读博士之后,我习惯随手在论文上记批注和笔记,觉得这样个人观点和原文的耦合度会比较高。但是等到要检索和引用资料时,脑中对这些知识点有些印象,可很多资料就是找不到出处,这时又要重新谷歌或者去翻文件夹。这让我思考是否需要将笔记做成电子形式,这样检索和使用的时候会比较方便,知识也能线性积累。去纸化的过程是比较痛苦的,因为我们从小到大习惯了纸质笔记这种记录方式。我们的工具十分简单(纸和笔),却可以记录各种类别的信息(文字、结构图、流程图、批注)。然而到了电子时代,我们可用的工具很多,但却很难形成和纸质笔记相比的“灵活性”。当然,相比传统的笔记方式,电子笔记可以多次修改、任意排序和整理、发布和分享、互相引用与检索,但有的时候却不如传统笔记那么“直观”和“简单”(想想用pdf做标注 v.s. 在书上直接做批注 或是 用画图软件画一个流程图 v.s. 在纸上随手画一个流程图)。在过去的一年时间里,我一直在思考和实践电子化笔记系统的可行性,以及如何凸显和最大程度发挥电子笔记的优势。而我发现,电子笔记不仅有上述提到的几个优势,还可以成为构建和强化知识系统的有力工具。

这里,我将一切广义上可以提高人对某一事物或领域的认知或记忆的信息(以文字为主)称为知识,而将通过计算机、平板、手机等手段记录个性化知识的方式称为电子笔记。此文分享了我对于知识和记笔记的理解,以及通过电子化工具构建知识系统的思考和经验。

2. 为什么需要记笔记?

上一节聊了我为什么需要将笔记电子化的动机,现在简单说一下我们为什么需要记笔记。每个人都有这样的经历:和别人聊天时,总是有一些感觉在嘴边的东西,大脑却无法回忆起来;或者某天去超市购物时,明明觉得需要买什么,却怎么也想不起来。不管我们认不认同,人脑的潜力不是无限的。理解我们自身局限性的其中之一,就是认识到人脑是有局限性的,并且记忆的容量是有限的。所以构建一个笔记/知识信息系统,就是要补偿人脑的这种局限性,将笔记系统作为我们的第二大脑。这个观点已经得到了主流大众的认可。我们知道记笔记需要花费时间,这种时间实际上是一种对未来的投资。我们一般记录事情的动机有两个:一是为了增强对摄取信息的认知;二是为了日后需要的时候可以回想起来。大部分人也应该可以认同记笔记是强化知识的重要手段。除此之外,记笔记的核心价值是“使用”。也就是说,一个好的笔记应该是有使用价值的。一个shopping list可以让你在逛超市的时候买齐所有的东西;一篇日记让你可以回忆过去自己经历的事情;一篇论文笔记让人在需要的时候可以快速回忆起论文的核心观点;一个programming reference可以让你在编程的时候快速想起API的用法,而不用每次都去Google. 这些都是使用价值,是你记录时投资时间换来的回报。记录信息的本质是提供使用价值,所以评价一个笔记系统也应该用”可使用性”为评价方式。有一种观点是:现在(几乎)所有的信息都能在因特网上搜索到,所以需要信息的时候都可以即刻去搜索。这种观点本身没有问题,但是以目前的搜索技术和因特网的归档程度而言,这种方式的时间开销更高:因为你要从海量信息中筛选、判断、提炼出你想要的那一部分信息。而笔记则是“一次记录,多次使用”,一劳永逸。并且有新的知识点时,可以修改、完善之前的知识(另一点电子笔记的优势就是修改起来十分简单)。我们记笔记,就是让笔记成为知识的载体,也是为了日后需要这个知识时提供便捷。

3. 文字的分类

理解如何记录信息的第一步,是意识到信息与信息之间是有很大差别的:一篇娱乐新闻的读后感和一篇期刊文章的评论,其承载的信息和用途是不同的。根据信息种类严肃程度的不同,我将这些信息进行以下分类:

Category 1. 生活类:备忘录、日记、随想等
Category 2. 严肃类:工作日志、读书笔记、文献记录等
Category 3. 专业类:博文、论文、出版物、专栏等

第一类我称之为生活类,这一类包括基本常识,以及个人主观的、随意的记录。比如我自己喜欢将每天代办的事情记录下来,或是写生活日记等。这一类信息的特点是:不需要对信息进行太大的加工,并且一般来说都是相对隐私的,不会公开给别人。所以在记录和措辞方式上也会比较随意,只要能满足自己的需要就可以。这里我推荐使用的软件是手机自带的备忘录,Evernote,和素签(iOS日记应用)。

第二类就相对严肃一点了,这一类承载的知识和信息相对专业,并且需要投入很多脑力活动。要求我们对原始信息进行抽取、提炼、总结等工作。如听了一场seminar报告,对作者的观点有疑虑或是认同,就写了一篇感想。这类信息的特点是,信息的专业度高,并且不同的人对于严肃的定义也不同(如物理专业的人会把物理分为第二类,却会把生物分类为第一类,因为生物方面的知识对其来说不属于专业知识)。此类信息需要日后自己或他人阅读,所以在结构和语言上更加严谨。对于这一类的信息,我使用一款名为Leanote的软件进行记录和管理 [1]。最早我使用的是Evernote,但是Evernote不支持Markdown、Code Highlight以及MathJax的功能,对于理工科专业的人很不方便。

第三类则是严谨程度要求最高,并且知识的系统化程度最高的。这类信息需要大量的时间收集、整理。因为知识的体系化程度高,一般需要有内在的层次和结构关系。Cat 3的知识有时会依赖Cat 2,或者说Cat 3是Cat 2的总结和升华。不同于一类和二类信息以自己使用为中心,三类信息的读者可以是除你之外的人,这就要求知识具有可传播性。也就是说除了你自己可以理解,别人也要能透过你的文字和其他信息来理解你所要表达的知识。这就要求你在表述“意思”之外,还要有好的文笔。对于论文或是书籍我使用的软件是LaTex,也是使用的比较广泛的写作环境。至于博文,我就相对比较随意了:有时候用MarkdownPad/Evernote写一个框架,有时候用Leanote写,有时候就干脆直接用Wordpress自带的编辑器了。

除了上述根据严肃程度的分类外,我还总结了另外一种分类方式,就是按照文字承载的功能划分信息:

A. 记录:没有知识加工的过程,作为辅助记忆的手段。
B. 整理:对原输入数据进行一次滤波,小幅度修改原文的内容和结构,删去不需要的信息等。
C. 归纳:通过脑力活动,对数据进行结构化的整理。
D. 发布:对归纳后的信息进行文学化、排版、公开/或非公开的发布过程。
E. 记忆、索引、查阅:对A、B、C、D过程中产出的文字进行使用。

其中A -> B -> C -> D是递进、逐层依赖关系,而D和E是最终目的。也就是说,我们在这个过程中所创造的知识最终都是期望被以后查阅、引用或者公之于众的。

4. 文字产生的工作流

在理解了以上的概念后,我们来看一下一个文字是如何从无到有的:


▲ Figure 1. 文字产生的work flow

简单说来,一个文字经历了资料采集、生产、输出的过程。采集的过程为之后的文字提供了引用依据、素材(包括图片素材,公式等)、话题(如”吴恩达将机器学习等同于电力”)或者原始资料本身提供了文字的主体(比如一般对于专业书籍的笔记,其内容来自于对原文的转义和理解)。采集的信息需要通过一定方式的整理,这里大部分人推荐的软件是Evernote [2][3]。Evernote支持文字、图片、附件,可以非常容易的copy-paste,有网页抓取,标签和搜索的功能,所以我认为极其适用于第一步的资料采集。

信息整理的过程就是将采集到的信息提炼,提取出自己期望或是对文字产出有用的信息。我提炼信息的过程有三种:

1、删,删掉无用部分;
2、加,将有用的信息单独整理出来;
3、概,使用自己的语言梳理、分段概括原文的内容。

信息整理的过程是将碎片化知识系统化,并且将别人的知识转化为自己知识的过程。有的人喜欢收集一堆信息,却没有自己的总结和整理。这样的信息与其放在电脑里浪费空间,不如删掉,需要的时候再去找就可以了。在互联网时代,知识的碎片化现象很严重,书本也不再成为最新知识的承载体 [5]。整理的过程就是让自己的碎片化知识逐步成型的过程。

有了一部分整理后的初始信息后,我们就进入了文字生产阶段。这个阶段可以十分简单,比如一句话概括看了的一部电影(豆瓣短评),一段话说明一篇论文使用的方法的优势、劣势、创新点;生产的过程也可以很复杂,比如一篇Survey需要几百篇的references作为输入。生产文字时需要迭代,需要收集新的资料。生产文字也需要大脑脑力投入。不同于资料整理的过程,这个过程需要揉入自己的想法、创新和思考。需要在理解原文字面上的意思之后,进行概括、引申、扩展、表示赞同或是否认。这个过程是整个系统中最核心的一部分,它决定了你手里的资料能否转化为自己的知识。

文字输出阶段就是将临时的文字存储/发布的过程。这个发布的对象可以是你自己、你的同事、你的group,或是你也不知道的概念化的一群人(概念化:不是具体的人,而是具有一定特征和标签的人(如我的博文的对象是电子爱好者、机器人研究者、嵌入式系统从业人员等)。文字输出是文字生产后的必然步骤,生产的文字总会以某种形式输出出来。比如一篇空间日记,写完之后就(公开或非公开)发布在了系统里。又比如一篇论文发布给了一个conference,一本书给出版社publish。即使是在电脑上用word写的文章,也存储在了电脑硬盘里。总之,输出的过程就是提供一个日后访问的接口,将临时的资料永久化保存的方法。对于现代人来说,网络式的输出是最优的发布渠道。无论是发布到自己的私有云笔记系统,或是公开到博客/专栏/公众号,都可以让自己/别人快速、随时的访问到这些信息。

最后,输出的文件可以选择进行归档。归档的过程是将输出的文件进行层次化管理、标签的过程。归档的本质就是将相同类型的文件统一整理,归档也是将个人知识体系化的过程。归档的方式很多,这里举我自己的几个例子:

  • 将新的博文添加到不同的分类目录下,并添加关键词标签;
  • 所有生活日记、工作日志按年份进行整理,并放到Evernote的单独子目录下;
  • 发现大量同质信息后,将其整理到一个单独的系统中(目前正在尝试将控制系统相关知识做成wiki [6])。

之所以要归档,是因为输出的文字有时只是零散的知识,需要有一个大的结构来让碎片化的信息行程体系结构。这个步骤有时候就是简单地建层次化的文件夹,有时候相对复杂,需要一个额外的新系统来管理,甚至是一个再创造的过程。举一个例子,你写了50篇文章C语言的文章后,发现这些知识可以按照章节或是深浅划分,甚至这些内容提供了一本新书的基础。归档的另一个作用是提供检索和使用时的方便。想想我的Evernote现在有100多篇note,从生活到科研的内容都有,如果不建立目录层次,需要的时候根本找不到想要找的内容。我自己是一个深度整理狂,喜欢事无巨细的整理。但我要说归档层次的建立是和note的数量相关的。如果你只有5篇文章,细分之后分了5个分类,每个分类下面一篇文章,那和不分类没有区别。而如果你简单分成 工作 和 生活,那你不仅区分开了两种完全不同的notes,而且也没有增加检索时的复杂度。但是如果你有30篇notes了,那你这时候要考虑再分出一些子分类,让每个分类下的内容尽量少一些。至于检索功能,很大程度依赖你所使用的软件。Evernote用户津津乐道的功能就是它的搜索所有笔记标题和内容的功能,以及可以给note打上不同标签。我觉得检索功能确实很方便,对于数据较多时也十分有效。想想有搜索引擎之前和之后的互联网就能理解数据可检索性的重要了。

5. 工具列表与比较

前几章我提到了很多我使用的工具,这里总结一下不同工具适用的使用环境和彼此的优劣:

工具
Good for
Bad for
Evernote
raw资料收集,工作日志,随时随地有可能需要查看的内容。
‘严肃的’文字生产,存在隐私和机密(日记等)。
Leanote
支持原生MD和LaTex,适合作为科研文字的生产平台。
可以快速发布blog和生成目录,适合知识的归档。
不适合:需要检索和长期存放的知识。
可靠性目前不如Evernote。
素签
对纯文字的记录,适合日记和文学创作(生活的、记录)。
LaTex
非常严肃的出版物(论文,pdf出版物)。
需要最终生成网页的知识(博文、wiki等),虽然有软件可以将LaTex转成网页,但是还需要将网页手工嵌入网站模板中。
共享程度不如博客,阅读群体数量少。
WordPress/Hexo/Jeklly
三个主流博客系统,适合知识的输出和共享。
尚未形成结构和体系的知识。
Mkdocs (Wiki)
体系、系统的知识整理。可以通过任意终端查阅、搜索。
尚未形成结构和体系的知识。
需要频繁添加、修改的知识。
OneNote
较为通用的知识,需要图片和文字共存,板式结构灵活。
缺乏对公式、程序代码的支持。
Tiddly Wiki
非线性、跳跃的知识管理和归档。
有明确层次和体系的知识

其中Evernote是目前最为广泛使用的云笔记软件。Leanote是我自己找到适合在科研工作中替代Evernote的云笔记软件。素签是我遍历了iOS可用的日记软件后选择用来进行日记、文学创作的手机app,功能单一但是有简洁的书写环境。LaTex不用多说了。三个主流博客软件,Wordpress功能强大,但是资源占用多。后两个可以在Github托管,可以使用Markdown生成静态网页。Mkdocs是我找到的一个维基系统,使用Markdown写作,可以支持MathJax公式和检索。OneNote有很多人推荐,我本人尝试使用过用来记生活常识、历史和地理,但是我用起来不是很习惯,所以没有坚持下去了。但是OneNote本身用来记录和整理通用知识的功能是非常强大的,读者可以自行研究、开发。TiddlyWiki是万维钢提到的他使用的知识系统 [4],我觉得很有意思就提一下,因为这个系统是”非线性”的维基,你可以按照任意顺序打开和排列维基条目。

6. 结论

写这篇文章花了我两天时间。我自己作为还在半路的实践者,觉得这其中还有很大可以开发和扩展的东西。很长一段时间我都在思考知识是什么,知识在我们大脑中的表现形式是什么,知识是如何产生和迭代的。这些思考最终产生了一个结论:就是知识有记忆时效性、层次性和关联性的,而我们的大脑所能记忆的细节又是那么有限。作为一个普通人而非记忆大师,我们最终在大脑中形成的知识实际上是一些概念和经验,而非具体的细节。我们所处的是一个信息爆炸而又缺乏秩序的时代,我们应该需要建立这样一种辅助的系统:通过整理资料、记录笔记、写博文、创建维基的方式,来强化自己对于知识的理解,扩充自己的知识库。这个过程耗时,甚至有时候我也不确定这样做是否就能加深对知识的理解。但是经过长时间的尝试之后,有一点我是可以肯定的,就是这种方式减少了我对同样信息的重复搜索,节约了时间也避免了分心。另一点我深刻理解的,就是你手上里的资料在你电脑里和在网络上没有区别,只有当你把它整理、转化为自己的理解时,它才成为你自己的知识。

参考资料

[1] Leanote官方主页,我认为是一款针对程序员和科研人员的笔记软件,https://leanote.com/

[2] Evernote官方主页,一款全能型云同步笔记软件,https://evernote.com/intl/zh-cn/

[3] 知乎 – 如何构建自己的笔记系统,https://www.zhihu.com/question/23427617

[4] 万维钢 – 《万万没想到》,Part Two – 笔记本就是力量

[5] 罗辑思维,第205期:这一代人的学习

[6] 我正在做的控制系统维基,http://wiki.xiaotiandai.com/control/

你好,2017!

又是新的一年。岁月匆匆,不给人时间回头看看,就又让人上路了。

今年更新了10篇左右的博文:

  • 新增的”C语言深度”专题来源于我在嵌入式课程助教过程中发现的C语言的错误使用。我觉得C和C++是机器人领域最重要的两个语言,所以希望在这方面增加一些内容。
  • 另几篇博文是介绍新发布的树莓派3代的。今年除了树莓派3,还入手了若干树莓派Zero。因为Zero很难买到,所以一下屯了5、6个。这批Zero准备用在智能家庭的节点中,但是应用场景目前还不明确,所以没有给大家做专题介绍。

明年的工作计划:

  • 承诺的智能家庭系统还没有完全开发完成,全部完成后会找时间公布。目前已完成的部分:中心服务器的部署,NAS,多媒体中心,一个传感器节点部署好了(已经上报了半年的温湿度数据)。二氧化碳、PM2.5传感器和无线组网模块选购好了,但还没有时间调试。另一个困难是控制数据的下发和传感器数据、系统参数的展现,我想基于BS架构(Flask + socket.io / Node.js + Ajax)。我没有网页编程的基础,而且中间涉及Real-time和asynchronous的问题,所以还没有时间解决。
  • More topics on Robotics. 实验室还是以机器人为主题的,去年有点跑偏了(嵌入式系统),今年重新回归到主题上。重点我想要关注的内容点有:增强学习、概率决策、机器视觉、ROS、机器(深度)学习。
  • 博主现在长期在国外生活,关于将网站转换为全英文的想法已有很久。但是还是一直很挣扎,考虑到很多内容对国内的读者会有帮助,所以今年还是保留双语写作。

最后祝大家2017年工作、学习顺利!

近日关注的几个KickStarter项目

KickStarter是国外最著名的众筹网站。项目发起者可以在只有基本idea的情况下提前发布产品信息,以获得来自个人的资金支持,达到满意的标准后再进行产品的实际生产,从而减少了产品发售的风险。 这几天在KS上比较热门的科技项目都是智能设备/可穿戴设备,这里我聊一聊几个我最近关注的项目。

1. Sweep激光雷达

项目主页:https://www.kickstarter.com/projects/scanse/sweep-scanning-lidar/description

sweep
▲ 图1. Sweep低成本激光雷达

激光雷达是机器人常用的传感器外设,用于快速扫描、感知环境存在中的障碍物。激光雷达通过激光旋转扫射,再测量激光返回时间的方式,对周围障碍物的距离进行快速估算。传感器输出的点云数据可以进行三维建模,最终辅助机器人进行导航。目前常用的激光传感器品牌为 HOKUYO,售价在几万至几十万元。传统的激光雷达使用光学振镜进行激光扫描,通过计算激光束相位差进行距离计算。而低成本的激光雷达通过电机控制激光的发射角度,使用视觉原理进行距离估算。在牺牲了扫描速度的情况下,大幅度降低了成本。关于低成本激光雷达的设计原理,可以参照CSK兄的博文:自制低成本3D激光扫描测距仪(3D激光雷达)

sweep-demo
▲ 图2. Sweep工作在四轴飞行器上(慢速摄影)

以下是由IEEE Spectrum网站整理的Sweep与其他常见激光雷达的参数对比。Sweep的价格只有专业激光雷达的1/5,但刷新速度(Scan Rate)只有专业传感器的1/4。其检测距离精度为1cm,精度为1 – 2%,可以满足一般的机器人地图构建与导航应用。图表中的 robopeak 现改名为 SLAMTECRPLIDAR 也在最近推出了新款 RPLIAR A2,在性能上相比一代做了很大提升 (10Hz刷新率),价格和Sweep也很相似。目前Sweep的众筹已经结束,最终筹款$272,990,共有1,010个支持者。官网上可以预购,价格为$255,折合人民币1680元。

sweep-spec
▲ 图3. Sweep与其他激光雷达的参数对比

 

2. Pebble 2智能手表

项目主页:https://www.kickstarter.com/projects/597507018/pebble-2-time-2-and-core-an-entirely-new-3g-ultra

pebble_cover
▲ 图4. Pebble智能手表第二代

大名鼎鼎的智能手表先祖Pebble再次回到KickStarter。这次他们带来的是最新的两款手表产品:Pebble 2和Pebble Time 2。前者是廉价型,后者为Premium高级版本。这次新版本的Pebble相比上一代的主要改变有:

1、增加了心率传感器。现在心率传感器已经是智能手表的标配了,Pebble自然要与时俱进;
2、增加了麦克风外设,支持语音信息回复,应该还可以通过Google Voice (Android) 和Siri (iOS) 进行语音控制);
3、核心处理器从Cortex M3升级为M4,有更大的信号处理能力;
4、在增加了额外的传感器之后,防水能力从50m下降到30m,但是依然足够日常使用;
5、Pebble Time 2实际上是上一代的Pebble Time Steel,Pebble Steel这个型号可能不会再推出。

pebble
▲ 图5. Pebble 2和Pebble Time 2

pebble2_colors
▲ 图6. Pebble 2有五种可选颜色

新产品的两个版本Pebble 2和Pebble Time 2两者的主要区别有:

1、Pebble Time 2的屏幕尺寸更大 ,同时使用的是彩色e-ink屏,而Pebble 2是黑白灰度e-ink屏 (e-ink即Kindle所使用的电纸屏,功耗极低);
2、外观和材质上,Pebble Time 2更佳,Pebble 2则看上去比较廉价;
3、当然,Pebble Time 2的价格比Pebble 2多70%。

Read more »

如何做一个好的博客

我从2010年开始写博客。在过去的五年多时间里,除了自然而然增长的博文数量外,我的博文质量也在潜移默化的提高。然而这种质量的提高并不完全是自然形成的,这是需要不断思考博客的核心价值,同时在不断迭代的设计中艰难地产生的。每个人对自己的博客有一个定位,也有自己对于好博客的一套衡量标准。我从我自己以往产生的经验,来谈谈我眼中的好博客应该是什么样子的。

首先,一个好的博客需要是原创的,至少是半原创的。没有人喜欢整个网站全是复制-粘贴来的博文,这不光来自复制过程中产生的版式错误,而是这种复制的方式的本质是欠思考的、不系统的。行为上的懒惰必然导致思维上的懒惰,这样得来的文章只会显得杂乱无章,而不能体现任何博主自身的意图。可惜的是,这样的博客占了很大一部分。我想很多人也许并无意将自己的博客给别人看,而只是作为自己知识的索引。然而即使是这样,系统的整理也是必须的。这是一个吸收与理解知识的最好机会,有时甚至比文章自身带来的价值更大。

其次,是核心主题。所谓主题,就是整个博客中的博文是耦合或者是弱耦合的。制造主题的方式有很多,其中之一就是采用博文系列或专题的方式。比如云飞实验室以机器人和嵌入式为主题,也开发了热门的树莓派、Arduino和STM32等专题。正如写文章一样,博文的内容大多是围绕一个主题的。如果偏题太多,同样就会失去博客自己的特色。记住,你的博客是一个博客,而不是一个分享一切信息的网站。想要很好的做到这一点,你需要有自己假象的用户。比如对我自己而言,我的假象用户是嵌入式工程师,机器人爱好者,Makers。我每考虑创作写一篇博文,都会首先站在读者的角度去考虑。我会去判断这篇博文对读者的价值是多少?他们是否感兴趣?能不能帮助他们/引发更深层的扩展和思考?在这个过程中会有很多取舍。可能会遇到你很想发布,然而偏离主题,远离读者的博文。这是需要避免的。

再者,我就觉得是博客设计。我所说的设计,不仅包括网站的CSS版式,也包含了文章内部的组织。总体上来说,就是要做到简洁。简洁就是去除不必要的元素,避免华而不实的特效、动画、插件等。这些元素有时会破坏博客整体的平衡性,也会让读者分散精力。简洁可以给读者创造出纯净的阅读体验。而美就会略为主观了。我所理解的美,包括文章的段落结构,图片的尺寸、配色、位置,示例代码的优美性。以我的经验来看,美是需要用心才能做到的。需要让自己变得沉静,敏感,细腻。美的产生与其说是与生俱来,不如说是精雕细琢的产物。对美的感受也有进化的过程(但我觉得总体上是向正方向前进的)。很多时候,我会去看自己很久之前的博文,如果觉得做的还不够好,会再仔细修改。我也经常从别人的网站和博客中吸取经验,学习如何更好的排版、安插图片和代码等。这些需要一个人的审美层次,然而更多时候是花费时间和精力去雕琢而成的。

这些是我多年来一直在思考和遵循的原则,今日突然想与诸位分享之,便有此文。

戴晓天
2016年04月21日 于 英国约克

两轮自平衡机器人 | 研究计划

我一直对自平衡小车十分感兴趣,最早在关注Segway的时候就想玩一玩自平衡算法(当时大约还是2010年)。然而那时一无业余时间,二无设计能力,于是搁浅至今。今年5月份回国的时候,这个想法重新占上心头,于是在淘宝选够了一款评价较好的平衡车,总价不过400大洋。谁知回到英国,自己又懈怠了下来,除了偶尔拿出来当玩具玩两下,也没有仔细深入研究。这样下去自然不行,然而深入研究确实需要不少精力,只能在此痛下决心一定要把里因外果弄清楚。

虽然之前没有正式做过平衡车,然后对于这个系统还是有所了解的,其中存在的研究问题大概如下:

● 硬件设计:电机选型、电机驱动、速度反馈传感器、惯性传感器MEMS、电源、电池、MCU、通信。因为硬件设计实在繁琐,其中原理并不复杂,调试却颇费功夫,所以直接购买硬件成品;

● 系统建模:两轮自平衡的系统模型与一阶倒立摆应该是一样的。系统模型并非必须,但是通过系统模型可以了解系统特性,也可以做一些软件仿真,方便控制器的参数调节。系统的最终模型可以是s域的传递函数模型 (transfer function) 也可以是时域的状态空间模型 (state-space model);

● 传感器数据处理:主要是对惯性传感器的数据进行滤波与分析。滤波的目的是排除系统的动态扰动以及传感器的动态噪声,主要算法应该是互补滤波器 (Complementary Filter) 和卡尔曼滤波器 (Kalman Filter)。互补滤波器的算法实现较简单,而卡尔曼滤波器虽然复杂但可以和状态空间模型结合,设计性能更佳的LQG控制器;

● 控制器设计:常用的为PID控制器和状态空间下的LQR (Linear Quadratic Regulator) 或LQG (Linear-Quadratic-Gaussian) 控制器;

● 任务设计及实时性保证:整个软件有实时性要求,倾向于使用免费的FreeRTOS实时操作系统。操作系统采用静态优先级调度,优先级基于任务周期。系统中的主要任务有:传感器采集任务、传感器滤波与分析任务、控制器任务、电机转速调制任务、通信任务。

整个研究对我来说有三个目的:
1)研究运动传感器数据滤波与处理;
2)研究系统建模与控制器设计;
3)研究FreeRTOS的使用方法以及验证相关的实时性理论。

因为还未阅读相关资料,以上设计计划可能还有遗漏、错误之处,日后发现再做修正。

实时系统研究意义的思考

要想弄清研究实时系统的意义,首先必须明确实时系统在整个人类生活中的角色。

实时系统的主要研究对象是工业控制,交通和航空航天,电力及能源,网络设备及网络服务。这些系统的稳定性很大程度上决定了生命财产与经济的安全性:如电力系统的短时间崩溃会导致工业和交通停滞,并可能带来生命财产事故;航天飞行器的软件故障,会导致与地面控制中心的失联甚至是坠毁,带来巨大的财产损失。社会的正常发展和秩序很大程度上依赖于这些实时系统的稳定性和可靠性。纵使我们不想如此,人类生活的方方面面还是很大程度上依存于并不稳定的软件系统。设想如果有这样一个软件漏洞,使得多个重要系统在同一时间失控,那么其带来的社会影响和经济损失将不可估量。 实时系统的主要研究目标:保障实时系统在时间和行为上的可预测性,设立可靠的软件设计方法;就是在预防和避免以上的不可靠情况的出现。

至于在当前计算机速度已经如此之快的情况下,实时性研究是否还有其必要性。

答案我想也是肯定的。在新的计算机结构出现之前,CPU速度的提升不等同于系统实时性的提升。CPU速度的提升显然会减少程序的执行时间 (execution time),但是对于从请求产生到得出结果的响应时间 (response time) 及IO的输出间隔的稳定性 (IO jitter) 依然没有明确的保证。与此同时,更加复杂的操作系统和计算机硬件也提高了这种不确定性,例如Cache缓存和内存分页带来的运行时间浮动。综上所述,CPU速度的提升无法带来实时性上的保证,依然需要依靠实时性分析来保障系统在时间上的可预测性。

南京创客联盟沙龙活动

12月23日,我受邀参加了南京创客联盟的沙龙分享活动。本次分享活动自定主题,我就想到了之前一直很想讲但是没有机会讲的话题:创客对于大公司的影响与颠覆。一直以来,新科技与新产品都是由大公司主导的:大公司设计、生产、宣传、销售;只有在大公司成功进入市场后,小公司才会考虑复制其产品,分一杯羹。

然而在现在,创客及初创公司(start-ups)借助着新的工具:快速制造、众筹、开源硬件、互联网及移动互联网等,他们的能力实际上是被放大了。于是,现在才会出现Arduino、Pebble智能手表、Oculus Rift眼镜这些颠覆了产业的新产品。他们开拓了新技术的先河,而让大公司反过来被动的去跟进,我觉得这个非常的不容易;而且,随着基础工具和设施的完备,这种通过创客起步的初创公司我相信也会越来越多。对此,我是非常期待并且乐观的。

54997ff615523

54997ff7ee4f754997ff8f2673 54997ff9e4668

54997ffba3f8c54997ffcc3846

54997ff519e96

Started to learn Ada and Real-Time Java

Having been mainly using C/C++ in real-time systems for many years, this is my first time to seriously consider other languages which has the capability and primitives to handle concurrency and meet the requirement of hard real-time systems.

During my time looking for a research position in Real-time Systems Group at University of York, I firstly realized there is another language – Ada – which has been used in military, aerospace and industrial systems for more than three decades. It is a shame that I didn’t get a chance to know its name, even I was working in industrial and automotive filed. Ada has a fruitful environment for real-time systems design and was first introduced by the US Defense. It has advanced features such as rum-time checkingparallel processing and OOP support.

To be honest, according to my previous experience with the Java language, I never expect it to be used in real-time systems. However, things are changing and there is a trend to use RTSJ (Real-Time Specification JAVA) in control and military peripheral systems (but not core systems). I think it will take a long time before RTSJ displaced the dominant position of C in embedded systems, but I think it is worthy to learn the language features that Sun and IBM are trying to change with current Java language.