如何使沿黑线走的小车走得更快?
请问多事件着陆的程序怎么编?
如何解决PH酸碱滴定试验中的问题?
ROBOLAB如何控制马达?
如何拼装乐高积木?
是否RCX中5个程序会相互干扰?
如何使用乐高的光电传感器来寻找蜡烛?
用一套乐高器材能否做出一个灭火机器人?
如何解决进行程序下载中的问题?
在程序中使用了子程序,但是程序不执行,请问这是怎么回事?
哪些语言可以对乐高机器人进行编程?
在一个程序中能否使用多个事件着陆(event landing)?
Create Subroutine 有什么作用?
9791与9790的差别在哪里?
USB红外发射仪跟原来的红外发射仪有什么不一样?
如何进行程序下载?
红外足球发射的红外线的波长(或频率)到底是多少?
如何设定空间坐标系?
各种乐高传感器如何初始化?
可以控制RCX的语言种类?
 

Q:怎样才能让沿黑线走的小车更快?

A: 首先,分析一下你需要得到的结果:
1.速度加快
2.沿黑线走
第二,小车必需的部件
1.马达
2.光传感器
第三,如何提高各个部分的性能
1.在速度的提高上:
1)使用齿轮或齿轮组加快速度
2)使用较大的轮子也可获得较快的速度
3)组合使用上面两种方法
2.光传感器的效能的提高:
1)使用2个或2个以上的传感器
2)使用光感事件触发
3)组合使用上面两种方法
3.整合光感和速度,找出最佳结合点.
1)速度过大时光感对黑线的判断会出现失误,主要原因是因为光感采集频率的限制,小车的速度使光感不能及时的得到回应,因为小车经过黑线的瞬间,车子正处于光感两次数据采集的时间间隔,所以在某种程度上黑线对小车来说是"看不见的".这时有几种办法来解决:A)牺牲速度,换取精度 B)在环境光影响较小时,适当抬高光感,使光感接收面增大(不过这种情况较少) C)举例当前白色部分光值为58,黑色为39,在设置光值的时候就不能将数值设为39,而应设置为略小于白色的数值,如55.这样当光感接近黑线时(如一半在白,一半在黑时)就会触发程序.
2)使用两个光感能有效的将精度提高,一般走黑线出现问题大多数出现在大转弯处,光感容易甩出黑线,脱离轨迹,主要还是速度问题,如果使用两个光感,就可以设计程序,使第二个光感在接触黑线时将错误纠正.(这种方法需要比较精通程序的人才能实现)
3)如果组合两种方法应该会得出较好的效果.
4)在搭建使要把握好动力点和光感的位置,如果动力点和光感的位置很远,光感的晃动速度就大,幅度较小,直线速度就比较快;光感的位置靠近动力点,晃动速度就小,幅度则比较大,曲线效果就好;综合上面情况,建议调整动力力矩,找出直线和曲线效能的最佳结合点.
最后,一辆小车一定要有一个好的结构,(动力点,光感的位置合适),一个好的程序(程序能驾驭各个部件),这样才能最大程度的提升轨迹小车的速度.另外,还要根据轨迹的情况(直线较多?曲线较多?还是车子运行方向始终是顺时针或逆时针?)有了以上的外部条件再进行修改,使车子适应场地,发挥出最高效能.

 

Q:请问多事件着陆的程序怎么编?为什么我在用了事件容器后却触发不了? 能给我一个使用多事件着陆的范例程序吗?

A:

请注意,事件触发超过三个会产生耗电大,并有可能产生失误的情况,请自己选择使用。

 

Q:邓老师:

您好!我是包头九中刘浩。我在用你们的Robolab程序编程时遇到了一些困难,现向您请教一下。请您尽快帮我修改一下。随邮件送过去我的程序。

我的这个程序的内容是PH酸碱滴定试验,在程序里A马达是用来晃动烧杯的,B马达是用来旋转滴定管往下滴酸的(我的程序是酸往碱里滴的),当PH探头探测到PH值刚好等于一开始保存在红色容器里的值时(一开始PH值探头测到的是水里的PH值,即PH值=7)程序停止,并且上传画出PH值曲线。

但是当我实验时,B马达旋转往里滴酸后,PH值已经小于7了,但是程序没有停止,我不知道是怎么回事,反复试验了好多次都不行,请您麻烦帮我改一下。

(由于篇幅有限,所以只摘取了程序中的判断部分)

A:很不错的一个实验!

首先应该确认pH值传感器有没有正常工作。然后修改程序。在程序中的判断部分(如上图红色框)。B马达转动,开始滴酸的溶液,这时pH值下降,降到接近7,例如7.1,这时B马达还转动一定的角度再作判断,这个时候,也许pH已经下降到6.9,这时的判断还是不等于7,所以马达还是会转动,并且永远转下去,因为pH已经不可能再等于7了。

可以使用两种解决方法:1.将相等的判断改成大于/不大于判断。2.使用事件。

其实这个问题很多人都遇到过,我们需要记住:判断图标只是检查某一瞬间的值,而不是不停检查。从ROBOLAB2.5开始,我们可以使用事件(Event),使用事件我们将可以在任何时间监控传感器、容器、计时器等。

另外还有一个需要注意的,要给机器人一定的容错能力,例如上面的例子,其实pH值很难正好等于7,由于传感器本身有一定的误差,即使同样的溶液,也可能测量到不同的结果,类似于这个实验,最好不要等于/不等于判断。

Q:我在做一个模型的时候,我使用马达动力水平2时,马达动力不够,后来改用3,但是又太快,有什么解决方法。——一个乐高爱好者

A: 你的模型一定很精密吧。不过没关系,乐高同样可以满足你。事实上,使用ROBOLAB来控制马达时,我们可以有8种不同能量级别供你选择,你可以在马达能量设定中直接使用常量来设定,从0-7。例如,你需要以最大能量转动马达,你可以使用:

其实,在ROBOLAB中,有如下的对应关系。

Q:我的儿子(在读小学)在拼装乐高积木时,发现有时候很难分开两块积木,只能求助于我,是否乐高有什么质量问题。——一个着急的家长。

A:自从1949年,乐高共生产了3200亿块积木。全世界平均每人拥有52块。五十多年的制造经验,成就了今天近乎完美的乐高积木。乐高积木在搭建时不会太紧,也不会太松。另外,乐高还提供一个很有用的工具,如下图:

这个工具可以帮助你分离积木。

Q:为了调试方便,我们经常不同参数的程序保存在RCX1~5中,但有时候发现程序之间相互干扰,是否RCX中5个程序会相互干扰?——南京全国培训中的一位老师

注:经过详细了解,发现他的程序中大量使用了容器,并且在容器使用前没有清零。

A: RCX可以储存多达5组程序,这个功能给调试带来非常大的方便。但是这个程序并非完全独立的。一部分的容器是共享的(也可以成为全局变量)。例如程序1保存了如下程序:

程序2保存如下程序:

先运行程序1,然后运行程序2,这时我们可以从RCX的LCD中看到11。这是因为程序1改变了红色容器,而红色容器为公用的,所以程序2显示出11。在ROBOLAB中,一部分容器是公共的,一部分是私有的,不同版本数量不一样,所以我们一定要注意,特别使用公共的容器,在必要的时候需要对容器进行清零。

Q:如何使用乐高的光电传感器来寻找蜡烛?

A:使用普通的乐高光感是可以找到蜡烛的,你只要先用光感测量一下正常环境下的光值,假设是30。那么只要光感的亮度超出这个数值,我们就认为它找到了蜡烛。但是为了防止误差,我们可以留出一定的余量,假设为50。也就是说当机器人在移动的过程中,光感的数值达到了50,我们就认为机器人已经找到蜡烛了。由于普通光感是有发射源的——发红光的灯泡,在使用时,为了防止产生影响,需要将发射源遮住,用不透明的胶布贴上就可以了,不过千万不要把另一个也遮住了。 

Q: 用一套乐高器材能否做出一个灭火机器人?   

A: 用一套乐高器件要想完成灭火任务的还不太够,还缺少以下几种器件:

    1、用来控制灭火装置的马达

    2、用来测距的传感器(红外测距、声波测距......)

    3、用来发现蜡烛的红外传感器(也可以用乐高的光感)

    另外,如果需要使灭火机器人的功能更加强大,可能需要用到两个RCX来控制。

Q: 你好,我编写了一个程序,但是下载不下来,而我找不到错误在哪,请帮助解决。谢谢。(程序很大只截取了一部分)

 图一

 图二

 

 

 

 

A: 跳转图标是一一对应的,使用白色跳转图标是需要标志号码的(例如图二)。老师,你在程序中同时使用了红、兰、黄、绿、黑和白色跳转图标,那白色跳转图标标号应从5开始。因为白色跳转图标标号为0时等于使用红色跳转图标。例如下图:

Q:在程序中使用了子程序,但是程序不执行,请问这是怎么回事?

A:在子程序中使用跳转图标,请看下面的例子:

子程序4

子程序2

  

总程序

在程序中子程序4和子程序2是一样的,但是因为在程序中用到了跳转图标所以标号分别为6和5,名称也改为4和2。如果使用同一标号,程序不执行。

Q: 我们在对乐高机器人编程时,希望能得到使用C语言的方法和软件。谢谢!

青岛科技信息研究所 刘晓明

答 :刘先生,你好!
  非常高兴你会我们的机器人感兴趣。事实上,有多达30多种语言可以对乐高机器人进行编程。
乐高公司提供了ActiveX控件,所以对于大部分支持ActiveX控件的语言,例如VB、VC、Delphi等,非常方便地对乐高机器人进行编程。
  你可以从 http://www.mindstorms.com/sdk2中得到这个控件。
  另外比较常用的是NQC,一个乐高爱好者开发的一种类似于C的语言,非常灵活,功能也很强大,你可以从 http://members.aol.com/johnbinder/bricxcc.htm中得到。
  不过我们还是推荐你使用ROBOLAB对RCX进行编程,因为这个软件入门非常容易,但是功能强大,包含了RCX和乐高其他两种控制的所有控制命令,另外还提供了互联网控制等功能,另外,由于这个软件是基于LabVIEW开发的,所以提供了很强大的数据采集、分析功能。事实上,有多达30多种语言可以对乐高机器人进行编程。乐高公司提供了ActiveX控件,所以对于大部分支持ActiveX控件的语言,例如VB、VC、Delphi、Java等等,非常方便地对乐高机器人进行编程。你可以从 www.mindstorms.com/sdk2 中得到这个控件。

Q 在一个程序中能否使用多个事件着陆(event  landing)?如果同时监控通过事件,如何判断是哪一个事件被触发?

明德小学唐老师

答: 在一个程序中,每使用一个开始监控图标,后面只能使用一个事件着陆。如果同时监控多个事件,你可以使用事件记录图标(Event Register Container)来判断:

这个图标的功能是将发生的事件的值保存到指定容器里,事件的值分别为20(红色事件)21(蓝色事件),22(黄色事件)……例如,如果被触发的是红色事件,那么容器将等于1,即20,如果红色和蓝色同时被触发,那么那么容器将等于3,即20+21

Q 1、Create Subroutine 有什么作用?
  2、Random Fill Container一端用蓝线接一个常数,一端用深红色的线连一个黄色容器,表示什么意思?
  3、Task Split图标有两个分叉,执行时有没有先后?还是一起执行?如一个有优先权,那么优先级应该是怎样的?

苏州十中 施老师

:1.如果你使用的是Edit菜单的Creat SubVI功能来生成子程序,这个子程序就和我们在功能面板上的所有图标的使用一样,例如需要一个让马达A转动2秒然后停下来的子程序,我们可以先完成:

然后选中中间的三个图标(如上图),并选择主菜单中的EditàCreate SubVI,就可以得到如下图标(中间带黄色三角形者),这个图标就代表上面所选中的功能,另外,这个图标的形状也可以自由修改。

这样,这个自己生成的图标就像普通的图标一样,可以用在任何程序,任何地方,这是ROBOLAB最出色的功能之一。其实,ROBOLAB的编程图标就是通过这种方法做成的。这里面包含一个哲理,任何复杂的东西都是由基本的东西组成,我们编写的程序也一样,我们可以将复杂的程序分成很多小程序,将小程序调试好之后再组合起来,这就是编写、调试和修改。另外,可以将一些常用的功能保存下来,方便以后的使用。

2.Random Fill Container

它的功能是将一个随机数保存在某一个容器里,其中蓝线连出来的是随机数的最大值。例如:

将从0到10的一个随机数保存在红色容器里。

 

3.ROBOLAB2.5开始,可以定义任务的优先级(Task Priority),如下图:

使用这些图标就可以控制优先级了,需要注意的是,优先级的数值越大,其优先级反而越低,也就是说,最高的优先级应该为0。

Q 9791与9790的差别在哪里?

答:9791是9790的升级套件,差别不大,不同之处是9791提供的是USB接口的红外发射仪,而9790则提供串口的红外发射仪

QUSB红外发射仪跟原来的红外发射仪有什么不一样?

答:下面是这两种红外发射器的对比。

外形

接口

串口(COM)

USB接口

是否需要电池?

9V层叠电池

不需要

是否需要驱动?

不需要

需要。驱动程序在ROBOLAB2.5以上版本的安装光盘。

调节发射功率

直接在红外发射仪上(硬件调节)

在电脑的控制面板上(软件调节)

支持的软件

ROBOLAB任意版本

ROBOLAB2.5以上版本

 对于串行口红外发射仪,可以在红外发射仪上直接选择发射功率。

如果是USB接口的红外发射仪,需要在控制面板“LEGO USB Tower”中设定红外发射器的发射功率,如下图:

其中,Infrared Range就是设定发射功率,分三个档,分别为Short、Medium、Long。如果需要长距离发射,需要选中“Enable long range infrared transmission”这一项。需要注意的是,由于长距离发射需要计算机的USB提供较大的电流,所以在某些机器中(特别是笔记本电脑)无法使用这一选项。你还可以通过这个设定画面设定红外发射仪的其它参数,例如读取超时、写超时等。还有,USB红外发射仪还可以使用Visible Light Link(VLL)跟乐高其他设备通信。

Q: 如何进行程序下载

程序下载之前的说明:
一、IR红外发射仪的安装;把IR电缆一端连到电脑的RS-232的9针串口上,与发 射仪相连。
二、检查一下程序是否正确(若RUN按钮为破碎状,则程序不正确。

不正确
看看程序哪里还有问题

正确可以下载了

三、验证RCX的开关是否已打开。
四、检查一下IR电缆是否连在串口COM1上,如果不在,可在菜单Project→Select COM Part…更改

下载成功后会在电脑上出现一个RCX的图,并发出一声响声,如下图所示:
成功拉!程序已经保存在4中。

如不成功,可能会出现如下三种错误提示:

1. 如右图所示,这种情况一般是串口连接不正确或者串口已经损坏,检查串口是否正确连接,或者串口有没有被另外的程序占用。如果串口曾经被其它设备占用,例如Modem,则需要重新启动计算机。

 

 

 

2. 红外发射仪的绿灯没有亮(如右图所示)

(1) 串口选择正确吗?一般计算机有2个串口,请选择正确的串口。

计算机的9针的串口

 

 


(2) 红外发射仪电池是否正确安装(电池为9伏层叠电池,注意区分正负)。或查看是否电池电量不足。

(3) 串口连线是否损坏。这是一根Null Modem线。


3. 红外发射仪绿灯已经亮(如下图所示)。

(1)RCX的电源是否打开。RCX需要安装6节五号电池或外接电源。
(2)RCX的V标志是否出现(如右图所示)? 
A为RCX的V标志,表示RCX在接收信号,如果V标志倒置,则表示RCX上传数据到计算机中。B表示数据传输的进度。
RCX的V标志

(3) RCX是否在可视范围中?参看下图。

RCX是否在可视范围内
(4) 周围是否有强光影响?如果有, 请将红外发射塔靠近RCX,或用其它挡住强光,参考右图。

请将红外发射仪靠近RCX,以避免强光的影响


(5) RCX是否离红外发射仪太远,请调节红外发射仪的发射强或弱。参考右图。

(6)是否附近有其他红外发射仪相互影响。

A为红外光发射的地方,

C为强弱选择开关,

左边D为弱,

右边B为强

Q: 邓工程师,你好!我是常州市田家炳中学的肖鹏。
  首先感谢你上一次寄来的邮件,它对我的帮助很大。我把上面的电路和特殊红外传感器的电路综合起来做了一个红外线传感器。但是我在家用遥控器的时候,传感器工作正常。可用红外足球的时候,它完全接收不到信号。我想这可能是传感器的接收范围太高了,不能接收到的缘故。但我又不能太确定,我不知道红外足球发射的红外线的波长(或频率)到底是多少?不知道你能不能帮我查一下?我还有一个问题,我现在使用的红外接收器和RCX上使用的都是同种封装形式(我用的型号是TK69 009 RCX上使用的是TK19 018),不知道它们接收的频率范围有何不同?两者是否可以交换使用?最后一个问题是,不知你那里有没有RCX接口的详细信息以及RCX红外接收电路的详细电路图?

  在足球中,使用了Fairchild的QED523红外发射管,其红外波长为880nm,对应的接收管为QSD723,在球体中,红外线是没有经过任何调制的。而在我们平时所见到的红外遥控器和红外数据传输器所发射的都是经过调制的,中心频率一般为38kHz、40kHz等,这样做有一个很重要的优点,就是可以避免其它光线(如太阳光)干扰,这正如我们所知道的,白天使用电视遥控器不会出现问题,但是白天机器人踢球却很容易受到干扰。由于发射端使用了调制过的红外线,所以相应地,接收端有相应的滤波(这就是抗干扰的原理)。现在很多公司推出一体化的红外接收器,将红外接收管、滤波、放大等等全部放置在一个类似于一个三极管的封装中,在RCX中、在红外发射塔中,都可以发现这个元件,你所用的就是这个元件。非常不幸,由于里面包含了滤波,所以它不能接收来自足球发射出来的红外线,但是可以接收遥控器发射出来的红外线(中心频率一样),这个实验我在去年年底做过。
我建议你使用运算集成电路,例如LM324等来设计新的多级放大电路,因为我认为之所以灵敏度不足,是因为放大电路只有一级,放大效果不好。
任何新的发现,希望能一起分享。

Q:你好,我在实习时,看到一台机器,焊接机器人。它的手臂可在空间移动。只要给他设一个原点,然后以这个原点作为参考点,设好一个空间坐标系,那么它就可以移动到任何你给定的一点,我就是想问,用乐高能把它做出来吗?

  当然可以,空间中的任意一个点可以使用三个坐标表示--x,y,z,如果使用三个马达和三个角度传感器,那么,就可以控制手臂到达任何一点,不过在工业手臂中,一般不使用x,y,z坐标,而使用角坐标,但同样可以实现。
  谢谢你提供的资料,任何新的发现,一起分享。

Q:将乐高光感安装在RCX的输入端口中,但是光感的红灯不亮,在RCX中也无法看到正确的光值。"

  很多时候,用户以为直接将传感器安装在RCX中就可以正常使用,事实上,不管是什么传感器,都需要初始化一下,例如 :光感,必须先编写一个含有光感的程序,并运行,如果你使用的ROBOLAB2.5,你可以Reset功能来初始化各种乐高传感器。

Q:是清华大学自动化系的学生。我们教研组计划用贵公司乐高教育系列中的SR9791和SR9701搭建我们的实验平台。目前遇到了一些困难,希望能得到您的帮助。
  我们希望通过摄像头采集图像,用自己编写的VC程序进行图像处理,再用产生的信号来控制模型小车的运动。(如通过图像处理识别出小车前进途中的障碍物,发出指令使小车转弯等)。
用RCX控制的模型小车除了用ROBOLAB编程,我们自己编写的VC程序就无法同模型小车的控制结合起来吗?对这样的情况,一种解决的办法是完全在VC的环境下编写小车的控制程序,但如果这样就需要我们自己编写底层的控件,贵公司有没有现成的底层控件可供我们使用?
  如果没有的话,在哪里能找到相关的资料?如果可能的话,您能否给我们提供一些编写底层控件的资料?另一种解决的办法是分别用VC的程序和ROBOLAB的程序编写图像处理和小车控制的程序,将VC程序生成的控制信号传给ROBOLAB中的程序。您认为这一想法是否可行?如果可行的话,这种方法同前一种方法相比哪一种更易于实现?

  除了ROBOLAB,还有很多语言可以控制RCX,通过ActiveX控件,可以非常方便地使用VC、VB、Delphi等语言来控制RCX,你可以到: http://mindstorms.lego.com/sdk2/下载这个控件以及相关的文档。另外,有关使用其他语言来控制的信息,你可以参考:RCX Internal ( http://graphics.stanford.edu/~kekoa/rcx/index.html)。
事实上,使用乐高提供的摄像头以及ROBOLAB 2.5,你可以直接使用ROBOLAB来完成你的任务,因为在ROBOLAB 2.5中,支持大量的多媒体功能,包括多种图像处理算法、二值变换、数学形态、边缘求解等等,具体应用你可以看看ROBOLAB菜单中的Vision Center
很高兴能与你一起交流,有什么新的发现,希望能一起分享。