用“飞来咒”控制你的直升机

标签: 控制 直升机 | 发表时间:2011-08-05 10:50 | 作者:(author unknown) 风行水上
出处:http://www.guokr.com/
/gkimage/tj/62/7d/tj627d.png

DIYer:puzzlebox
制作时间:一星期
制作难度:★★★★★
GEEK指数:★★★★★

这个制作会向你展示如何拆开一架遥控直升机,然后修改它的远程控制硬件使之能够通过开源的电脑软件来控制。更重要的是,它可以通过常见的消费级 脑电图 头戴式感应器感应到人脑的专注和放松状态,进而控制直升机的飞行!

项目中用到的软件包含两个应用程序,Puzzlebox Synapse和 Puzzlebox Brainstorms 。前者连接到市售的消费级头戴式脑电图感应器,比如 NeuroSky MindSet 或者 Emotiv EPOC 。后者连接到从遥控器拆出的发射芯片上,依据Puzzlebox Synapse给出的信号向直升机发送飞行命令。这些软件(包括源代码)可以在 Brainstorms Puzzlebox 的网站下载。



1   材料和工具

/gkimage/jv/pq/bb/jvpqbb.png

/gkimage/a1/6n/8y/a16n8y.png

○ 一架遥控直升机
○ 头戴式脑电图感应器,比如 NeuroSky MindSet 或者 Emotiv EPOC
○ USB转串口线,可以设置任意波特率

● 示波器
● 逻辑分析仪
● 烙铁和焊锡(可选)
● 连接线和万能电路板(可选)
● Puzzlebox Synapse和Puzzlebox Brainstorms软件

开始干活之前,拆解直升机。充电并安装好电池,确定所有部件都工作良好之后再开始检查或拆卸单个部件(译注:开拆前别忘了取下电池,不要带电拆卸)。你也应该事先熟悉直升机的基本控制,包括如何设置,基本控制和飞行特征。这里我们用的直升机是一架 Blade mCX2


2   检查遥控器组件

/gkimage/qi/a2/v9/qia2v9.png
  • 首先要拆卸和检查遥控器电路板的组件。弄个显微镜记录制造商的名称和各种芯片的编号和数目可能是有用的,这对研究电路的功能和通讯协议的时候有帮助,可以在下一步用 示波器逻辑分析仪 工作时节省时间。我们用的遥控器是 Blade MLP4DSM

/gkimage/jl/5x/e2/jl5xe2.png
  • 遥控器上有4个控制飞行的遥控通道:
A. 油门(在空中上升/下降)
B. 升降舵(前进/后退)
C. 副翼(左右转向)
D. 方向舵(顺时针/逆时针旋转)

/gkimage/t8/da/au/t8daau.png
  • 这两个操纵杆连接到 电位器 上,能够控制电位器的输出电压。电位器与电源相连,抽头连接到 Atmega88PA 单片机的端口上。

/gkimage/ax/gt/dn/axgtdn.png
  • 单片机测量输入电压,然后转换成 PCM 数字信号传送到发射芯片。发射芯片通过 Spektrum DSM2 协议和直升机进行通讯。

/gkimage/sq/fn/j1/sqfnj1.png
  • 简要说明:这里的说明可能不是100%准确,但却是一个简要有用,易于理解的可视化说明方式。

/gkimage/hm/51/bo/hm51bo.png
  • 把电类比成水可能会简单一些,水通过管道而不是电线或者电路板上的印刷线路流动。如果你测量水压或者管道中某点的水位,就相当于测量电压。管道的直径就是电路可接受的最大电压。测量在某一点单位时间内通过的水量相当于在电路中测量电流。想象高处不断落下的大水滴,这是一个高电压,低电流的电路。而一场爆发式的洪水,是一个相对低电压但是大电流的电路。也正是由于这一原因,放大器(它们放大电流)通常被认为比高电压还要危险一些。

/gkimage/n7/lf/8x/n7lf8x.png
  • 这些电池充当着水源的角色,和水(电力)通过管道(电路)流动的目标。连接在遥控杆上的电位器起的作用就像管道中的阀门,能够改变之后管道中的水位(电压)。比如说,当油门摇杆处在最低的位置,相当于阀门的转子叶片完全关闭,所以管道中没有水流动(电压为0)。当摇杆在最高的位置,阀门开启,后面管道的水位(电压)则处在最高位置。

/gkimage/qz/pi/fl/qzpifl.png
  • 如果水管途中经过一个水轮,水轮转动时就能驱动直升机的旋翼。这里可以看出越多的水冲击水轮(电压越高),轮子和旋翼就转的越快,使直升机飞的越高。不过这里讨论的摇杆和电路在遥控器而不是直升机上,所以需要一些额外的中继步骤。
  • 在这个假想的例子中,微处理器(单片机)测量管道中的流水水位。这个数字代表着电压和摇杆的当前位置。这个数字将被转换成数字格式并且通过发射芯片发射,数目对应于各操纵杆的这些数字发射到直升机以后,直升机上的接收器传送这些数据给微处理器,在那里数字信号最后转化成用于驱动浆叶和舵机的模拟输出。

3   将控制电路板连接到示波器

/gkimage/z1/ew/9i/z1ew9i.png
  • 利用一个示波器,我们可以探测微处理器和发射芯片之间通讯信号的特征。把示波器的探头轮流接到发射芯片的每个引脚和地线上,直到找出哪个脚用于信号传输,那些脚是电气地线。调整示波器的灵敏度将使显示的图像更加清晰可见。最重要的是,我们将可以确定我们的遥控器发送一个数字信号,而不是相反的 模拟信号
  • 另外一点也很重要,就是我们可以测量数字信号的电平电压,来确保我们的USB转串口线可以产生和接收相同电平的信号。如果不是这种情况,就需要一个简单电平转换电路来变换信号电平,以适合现有的USB转串口线。

/gkimage/9n/l2/cw/9nl2cw.png
  • 在第一幅照片里,下边沿附近的亮点显示了数据包(又名数据帧)的发送,我们想要知道每一个数据包内含的信息,为此需要使用逻辑分析仪。

/gkimage/5k/0f/if/5k0fif.png
  • 在第二张放大的照片中可以看到,在数字信号的垂直边沿上,部分线条将随着操纵杆的操作而闪动。这表明每个数据包的内含数据都随着对摇杆的操作而变化,变化方式随通道不同而不同。
  • 更具体的讨论和示波器的使用方法超出了本教程的范围,暂且不表。

4   连接逻辑分析仪

/gkimage/wi/02/bb/wi02bb.png
  • 一个逻辑分析仪能够帮助你抓到从微处理器发送到发射芯片间的每帧PCM数据包。显示并且解码它们。在这个项目里我们用了Tektronix 1241逻辑分析仪。 Saleae Logic 软件能够帮助我们精确测量每帧数据发送的频率(22ms一帧),还有数据格式,位数,每个字节数据的格式(8个数据位,无效验,1个停止位),波特率(133000波特)。每帧数据中包含14个可以用十六进制方便表示的字节。
  • 注意:波特率是相当重要的。最接近我们使用要求的,并且被大多数串口设备(比如项目中的USB转串口线)支持的标准波特率是115200。但这离我们的无线发射频率差距太远,开始的尝试失败了。所以选用一个转换芯片允许任意设置波特率的USB转串口线就显得十分重要。在之后的版本里我们选用了一个基于 FTDI 芯片的版本。(FT232 USB-Serial 'UART' IC,详见最后的说明。)
  • 同这一步骤有关的是Saleae逻辑分析软件捕获数据的记录文件示例。在第一个文件示例中油门摇杆完全出于最下方,而在第二个文件里油门摇杆始终处于最上方。更多摇杆位置的数据实例和讨论以及逻辑分析仪的使用超出了本教程的范围。

/gkimage/u4/03/x1/u403x1.png
  • 简要说明:在我们之前的比喻里,我们说水流的水压(水位)可以类比为电流流过电路时的电压,由于操纵杆控制的阀门而升降。然而当我们使用示波器的时候可以观测到,在微处理器和发射芯片之间的信号是数字的,而不是模拟的。这实际上意味着管道要么充满水要么枯竭,没有中间状态。通过两种极端状态的变化,在管道中发送二进制数据。
  • 用另一种方式思考,想象管道两端分别有着发送者和接收者。在这种情况下,发送者是微处理器(因为它知道将要发送的数字值)而接收者是发送芯片。试图通过调节管道中的水流发送信息非常缓慢,所以他们采用了手电筒互打莫尔斯电码的方式。每隔一段时间,接收者探头进入管道观察情况。同一时刻发射者要么打开手电表示一个1,要么关上手电筒将之表示为0。每次发生这种情况,称作一个位(bit)的发送。这会连续快速发送8次,形成一个字节(Byte)。如果每个词的一个字母是一位,一个词就是一个字节。逻辑分析仪还告诉我们微处理器朝发射芯片说的每个‘句子’有14个‘词’,这个句子包含了所有的摇杆位置和每个运动方向的信号。只要遥控器开启,完整的句子每秒重复约45次(每22ms一次)。波特率非常重要是因为它代表了发射方和接收方之间预先约定的信号时间间隔。换句话说,如果发送方每五秒钟发送一次闪光,而接收方每十秒钟看一次管道,他就只会记录到一半的信号,并且将它记录下来以后,实际上每个位都是错的。当我们说波特率是133000的时候,实际上这一意味着每秒钟发生的闪烁高达133000次!

5   拆焊发射芯片

/gkimage/37/rt/8z/37rt8z.png
  • 在使用示波器观察微处理器和发射芯片之间的数字信号,并使用逻辑分析仪对 串行 通讯协议进行解码之后,通过软件遥控直升机的道路就变得清晰了。我们的软件会绕过所有其他组件,直接通过USB转串口线同发射芯片进行通讯。如果这一步不顺利,我们还有一个替代方案。可以使用 Arduino 输出模拟电压来模拟电位器的输出电平。

/gkimage/bo/yd/ph/boydph.png
  • 由于发射器芯片实际上是一块单独的电路板(见附图),而且在两个引脚之间有足够的空间让我们飞出信号,我们已经能够记录和分析所有微处理器发送给它的原始数据,但我们最终希望能够自行产生这些数据。这需要给发射板额外供电,如果遥控器的电源开关打开,然后微处理器也将发送数据,这将与我们插入的数据产生冲突;如果我们关闭了电源开关,发射器芯片也将关闭,任何数据都不会发送到直升机。我们认为我们将能够从USB转串口线为发射器芯片供电,但是我们不能肯定,电力会不会回流到微处理器使之开始工作。因此,我们决定从遥控器上拆下发射器芯片板,因为这是我们的项目唯一需要的部分。

6   连接控制板与USB转串口线

/gkimage/rq/gv/v8/rqgvv8.png
  • 当发射芯片板被拆下来以后,我们需要重新用导线将原来的遥控器与发射芯片板飞线相连,这样就既可以像以前一样放飞直升机,又可以将它连接到USB转串口线通过软件遥控飞行,还可以通过USB转串口线直接记录遥控器发出的数据帧。
  • 我们最终使用一块万能板搭建了简易的开关电路,使我们能够控制信号流向任意需要的方向。
  • 通过这些收集到的信息我们用 Python 语言编写了“Helicopter_Control.py”模块作为Puzzlebox Brainstorms软件的一部分。

/gkimage/2h/ix/km/2hixkm.png
  • 在图片里,我们从控制台运行了这个此模块,像下面这样发出了“读”的命令:python Helicopter_Control.py --command=read --device=/dev/ttyUSB0
  • 注意:在我们的具体配置里,我们的Linux系统在创建USB到串行端口设备时串行端口被附加了“/ dev/ttyUSB0”,这可能根据您的特定系统有所不同。比如在Windows下的COM端口可能被注为“COM1“。
  • 当以这种方式执行模块时很容易看到从微处理器发送到发射器芯片的实时数据。将这个模块纳入我们的源代码之后,我们可以任意发送特定的命令字符串给直升机。
  • 顺便提一句,我们注意到,当直升机首次启动时,需要发送一个“中间”油门位置的命令来建立匹配(不论是由连接到发射器芯片遥控器或计算机软件发出该字符串)。否则直升机将不会识别发射器芯片,并进入同步模式(由一个在驾驶舱闪烁的蓝灯表示)。

/gkimage/t5/8m/w9/t58mw9.png
  • 此外,当控制台命令不再发送,直升机会显示断开连接(在驾驶舱外长亮的蓝灯),为了重新建立连接,需要再次发射了大约两秒钟的“中间”油门位置命令才能发送其它操纵命令,例如“悬停”或“向前飞。”这些设置传输会自动由Puzzlebox Brainstorms软件处理。

7   测试飞行-从命令控制台遥控直升机

  • 在这个示例视频中,遥控直升机首先通过原来的遥控器操作,再经过万能板电路切换信号通道,由在控制台模式下运行的Puzzlebox Brainstorms软件发送“向前飞”的命令。注意在直升机起飞前有一个延迟,在此期间,发射器和直升机之间重新建立了同步。

/gkimage/x9/xe/3r/x9xe3r.png
  • 可用的控制台命令示例:
Neutral: 使用此命令来与直升机建立初始同步
python Helicopter_Control.py --command=neutral
Hover: 直升机在空中悬停
python Helicopter_Control.py --command=hover
Fly Forward: 直升机向前飞行,高度降低,此时易于着陆
python Helicopter_Control.py --command=fly_forward
Read: 读取遥控器的输出指令并直接在显示器上显示
python Helicopter_Control.py --command=read

8   连接脑电图感应器到Puzzlebox Synapse

/gkimage/ms/pi/ic/mspiic.png
  • Puzzlebox Synapse是一个免费,开源,跨平台的应用程序,它能直接连接到市售的消费级脑电图头戴感应器上,采集脑电波信号(包括检测状态),将数据绘图,选择性地记录数据到磁盘,并提供了TCP / IP服务器功能来为远程客户端传递信息。

/gkimage/69/it/v7/69itv7.png
  • 这个项目我们将使用Puzzlebox Synapse连接到一个NeuroSky MindSet感应器,然后区分 “专注”和“冥想”的思想集中程度,Puzzlebox Brainstorms则使用这些数据来遥控直升机飞行,悬停,或着陆。如果使用的是Emotiv EPOC感应器则可以使用“EmoKey”软件直接同Puzzlebox Brainstorms通讯,从而跳过这一步。

/gkimage/4u/01/uo/4u01uo.png
  • 首先需要建立一个电脑与NeuroSky MindSet的蓝牙连接。连接方法应该已经在感应器的说明中提供了,不在本教程的范围之内。如果你使用的是Windows XP,建议使用东芝(Toshiba)蓝牙驱动(感应器安装光盘中有),而不是内置的Microsoft蓝牙驱动,我们使用东芝公司的软件获得了更好的效果。对于NeuroSky MindSet默认的蓝牙Pin识别码为“0000”,一旦连接到你的Windows系统会获得新的COM端口或Linux下的/ dev/ ttyUSB。建议Mac OS X的任何用户尝试使用Python解释器从源代码开始运行,并通知我遇到的任何问题。理论上这些软件应当兼容,但是截至交稿时我还没有在OS X上实际测试过。

/gkimage/xn/i0/ph/xni0ph.png
  • 一旦连接建立,只需选择你NeuroSky MindSet的蓝牙连接MAC地址,或选择显示的的适当COM端口。
  • 点选“Server Daemon”下面的“Start”按钮,图形界面将开始显示实时脑电图测量结果。脑波和“eSense”计算每秒更新一次。它也可以绘制原始脑电图输出波形图用来查看,显示随着时间的推移被测对象专注和放松的趋势,并存储用户会话的全部内容到磁盘或输出为OpenOffice.org Calc或Microsoft Excel中使用的CSV文件。

9   使用Puzzlebox Brainstorms遥控直升机飞行

/gkimage/iw/pr/mj/iwprmj.png
  • Puzzlebox Brainstorms是一个免费,开源,跨平台的软件应用程序,它允许通过脑机接口(BCI)控制车辆,设备,玩具(例如 LEGO MINDSTORMS ),遥控直升机,甚至电动轮椅。

/gkimage/xr/au/o5/xrauo5.png
  • 在这个项目里我们将使用该软件控制直升机的向前飞行,悬停和/或着陆。这些操作的控制命令来源于NeuroSky MindSet或Emotiv EPOC脑电图头戴感应器自动检测到的被测对象专注/放松的程度。

  • 第一步是在启动应用程序之后连接到上一步的准备好的Puzzlebox Synapse的服务器。服务器可以搭建在同一台计算机上或通过TCP/ IP协议或者因特网进行访问。在“控制面板”点击Puzzlebox Brainstorms标签,核对主机和端口设置后,点击“连接”,开始接收脑电图检测数据。
  • 下一步点击“遥控直升机”标签。该发射器芯片应该已经被改装并连接到电脑系统。如前面的步骤中所述,USB转换的串行接口将出现在Windows下的COM端口或/ dev/ ttyUSB Linux下的串行设备里。默认情况下,当大脑“专注”或“放松”的水平达到一定的阈值(约60%或更高,在“puzzlebox_brainstorms_configration.ini”文件中定义) “速度”表将开始上升,遥控直升机将工作在“悬停”模式,一旦放松水平低于阈值直升机则自动下降并着陆。
  • 如果使用Emotiv EPOC感应器,你可以通过“EmoKey”程序指定以下快捷键并用它们任意指定直升机的工作状态:
"Home " or "[ " -悬停
"Page Up " or "] " – 向前飞行
"End " or "" -着陆

  • 简要说明(注意:这里的说明可能不是100%准确,但却是一个简要有用,易于理解的可视化说明方式。)
A. 假设你站在正在进行棒球比赛的体育场外,你不能看到球场上的球员(我们不能“读你的心”),但每过一段时间,你就可以听到人群欢呼和叫喊,知道发生了令人兴奋的事件。我们知道,当发生类似这样的情况,就意味着你在保持专注。你可以设想头上的电极就像接收场内人群欢呼声信号的天线,当我们调整到合适的频率(电极处于合适的位置),听到兴奋的叫喊轰鸣(电极传出信号),我们就知道你在专注。
B. 人类的大脑是由约100亿个 神经元 组成的,它们不断通过化学过程交换信息,在这一过程产生电信号,当与特定功能相关的大脑区域高度活跃时,可以直接在该区域对应的头皮表面测量出电信号的微小变化。就像遥控控制电路,我们测量这些电信号的幅度和变化并用电压表示(尽管实际的变化小而又小)。
C. 如果你从遥控器中取出单节AA电池,你会发现在一边写着“1.5V”,表示该电池正常电压为1.5伏。我们测量脑电信号用的单位是伏特十万分之一(微伏),脑电图本质上就是一个极灵敏的电压表的测量结果。
D. 当我们使用脑电图感应器测量出大脑的电活动后,就可以用数学知识来处理这些信号。结合脑科学上的知识,我们将电极放置在大脑皮层(大脑右额叶,位于前额右下部),同时采集了中立参考点的信号(例如用户的耳朵,那里没有神经元。,据此我们可以计算出人们的大脑对事物注意的程度——是专注还是放松。

10   致谢

/gkimage/gc/sa/pz/gcsapz.png

最后,感谢以下给了这个项目很大帮助的人和机构:NoisebridgeHackerspace_

Miloh Alexander, Jake Walters, Tony Roberts, Paul Tonkin, Greg Smith, Chris Hellyar


11   DIYer签到处


资料来源

编辑:小蜂

果壳DIY站QQ群:132647923(加入时请报上你在果壳的个人主页地址,以防广告ID)

果壳DIY站微博: http://t.sina.com.cn/guokrdiy

相关 [控制 直升机] 推荐:

用“飞来咒”控制你的直升机

- 风行水上 - 果壳网 guokr.com - 果壳网
DIYer:puzzlebox 制作时间:一星期 制作难度:★★★★★ GEEK指数:★★★★★. 这个制作会向你展示如何拆开一架遥控直升机,然后修改它的远程控制硬件使之能够通过开源的电脑软件来控制. 更重要的是,它可以通过常见的消费级 脑电图 头戴式感应器感应到人脑的专注和放松状态,进而控制直升机的飞行.

喷气式直升机 Blade

- 冬 - 译言-每日精品译文推荐
来源Jet Copter “Blade” by Norio Fujikawa. Had to get back to doing a vehicle of some kind." Take a look and you’ll see quality and creative 3D model of helicopter!.

花费15年手工制作的MIL-24直升机模型

- OneZero - 有意思吧
为了制作这个MIL-24直升机的1:32仿真模型,这位来自基辅、现居多伦多的Alex sklyar先生,整整花费了15年的时间. 为了保证绝对的精确,这架直升机模型的许多零件是在显微镜下一点一点手工打磨而成. 组装这架模型所用的零件总数达到十万个. 它精确到了这样的程度:它所使用的铆钉和螺丝都是严格参照真机部件、按比例缩小后制作而成.

TGS2010:iPhone 操控,超稳定直升机 - AR.Drone

- GuanHong - Engadget 中国版
AR Drone 是一个利用 iPhone 控制的直升机,这款直升机厉害之处是其极度稳定,不会受气流影响,左摇右摆,即使需要在半空静止不动也没有问题,而且降落时极之平稳,实在很强. AR Drone 备有两个款式,分别是室内及室外的版本,室外的版如上图一样,四周有一个由塑料制作的防风边框,以防直升机受侧风影响稳定性.

用微软KINECT体感游戏机遥控玩具直升机

- knighter - YesKafei Daily
各种KINECT破解,都没有脱离屏幕. 但瑞士工程师编写的程序,让人们可以通过Kinect操控实体的遥控直升机. Kinect会跟踪肢体动作,定位手臂和肩膀的位置. 当手臂抬起,遥控直升机起飞;抬起左臂,遥控飞机将做反转;双手击掌,遥控直升机将得到降落的指令. 破解微软Kinect,用来玩魔兽世界.

在四翼直升机光鲜牛逼的外表下…[v]

- Iceberg - 煎蛋
四翼直升机这段时间挺火的,它们似乎无所不能:会打球、会钻窗、还会弹钢琴. 正所谓“台上十分钟,台下十年功”,这么牛逼的小直升机也不是一天就造得出来的,总得先经历成功他妈——失败的考验才行. 下面我们来好好围观一下它们出糗的样子吧. 悲剧瞬间:泰国汽车炸弹在拆弹人员面前爆炸[7p]. 报告称阿富汗/伊拉克反恐战争中杀死了132000平民.

Google Maps 和 Google Earth 增加直升机视角导航

- 李龑 - 谷奥——探寻谷歌的奥秘
Google Maps 和 Google Earth新增了一个称为“直升机视角”的导航功能,尽管实用性可能不强,但看起来非常享受. 当你设置好出发点和目的地之后,点击Get Directions按钮之后,再点击3D按钮即可进入这个新的直升机视角,随着你点击到每一步的导航点,右侧都是以45度空中俯视来观看:.

KickStarter 项目 Quadshot:直升机中的战斗机

- 危墙 - 36氪
Quadshot 是一个由遥控控制的飞机,但是它既包含直升机的部件,又包括战斗机(普通飞机)的部件,它可以直上直下,可以停留在空中不动,也可以瞬间加速向前飞行. Quadshot 来自一个 KickStarter 项目,现在离项目结束还有 20 多天,他们共 4 个成员已经集资 25000 美元,目前他们已经制作了 10 个原型.

新品i-helicopter用iPhone遥控的直升机

- yingchen - 设计|生活|发现新鲜
用iPhone/iPad/iPod Touch控制的遥控直升飞机. 不分版本,只要能下载安装APP (I-Helicopter) 就行. 支持iPhone陀螺仪,摇晃手机就能控制飞机. 金属框架+高强度塑料材质,非常耐摔. 又一个可以在朋友面前炫耀iPhone的利器,谁有我最潮. 最潮的iPhone玩物,香港Happy Cow正品,三色可选,since1984.shop新鲜上架,点此购买.