Category Archives: Reports

「机器说」- 机器人领域一周关键词 (170531)

# Alpha GO 2.0

上周最大的看点就是Alpha GO与柯杰的巅峰对战了。在经过一年的迭代之后,Alpha Go 2.0终于登上神坛,最终以三局全胜拿下了比赛。根据之前几个月Alpha GO在平台上对决的不败表现来看,柯杰本来就胜望不大,这次比赛的结果也就在预料之中了。然而这次Alpha GO的胜利却有标志性的意义:那就是人工智能已经可以挑战人类认为的“高级”活动了。随着这场胜利到来的是新的一波“人工智能威胁论”:如果机器不仅可以完成普通的体力劳动,还可以完成脑力甚至是创造力的活动,那么很多工作都会被机器人取代。每一次生产工具的革新都将带来社会分工的变革:从工业革命的历史中看,具有人工智慧的机器人势必会蚕食大量原本属于工人的工作;然而社会的进步就是以这种牺牲为代价的,通过工具改良提高的社会总体产值,会反过来影响这些因为新技术失业的人,迫使他们转向新的行业。我们不能还和18世纪一样,因为工具威胁到了自己的工作,就加入了反对的阵营。我们不能忽略这种革新是良性的。当然,想要机器与人和谐相处,我们需要对它们有足够多的认知和控制。但正如凯文凯利说的一样:我们为了达成目标所赋予机器的自由,最终会让我们失去对它们的控制,这是必然的、也是需要我们接受的。

# DJI Spark

“晓” (DJI Spark) 是大疆继Phantom和Mavic之后的新一代无人机。本次大疆瞄准了小型、自拍无人机市场,独特的人脸识别开机起飞与手势识别操控,彻底让Spark摆脱遥控器控制。“晓”的最终售价应该是在3000元左右,是Mavic的一半。当时Mavic出来的时候就心动的想买一个,这次Spark的定价总算是在一般用户的承受范围之内了。然而我还是对这款无人机的定位表示怀疑:

  • 体积上的缩小势必降低了整体性能(最高航速、续航时间、成像清晰度4K降到了1080P,抗风性也会下降);
  • 和Mavic相比,Spark的价格虽然亲民,但是功能上越来越接近“玩具”级别。普通人可能不愿意花这个价格买一个不上不下的产品,可能更愿意买各方面都比较成熟的Mavic,尤其是便携性上Spark也没有太大优势。加上现在越发收紧的无人机管制,可能真正的用户需求量不会很大。

无论如何,这是大疆从专业级向业余级过渡的产品,也让大疆产品线的层次越发分明。

(信息来源 – 机器人Robotics China)

# FCIS

FCIS (Fully Convolutional Instance-aware Semantic Segmentation) 是在COCO-16上获奖的图像分割算法,该算法可以识别、标记图像中的物体种类,从而进行精细的图像分割:

该项目最近在Github上开源了,项目地址在:https://github.com/msracver/FCIS. 我并不太了解图像分割技术,所以没有去了解具体的技术细节,有需要的读者请自行解读。

# Deep Voice 2.0

百度研究院近日发布了一款基于神经网络构建的文本-语音转化 (Text-to-Speech) 系统Deep Voice 2.0,这是今年二月份发布的Deep Voice的第二版。但当时的系统只能转化20小时语音,而且只有一种声音。不到三个月的时间,这个系统得到大幅升级,能够生成数百个小时的语音,拥有数百种声音。我去Baidu Research的相关网页体验了一下,生成的合成语音真假难辨:http://research.baidu.com/deep-voice-2-multi-speaker-neural-text-speech/. 这项技术配合已经比较成熟的Voice Recognition,就可以完成语音信息的输入-输出闭环了。然而相比主流的语音生成模型技术,通过神经网络生成似乎缺乏灵活性,这个技术百度要如何完善和应用也还不明朗。

(信息来源 – 新智元)


「机器说」by 云飞机器人实验室:关注机器人技术的最新发展,三分钟为你解读每周机器人领域的核心关键词。每周一篇,在我的微博、知乎专栏和云飞机器人实验室网站同步更新。


 

「机器说」- 机器人领域一周关键词 (170521)

# Google I/O大会

5月17日,谷歌在山景城举办了本年度的谷歌I/O开发者大会。本次大会上谷歌重申了自己AI first的战略,不断将最新的机器学习技术应用到语音识别和图像处理产品中。此外,谷歌宣布了下一代的TPU,Cloud TPU,其实是将多块TPU集成组合到一个TPU版图上:

这种任意组合的方式可以让谷歌根据应用需求更自由的选择配置,为自己的ML服务提供原动力。谷歌提到自己也将提供TPU云租赁服务。

谷歌将人工智能方面的工作综合到Google.ai之下,并提出AutoML的方法 – 用神经网络(一个基于RNN的控制器)来设计神经网络的结构。 这种方法我理解的就是通过实验-反馈的方法来获得最优架构的过程。

最后,谷歌发布了用于移动端的机器学习库 – TensorFlowLite,希望助力移动端语音识别、视觉搜索和增强现实的发展。

谷歌在ML和AI上一直独领群雄,而且一直是做让大众和用户受益的产品。这次I/O大会提到的将Google Assitant广泛应用到硬件产品中,也是我十分看好的应用。虽然亚马逊现在先行一步,已经将Alexa做在Echo上。但是谷歌凭借其在语音识别和硬件上的经验,应该很容易就可以后来居上。

(信息来源 – 机器之心)

# Google Lens

Google Lens是在本次谷歌I/O大会上发布的一款图像识别和理解软件。发布会上demo了这款软件实现拍照识花、拍WiFi密码自动连接路由、通过店面照片调取评价等功能。

之所以单独说这个软件,是因为我个人觉得这个会是划时代的killer级应用。目前谷歌积累了大量图像识别和图像语义理解的技术,和Google Assistant的语音技术结合后,实际上就解决了机器人的一个大问题 – 自然语言交互接口。通过看和听两种感官,实现对命令和意图的理解。虽然这个demo展示的功能很少,但是如果这个idea实现,那么机器可以将“视听 – 理解 – 行动”这个链条中最重要的“理解”给填补上。我们离真正的通用人工智能也就不远了。至少,可以通过视觉的额外输入,来和语音形成互补或加强。比如拍一张照片后问:“这个狗的品种是什么?”未来可应用的空间其实非常大。

(信息来源 – Techcrunch)

# 激光雷达之争

近日Waymo指控Uber盗用激光雷达专利的官司有了新进展。涉事前Waymo员工被停工,相关窃取机密文件也被要求归还Waymo. 这起案件被看作自动驾驶专利案的开端。激光雷达在整个自动驾驶层面的地位毋庸置疑,也是各大公司在实现自动驾驶道路上的兵家必争之地。相比国外公司,中国公司在自动驾驶专利上的布局还不足。等到技术差异化越来越小时,势必需要依赖核心专利来增强自己的竞争力,国内的自动驾驶公司现在要慢慢在技术专利上积攒优势。

(信息来源 – 车云)

关注「机器说」by 云飞机器人实验室:关注机器人技术的实际发展,三分钟看完每周机器人领域的核心关键词。每周一篇,微博、知乎专栏、博客同步更新。

你好,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 »

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

我一直对自平衡小车十分感兴趣,最早在关注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的使用方法以及验证相关的实时性理论。

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

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.

What is the BEST Hardware Platform meaning to me

Last week I tried to make my new Intel Galileo running a basic 14 x 7 LED Matrix program which was working perfectly on my old Arduino UNO. This Intel powered opensource platform has a CPU frequency of 400MHz while the Arduino only got 16MHz. The interesting thing I found is, after I spent 3 hours to port the program to Galileo and executed it with full of expectation, the program turned out to work crappy: the LED matrix looked unstable and each pixel had a different luminance.

I expected the Galileo, which has 20 times more computational power, should have an brilliant performance and blows my Arduino two streets away. But the thing is, is it really appropriate to run a real time program on a Linux based platform? And is it fair enough to compare two platforms in one certain application?

The answer is NO, and this is exactly the motivation for me to write this article. During the last year, I had collected and played enormous platforms, either for using in my project or simply explore the features of a new platform. During this process, I realized that tools are just tools and there is no BEST platform exists. To make it clear, I will compare some of the platforms I got in hand and analysis their own advantages and disadvantages, and finally make a conclusion.

1. Linux Platforms

Well, apart from the aforementioned Intel Galileo, I got the popular Raspberry PI and less known pcDuino :

DSC05191_out
Figure 1. Raspberry PI Model B

DSC05195_out
Figure 2. pcDuino version 2

Generally speaking, these two platforms have a similar performance and functions: both are working at a high frequency, both running Linux operating system and all of them have some kind of GPIO extensions and USB connections. The Raspberry PI has a large community and no matter what problem you encountered, from running a program in desktop environment to compiling the Linux Kernel, you can find your answer. On the other hand, the pcDuino is not well supported and also not even well documented. So why I bought another Linux single board computer when I already got one? The answer is the additional Arduino connectivity of the pcDuino.

The pcDuino can seemless ‘run’ Arduino sketch locally without the need to adhere another Arduino board. Is this convenience really worth 60 pounds? Well, I think so. This design eliminates the overhead of communicating with additional hardware through serial and makes my life easier to develop more complex project where the need of hardware functions like GPIO / ADC / DAC is an essential. Apart form this aspect, I couldn’t find other difference between these two platforms, and it is also for this reason that I decided to buy one more Linux platform.

2. Visual Sensors

I am pretty new to computer vision and I only started to investigate different camera since the beginning of this year. What I got so far are two normal web cameras, two PS Eye cameras for Playstation 3 and a Kinect from Microsoft:

DSC05200_out2
Figure 3. My Collection of Cameras and Visual Sensors

Among them, the Kinect is a star which is being used by hundreds of institutions and researchers in recent years. It is actually a stereo camera which can give you depth image of the scenario. What I have done so far is simply to configure the SDK and run some examples on Processing, a JAVA programming software for interactive user interface. It is a perfect sensor for robotics and can be used in applications such as V-SLAM, 3D reconstruction and manipulator as what has been done with the Boris, the newest robot invented by Birmingham University. The only thing that prohibits me from using it further, is the complex toolchain that it comes with. As first released only for XBOX 360, it is not well support by PCs and you have to use opensource packages like OpenNI and the driver from PrimeSense to make it work.

Another idea to play with stereo vision is to use a pair of monocular cameras and I found the Sony PS3 Eye is an ideal platform for me. It is cheap (8 pounds each), fast (60 fps @ 640 x 480) and fairly easy to use. You can simply buy a SDK from the company Code Laboratories and you can simply use OpenCV like what you have done with other web cameras. The adjustment and configuration of two separate cameras are tricky but it is a good idea for researchers who want to have a feeling of basic principles about stereo vision. What really interested me about this camera is it is really easy to use and can also achieve a competitive frame rate compared to these professional industry cameras. It is indeed a good platform for fast object tracking, but the thing is, it is not general and you should buy a SDK before use. So if you want to make it a product for customs, it would be problematic for the software license. So sometimes we may prefer to use off-the-shelf web cameras.

If you tried different cameras, you may find there is even difference between web cameras. I bought this HP HD2300 after I got my previous Logitech C270. Why? Simply because it has a higher and crisp resolution and it has a better white balance performance which is important for vision systems for detecting color features. But why I still keep & use the Logitech C270? Well, for CPU with limited computational power (such as the Raspberry PI), higher resolution doesn’t mean higher performance but resulted in lags and failures.

3. Microcontrollers

DSC05202_out
Figure 4. Microcontrollers I got in my personal lab (AVRs)

DSC05208_out
Figure 5. Microcontrollers I got in my personal lab (Cortex-M3 / M4)

(To be continue)

第三届谢菲尔德大学搜救机器人比赛

这个月月初参加了我们学校的搜救机器人大赛:谢菲尔德自动工程系搜救机器人比赛 (ACSE Robotic Search and Rescue Competition) 。该比赛的目标是设计一个移动机器人,通过远程视频控制的方法让其通过一个模拟的搜救环境,并在最短时间内到达终点。该场地模拟了很多搜救过程中可能出现的障碍:重型物体、斜坡、坑洼路面、吊桥、狭窄的通道等。图为当天的比赛场地:

DSC01711
Figure 1.  比赛当天场地实景

这个比赛的难点在于机器人的结构必须能应对复杂的场地,并且参赛队伍在比赛过程中无法直接看见机器人所在环境,只能通过远程视频的方式对机器人进行无线控制。这次我采用的架构为Arduino兼容的大谷Wild Thumper机器人控制板 + 树莓派:由Wild Thumper控制板进行电机控制与传感器采集,并通过树莓派实现远程控制与视频传输,两个系统之间通过TTL串口进行通信。PC端使用Processing对机器人实现控制,并展示当前的运行参数与传感器数据。

DSC01774
Figure 2. Wild Thumper(左) + 树莓派(右)的配置

DSC01783
Figure 3. 机器人实体(正面)

DSC01785
Figure 4. 机器人实体(侧面)

机器人所用的摄像头为树莓派官方最新发布的摄像头模块RaspiCam,该模块使用OV5647芯片,图像像素为300万,视频支持1080P@30fps。 摄像头模块通过软排线与树莓派的CSi接口相连接,并通过云台增加了倾斜方向的自由度。视频采集与传输使用Raspivid + Netcat + mplayer,为了提高传输速率使用了UDP协议,并且将采集像素下降到600 * 480。摄像头通过热熔胶固定在舵机云台上,图为摄像头的安装位置:

DSC01775Figure 5. 机器人摄像头特写

DSC01700 Figure 6. 无线视频传输调试

无标题2_副本
Figure 7. 比赛现场 之1

无标题1_副本
Figure 8. 比赛现场 之2

机器人硬件配置清单

核心主控 树莓派 Model B
辅助控制 Wild Thumper (Arduino兼容)
底盘 大谷4WD Wild Thumper Chasis
摄像头 RaspiCam + 单轴云台
传感器 3轴加速度/陀螺仪 + 3轴磁场传感器
电源供电 20C/5000mAh 2s锂聚合物电池+ USB备份电源5V 6000mAh