LEGO可视化控制语言:NXT-G

在十一月份TIOBE语言排名中,一门特殊的编程语言NXT-G首次跻身跃入排行榜的前20,位列第17名。NXT-G编程语言的特殊之处在于其并非是提供给专业程序开发者的编程语言,而是由丹麦著名玩具制造商 乐高(LEGO)公司为NXT机器人玩具设计的可视化编程语言。

头脑风暴(Mindstorms)是乐高出品的可编程机器人系列玩具,NXT 2.0是目前乐高机器人系列的主打产品。第一代Mindstorms机器人于1998年问世,定名为RIS(Robotics Invention System),搭载了由日本瑞萨电子提供的8位微控制器,由专用红外接口向处理器中载入设计好的程序来控制机器人行为。时隔8年后,乐高于2006年发布了新一代机器人Mindstorms NXT,并在2009年推出了功能升级后的NXT 2.0,以满足玩家在组装机器人时对颜色传感、蓝牙设备等高级功能的需求。

NXT的核心是一块被称为智能积木的处理器,能够通过RJ12规格的4芯水晶头线缆接受四路传感信号,并能够控制三个马达协同运转。此外,NXT智能积木搭载了一块100×64像素的单色LCD显示器,可以在机器人运行中通过内置的层级菜单接受用户的按键命令或组织简单的处理步骤。

NXT-G是对应智能积木处理器的可视化编程控制语言,能够帮助机器人实现简单或复杂的控制流程,如马达驱动、传感器输入合并、完成计算任务并实现流程控制。完成后的程序通过USB或蓝牙传输将程序和音频文件装载到NXT模块中,以赋予LEGO机器人生命,NXT还支持模块间文件拷贝和通过智能手机的蓝牙连接进行实时控制。

NXT-G的交互式编程环境基于国家仪器(National Instruments)的LabVIEW软件提供,LabVIEW最大的特色就是以图形化编程G语言来组织程序,编写程序的展现形式为具备特定逻辑结构的框图。各模块功能实现则由LabVIEW中能完成各项编程任务的庞大函数库提供,包括数据采集、数据显示、数据存储、GPIB通用接口总线、串口控制、数据分析、蓝牙通讯等。此外,LabVIEW可视化编程环境提供了与传统IDE环境相同的程序调试工具,如断点设置、以动画方式显示数据及其子程序的结果、单步执行等功能。

NXT-G编程环境对Windows和Mac OS X都提供了良好支持。除了NI LabVIEW软件外,还有不少支持NXT-G编程的软件程序。包含NXT-G零售版和NXT-G教育版、LEGO基于LabVIEW简化定制的RoboLab工具,乐高机器人专用的汇编指令NBC,以及基于NBC编译器实现且语法与C语言相似的高级语言NXC等。

目前乐高公司已将NXT智能积木的固件设计开源,BricxCC(Bricx Command Center)支持开发者使用C、C++、Pascal、Forth以及Java语言完成乐高RCX模块的程序控制。同时,BricxCC能够在NXC(Not eXactly C)和NBC(Next Byte Codes)的支持下完成面向LEGO Mindstorms NXT机器人的编程控制。

在教育应用方面,LEGO每年还举办充满乐趣的主题聚会LEGO工程大会,旨在为LEGO MINDSTORMS系统在教育社区和社团中的推广提供交流机会。在一年一度的LEGO工程大会上,教师们能够相互分享经验和想法,集思广益为LEGO MINDSTORMS在课堂上的应用寻找新的思路。

NXT-G在TIOBE语言排名中的提升,从一个侧面反映了可视化编程语言的流行趋势。如果你是喜欢自己动手又对自动控制感兴趣的程序开发者,不妨尝试一下乐高NXT积木和NXT-G编程环境,LEGO一定会为你带来丰富的体验和乐趣。

本文曾发表于《程序员》杂志-2010年12期-“程序天下事”栏目。

赤道仪使用体验

使用望远镜追踪目标天体进行观测时,由于地球自转引起的天体视运动,会让观测视场内的恒星产生视差偏移。而在望远镜的底部安装赤道仪,就可以帮助观测者抵消地球自转造成的视觉差异。

晚间的星空,以北天极和南天极连接的自转轴为中心旋转。而赤道仪的赤经轴与地球自转轴平行,当赤道仪架载望远镜沿赤经轴自东向西同步转动时,就可以抵销地球自转的影响,令目标天体的影像固定于视场内,方便观测和长时间曝光的深空拍摄。

最近在国家天文台曹子皇同学的帮助下,学习了Skywatcher EQ6/HEQ5 PRO Synscan赤道仪的使用方法。EQ6 SynScan赤道仪架设起来后,整体感觉非常扎实,也比想象的沉重很多。SynScan赤道仪具备自动寻星系统和PC端的控制软件,同时配备黑色的设置手柄,能对其进行全面运动控制,并可导入内置目标天体数据库中的参数。

在观测前,需要通过极轴镜观测,将北极星导入观测中心的小圆圈中,以保证赤经轴(极轴)对准北极星,即赤道仪的极轴和地球的地轴平行。之后使用控制手柄的四个方向键,控制赤经或赤纬轴转动(可以设定1-9种不同的速度),将目标天体移入望远镜视场中心。更详细的调节方法,可以参见文章极轴镜校正及使用,以及漂移法调整极轴,对于白天观测日全食的极轴调整,还可以参考经纬度计算法的讨论。

为拍摄方便,望远镜目镜可以替换为数码相机的转接板,以连接数码相机或者摄像机,或者直接加载CCD板,通过USB线连接到电脑中采集图像。为了提高拍摄质量,还可以对同一观测天体曝光数十张相片,然后用专门软件合成为一张深空照片,以提高降噪能力,拍摄出效果震撼的深空摄影照片。

额外提一下,学习赤道仪使用时遇到兴隆观测基地总工程师姜晓军老师,听他聊了一些观测器材的选型经验。姜老师是天文观测器材方面的骨灰高手,也是子皇同学的偶像,健谈、谦和,人很有趣。

志愿者招募:2009日全食直播现场

2009年7月22日,长江流域将出现罕见的日全食天象,持续时间超过6分钟,是近年最壮观的天象之一。届时,中国科学院国家天文台、微软亚洲研究院、中国科学院计算机网络信息中心、中国科学院上海天文台等四家单位将联合进行面向全球公众的日全食直播活动。

全食多路联合直播是2009国际天文年中国区的核心活动。届时,将通过设在昆明、重庆、宜昌、武汉、苏州、上海、台北等地的观测点进行联合直播,通过CNGI下一代互联网试验系统将直播点的日食数字高清视频信号传输至北京直播中心,并通过广播通讯卫星、互联网等方式免费向全球发布。

为保证活动顺利推进,现公开招募直播活动志愿者5-10名。被选中的人员经过培训后将派往上述(台北除外)观测点,作为现场工作人员。志愿者的路费和当地食宿将由直播活动组委会承担。

志愿者的必需要求是:熟悉望远镜和赤道仪,熟悉日全食和四季星空的知识。志愿者优先考虑的条件是:有过日全食观测或者太阳观测的经验,熟悉Windows Media软件,有很好的团队合作精神。

志愿者招募活动将在6月底前完成,感兴趣的朋友请在6月14日前发送Email与中科院国家天文台崔辰州博士联系:ccz@bao.ac.cn,在邮件中需要说明的内容包含个人基本情况、对上述要求的满足情况等。欢迎感兴趣天文观测的朋友报名参加。

物理运动模拟引擎

Phun源自于瑞典UMU大学硕士生的毕业论文,可以模拟物体的各种物理运动规律。使用者可以通过鼠标绘图来创建物体,并让物体实验重力、摩擦力、弹力、加速度等等不同的物理规律。

C++编写的Phun使用了OpenGLGLEWSDL(用于窗口管理)SDL_image(用于读取图像)以及boost等类库,目前Phun提供了Windows和Linux版的免费下载。Phun为我们展现二维物理规律的模拟,实现运动引擎的开源库还有Java实现的Phys2D和C++实现的Box2D项目。

三维物理运动模拟方面,在Playstation 3,XBox 360,Nintendo Wii等平台的游戏设计上,曾有不错表现的3D游戏引擎Blender同样使用C++实现,使用Java实现的类似引擎还有JBullet,JBullet给出了在线演示的3D。

除此之外,还有大力推荐的Ubigraph,这是一个图论动画生成工具,可以快速生成图论模型并展示其三维结构,演示各种图论算法推算的过程。

相关的项目还有很多,在iPhone平台上,类似的运动模拟引擎是Oolong Engine 2,开发者在站点上放置了在iPhone上模拟的视频。好玩的东东还有Bullet等等,以后或许一有用,先记录在这里。

近期文字汇总

常在邮件列表中收到宇宙驿站崔老师发来的更新提示,催促我们时常更新博客内容。作为驿站大家庭的一员,我的站点最近更新也不太频繁,可能是写的东西不那么集中,都分散在各处了。试图将这些内容整合后放在一起,但是终究还是不太方便,所以就在这里简单列一下。

前不久开通了新的SUN技术博客,目前分为GISJavaNetBeansOpenSourcePersonalResearchRubySun等几个大类。同时也会有文章或教程更新在Chinese Functional CA的团队博客上,这里的文章使用英文撰写,比方说Google Maps on Rails with NetBeans这篇Rails开发的教程。

此外,一些原创的新闻和文章还发表在InfoQ中文站上,关注的方向主要是动态语言、开源项目和开源社区的发展,分季度的简单统计如下:

07年第四季度:

  1. 开源文档《OSWorkflow开发指南》发布

  2. 从优秀到卓越:Rails发展之路

  3. 从Workshop起步:谈Rails专业培训

  4. 从Google看Ruby语言增长趋势

  5. 关注:Ruby 1.9版本即将发布

  6. InfoQ中文站Ruby社区2007年度十大新闻

08年第一季度:

  1. 关注部署:谈Rails应用的最后一公里

  2. IBM网格计算:developerWorks专区使命完成

  3. NetBeans文档本地化项目持续推进

  4. 简体中文成为NetBeans博客大赛指定语言

从07年11月份开始,帮程序员杂志撰写程序天下事的动态语言专栏,非常喜欢这个专栏,感觉这是到目前为止,写的最有意义的文字之一,争取再接再厉,做好为期一年的撰写。

学习之余,周末和同学一起组织北郊登山队活动,拍摄科普宣传短片,只是MSN Sapce的文字,真的是疏于更新了。

总体来看,还是比较能写的。期待今年还会有更多的惊喜等待在前面。