1回答

1收藏

[经验] 构建一个远程控制的WALL-E机器人

#拆解/开源硬件 #拆解/开源硬件 3475 人阅读 | 1 人回复 | 2013-06-28

本帖最后由 haothree 于 2013-6-28 11:30 编辑


这篇文章描述了如何组装一个WALL-E机器人以及为它编写远程控制层序。

http://player.youku.com/player.php/sid/XNTc2MzQ0OTQ4/v.swf

原文:http://aforgenet.com/articles/wall-e/
程序例子(源代码).zip (76.7 KB, 下载次数: 10)


介绍

我们发现一个有趣的事情,机器人爱好者总趋向于参照电影中的角色打造他们自己喜欢的机器人,是电影给于了这些人灵感。R2-D2,Johnny 5,WALL-E等角色的机器人都被重新实现过,爱好者建造这些机器人通常处于兴趣或者某些特殊用途。令人高兴的是,越来越多电影中的机器人角色来到了现实当中。这主要是制造商提供了越来越多的电子原件、机器人开发包、硬件等等,这些器件被机器人制造者用于自己的爱好、研究和娱乐等等。如果为了娱乐,你可以重新创造一个著名的T-800 ...
同样的事情也发生在我身上.在我告别了 Lego robotics kits 后,我试图 组装一个我自己的机器人, 我觉定组装了个不久前开始走红的WALL-E。当然,我实现的版本并不期望能百分之百的和它一样(还需要相当多的实践经验),但我还是希望需要别人一看见就会说“哇,看,是WALL-E”,下面我们开干吧!

外壳、螺钉、线 ...

当开始一个机器人项目时我们想一下什么将成为机器人的大脑。例如:CPU管理机器人的硬件(电机、系统、传感器、摄像头等)。摄像头对于组装类似WALL-E这类机器人时,是非常重要的,应为它有两只眼。当然如果你希望用眼睛仿真系统来替代真实的眼睛也是可以的,但使用这东西会让我们少了许多乐趣。所以,为了能让我们的机器人能看见东西,我们需要摄像头。当然,为了更加精确我们需要使用两个摄像头。

事实上为了给我们的机器人加上计算机视觉,在“大脑”的选择上我们有一些硬件上的限制。目前市场上并没有多少可用的具有视觉功能的视觉机器人包(业余者可承受的),所以选择相当有限。我想过使用我前一个机器人上 Qwerk 主板,但是它只能安装一个摄像头,对于WALL-E来说还不够(除非不是做的翻版),另一个选择是使用小的笔记本,比如: EeePC,但是这增加机器人的大小和重量。幸运的是 Surveyor的公司为机器人应用提供了名为 Stereo Vision System (SVS)的双摄像头主板!该主要同时也提供的无线连接功能(我非常期望的远程控制),并且它可以连接电机、伺服系统和传感器。这样一个主板满足了我们组装WALL-E所需要的全部功能要求。


现在我们有了大脑和眼睛,现在我们需要处理一下运动。如果机器人没有三角形的履带,那它还能称为WALL-E吗? 没有轮子和轮胎,只需要三角形履带。这次我们购买了一套  Lynxmotion 公司产的   Tri-Track Chassis Kit, 该公司设计和生产了需要机器人应用的东西。




现在我们已经有眼睛和脚了。下一步我的给维利身体。尽管他的身体非常简单,只是一个盒子形状而已,但是这一步给我的挑战最大。主要的原因在于这个身体不是买现成的机器人部件,而是纯手工打造。很显然我家里没有全套的作坊,仅仅有一些常用的工具,比如螺丝刀、锉刀、钻,锯等,所以要制作所有的身体片并能把他们无缝组合起来,看起很漂亮还是费了很大的劲。从锯板子、刨光,不断的刨知道合适的尺寸,到后来钻孔和并且最后漆成黄色...
   


在把威力的头和身子组合之前,我们需要一些伺服器和装配硬件。最简便的方法是去找Lynxmotion并且获得他的云台套件。

最后,把他们装配到一起后,威力的样子...
   

是的,我们的威力还缺胳膊,眼睛的形状也还不是怎么太像。但是作为初步的成果,这看起来已经非常不错了。我们还需要一些部件需要增加到小机器上:4个Maxbotics公司EZ1超声距离探测仪(每边一个),这样他就可以测量障碍物的距离;还有一个Honeywell公司 HMC6352指北针(放到顶上)来得到方向感。最后还有就是一个12v 3ah/20hr 可充电电池,他也是从上一个机器人身上拆下来的。


   
和最后一张图片展示的一样,我们的机器人后面是类似门的开口设计。这样我们可以更方便的打开以及去调整机器人的各种线缆。还有有一件需要说明的事情是我使用连个交换模块把各个传感器和马达连接SVS板的线缆连接起来。这样做的主要的目的是为了减少线的焊接,以及各种可能情况下方便更换线缆。


软件部分

硬件部分已经做好了,万事俱备,只差软件了。利用它我们可以在电脑上控制机器人(如果对这部分不感兴趣,可以跳过这部分,看一下威力动作的视频)。
和我 以前的文章提到的,写一个程序控制监视立体视觉系统板是非常简单的,特别是它还支持 AForge.NET framework。这个框架提供板子各种属性的操作,比如操作马达、伺服器、传感器,摄像头等。而且它还提供其他的一些工具,可非常简单地现实视频流和控制机器人等

我们需要做的第一件事是连接上我们的机器人,得到他的视野——用它的摄像头观察到的。各种各样SVS板操作需要使用SVS类,现实视频我们使用VideoSourcePlayer控制器。
  1. <font face="宋体">SVS svs = new SVS( );
  2. // 连接到机器人
  3. svs.Connect( host );
  4. // 启用安全模式,如果连接丢掉,将会停止马达。
  5. svs.EnableFailsafeMode( 0, 0 );

  6. // make sure video is not flipped
  7. svs.FlipVideo( false );
  8. // 设定视频的质量和分辨率
  9. svs.SetQuality( 7 );
  10. svs.SetResolution( SRV1.VideoResolution.Small );

  11. // 开启左摄像头
  12. SRV1Camera leftCamera = svs.GetCamera( SVS.Camera.Left );
  13. leftCameraPlayer.VideoSource = leftCamera;
  14. leftCameraPlayer.Start( );

  15. // <span></span>开启右摄像头
  16. SRV1Camera rightCamera = svs.GetCamera( SVS.Camera.Right );
  17. rightCameraPlayer.VideoSource = rightCamera;
  18. rightCameraPlayer.Start( );</font>
复制代码


下一部就是通过驱动马达和云台伺服器让机器人动起来。关于怎么做,不要多说什么,你需要的就是去调用AForge.NET框架的RunMotors() 或者 ControlServos() 方法 指定马达的电量或者伺服器的方向。仅仅有一点要说的是怎么让他更加易用使用。控制机器人非常的简单。

最简单的操作这类机器人的方法是使用一个至少有两个模拟操作杆的游戏手柄。我买一个简单便宜的Saitek P380 手柄,但是市面上有非常多的类似的设备。用手柄控制机器人将变的非常简单和自然,一个操做杆用来控制马达转速,另一个用来控制摄像头的云台伺服器,这样机器人可以移动,同时可以转他的脑袋。编码方面也是非常简单,AForge.NET框架提供了操纵杆类允许查询手柄的状态。这个类是一个非常简单的WIN32 API包,所以他不能提供操纵杆状态改变的通知。但是可以通过建立一个后台线程或者一个读取手柄转台的定时器来解决这个问题。
  1. <font face="宋体">if ( lastJoystickStatus == null )
  2. {
  3.     lastJoystickStatus = joystick.GetCurrentStatus( );
  4.     return;
  5. }

  6. Joystick.Status status = joystick.GetCurrentStatus( );

  7. // 检查是否操纵杆状态有变化
  8. if ( ( status.Buttons != lastJoystickStatus.Buttons ) ||
  9.      ( Math.Abs( status.XAxis - lastJoystickStatus.XAxis ) >= joystickThreshold ) ||
  10.      ( Math.Abs( status.YAxis - lastJoystickStatus.YAxis ) >= joystickThreshold ) ||
  11.      ( Math.Abs( status.ZAxis - lastJoystickStatus.ZAxis ) >= joystickThreshold ) ||
  12.      ( Math.Abs( status.RAxis - lastJoystickStatus.RAxis ) >= joystickThreshold ) )
  13. {
  14.     HandleJoystickStatus( status, lastJoystickStatus );
  15.     lastJoystickStatus = status;
  16. }</font>
复制代码


如果你有一个游戏手柄控制你的机器人的话,任何的操作都非常便捷。但是如果你没有呢?很可能你会使用键盘或者通过点击一个窗体上“前行”这样的按钮来操作,但是这样方法和使用操纵杆不会有一样的感觉。在制作我第一个机器人的时候,我遇到过同样的问题,我了和操纵杆感觉更近一点,我只是用了电脑鼠标。由于这些原因,我使用两个控制,后者这变成了AForge.NET框架的部分,所以可能同样的方法可能其他人也在用。首要的控制,ManipulatorControl,真正的最小化操纵杆的行为。他拥有一个控制器,可以实现从中心向不同方向的移动。在控制器上的运动控制开关事件和事件处理被简单转化为对马达电力的调整和伺服器方向,这个处理过程和操纵杆处理是类似的。第二个滑控制是另外的一个控制接口,主要用于实现机器人原地旋转的动作,当一个机器人马达在一个方向转动时候,另一个必须在相反的方向转动。当拖动滑动条离开中心的时候,他就可以控制机器人的转向和速度。


最后的步骤,让机器人的传感器工作起来。使用雷达测距仪,任何事情都非常简单,只需要用UltrasonicPing()方法,让他返回值给4个传感器。但是有关指北针传感器的我还没有做出来,主要问题不是读不到指北针的数据,那个简单。因为指北针传感器有一个I2C装置,我们使用I2CReadWord()方法就能读到它的值。实际问题是这些值本身,因为指北针的反应取决于地球磁场,所以他对任何的磁干扰非常敏感,以至于机器人马达的磁场都会对他有影响。尽管我用一层铝箔包裹了威力身体,并且给SVS板装一个接地的大头针以消除电磁影响,但是效果都还不好。我也尝试利用厂家说明的程序矫正指北针的数据,也没有太大的进展。所以对我来说这就像是其他机器人业余爱好者常常遇到的一样,指北针变成了机器人的多余的部分。至少,目前看来是这样的...


文章的附件代码提供了所有我制作威力的程序的所有的细节。所以如果感兴趣的话可以可以通过它了解更多。最后的程序界面,如下:

最后,让梦看看YouTube上威力的动作视频,娱乐娱乐!


结论
迄今为止,威力机器人克隆工程变成我最大的机器人业余爱好工程。许多的新的硬件/电子部件需要学习,加上这个工程需要远比我上一个机器人制作大得多手工工作。所有这些都同时带给我欢乐、兴趣以及挑战。让我最欣慰的是可以让我机器人编程得到很大的进步,所以我的下一个机器人工程我将尝试重用所有这些知识,并把它们提高到另一个层次。
在我下一个工程我要力图避免的一件事是把某部分弄成完全闭合盒子,比如设计机器人的身体时候。尽管我子威力的后面留了一扇门,用它可以更容易的去取所有的线缆,但是那个空间还是有点太狭小了,用它使用螺丝刀或者其他工具操作机器人身体时候非常的困难。起初的设想是那个线缆交换板,可以很容易的拿出来,这样所有的维修都是在外面。但是由于线缆堆积后那个尺寸已经是不大可能再把它拿出来了。无论如何,下一个设计时候将会尝试解决这个问题,所以机器人将会更开放,并且能更容易的处理他每一部分。


还有一件需要提及的是关于Surveyor的立体成像系统。这个板子非常棒,对许业余多机器人爱好者和研究者提供了一个非常好的开始。唯一需要改善的是在一定程度上分离成像相关的通讯部分(尽管在目前的架构这还无法实现)。我遇到的问题和SRV-1架构还只是单线程,所以一个连接连接了连个摄像头和其余部分——控制马达、伺服器、传感器等。所以如果SRV-1设备在忙于处理下一个视频帧的时候,对马达相关的命令都会没有反应。这样当发出一个停止指令的时候,他实际上不会停下来。另一个影响是一个摄像头的帧数会丢掉(传感器,马达和伺服器也有类似的问题)。尽管厂商声称这个非常小,不会看到的,但是实际上他很明显,特别是当一个摄像头处理处理不止一个视频的时候。

分享到:
回复

使用道具 举报

回答|共 1 个

倒序浏览

沙发

one棉花糖one

发表于 2014-12-9 09:49:44 | 只看该作者

我是来赚铜板的
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条