找回密码
 马上注册

QQ登录

只需一步,快速开始

查看: 12956|回复: 18

【原创】【iRobot的机器人编程笔记】(三)你的第一个LeJOS程序

[复制链接]
10 乐币 回复本帖可获得 2 乐币奖励! 每人限 1 次(中奖概率 50%)
发表于 2013-5-12 15:14:58 | 显示全部楼层 |阅读模式
本帖最后由 iRobot 于 2013-5-14 16:30 编辑

        一觉醒来,LeJOS版块有了漂亮的Logo,鼓掌!课程继续。同学们都坐好了。

        在正式讲课之前,首先要说一件事情,是关于如何学好LeJOS/Java。有些同学可能会想,“教程写的这么慢,这怎么学啊?我都等不及了”。孔子曾说过,学习不能靠看帖子。如果看帖子就能掌握一门技术,那还要书店和学校干什么,是吧。我的教程只是起到一个辅助作用,一个推动你学习的外因,真正的主动权掌握在你自己手中。

1.      创建你的HelloWorld

    先科普一下。Hello World一词最早出现在由贝尔实验室成员Brian Kernighan撰写的内部技术文件《Introduction to the Language B》(1972)之中。此后渐渐成为一种编程习惯,在各个语言中广为流传。我们第一个程序也叫Hello World,除了表达对前人的敬意,更多的是一种图吉利,辟邪的含义在面。希望前辈的光环能照耀我们的编程之路。

    首先确保NXT电源开启,并且用USB线连接在电脑上。

    打开你的记事本,复制下面的内容在里面。
  1. import lejos.nxt.*;

  2. public class HelloWorld {
  3.         public static void main(String[] args) {
  4.                 LCD.drawString("Hello World", 0, 0);
  5.                 Button.waitForAnyPress();
  6.         }
  7. }
复制代码

        这里要注意一下,我在上一课就讲过,只保证在0.9.1版本运行通过。因为不同版本之间的API也在不断变化。大家如果看过Programus和动力男孩之前翻译的开发文档,会发现最后一句话是Button.waitForPress();。这就是版本间的差异。这种事情是常有的。并不会造成学习的障碍。大家要认真学习,多思考,我们将掌握的是最根源的思想和方法。

        点击“文件”,“另存为”,打开保存界面。注意三点
  • 保存类型改为“所有文件”
  • 文件名改为“HelloWorld.java”
  • 路径尽可能短,例如D盘根目录下

20.png

这里面的知识点是:
1.      Java严格区分大小写,所以HelloWorld!=(不等于)helloworld。当然想怎么命名是你的事儿,建议使用我的命名方式(大驼峰法)。
2.      Java不支持空格,所以HelloWorld不要写成Hello(空)World。(严格来讲也可以有空格,不过最好不要多生枝节)
3.      Java类名必须和文件名一致。类名就是我们代码里写的public class HelloWorld这句话。class说明这是一个类,HelloWorld说明这个类的名称叫HelloWorld。所以我们刚刚另存为操作时保存的文件名称就应该是HelloWorld.java。

        文件保存好之后就可以开始我们下面的工作了。

2.      运行你的程序

        java程序要运行,需要经过编译,链接过程。学过编译原理的同学知道,这是个复杂的过程。还好我们只要会用两个指令就足够了。
1.      nxjc(编译)
2.      nxj(链接,上传)

        打开你的cmd窗口,输入“nxjc D:\HelloWorld.java”回车。如果没有任何报错信息出现,那就说明你成功了。这时打开你的D盘,会看到多出了一个HelloWorld.class文件。在这里说一下,class这个词会不断不断的出现,牢记他的意思是类,不是班级。看到这里要马上想到,现在你有一个叫做HelloWorld的类文件了。

        继续在cmd窗口输入:nxj –r D:\HelloWorld。你可能会出现如图的错误。
22.png

       从字面上讲,是找不到classes.jar文件。我在这个问题上卡了1个小时,这也是这篇教程迟迟不能发布的原因之一。直到后来我打开了官方的开发文档,它是你的安装目录下的README.htm文件,然后发现了这样一行字:

        “Change workingdirectory to the folder containing HelloWorld.java”

        这行英文的意思不难理解。

        为什么我要把这个错误单独拿出来讲?因为我想告诉大家,当出现问题时,首先要想到官方提供的开发文档。开发文档是我们解决问题的最好帮手。我建议要看一遍中文的,也要看一遍英文的。网友翻译的中文版虽然是为了方便我们学习,但是却并不能保证总是最新的,最正确的。在中文文档和旧版本的英文文档中,均没有上述的那句话。这时我们从此处再往上数3行看过去,发现文档中已经是Button.waitForAnyPress();而不是中文版的Button.waitForPress()了。;

        顺便向辛苦翻译的前辈表示最高的敬意。

        下面我们按照文档提示更改路径。

在cmd输入:cd\ 回车,输入d: 回车。
23.png

因为我的HelloWorld放在d盘,所以我要把目录定位在d盘。请根据实际情况更改。

确保你的NXT电源还开启着。(我写到这里时早就自动关闭了。。。),在cmd输入:nxj HelloWorld 回车。注意没有路径和文件名,会自动添加。成功后cmd窗口显示成功信息,NXT屏幕上将出现你的第一个LeJOS程序:HelloWorld。成功了!
24.png


3.      运行其他程序
       任何编程语言,提供给我们最重要的东西都会包括至少4大块内容:编译内核,开发文档,API文档,例子。编译内核就是nxj指令,开发文档的用处刚才也提到了,下面看看例子。默认位置是在我的文档下的LeJOS NXJ Samples文件夹。双击打开之后,有四个子目录。
25.png

       从名字可以分析出,samples目录下放置的是nxt端的例子,pcsamples目录放置的是pc端的例子。打开samples目录。从文件名可以看出,.settings目录肯定是和设置有关,nbproject目录我也不知道是什么,打开之后发现是一个没用的文件。Src是source的简称,打开发现正是我们要找的目录。你可能会发现这个目录一层套一层很深,留意一下。学会分析目录结构,无论学习什么都用得上。

26.png

        一直点击进去,可以看到有几十个例子。不急着动手,继续分析。看看都认识那些。

        (下面的这个Acceltest例子我犯了个惊人的低级错误,实在是汗颜。Acc在LeJOS里的意思是Accelerometer,加速度传感器,而不是我原先以为的距离传感器。距离传感器应该是Ultrasonic,“雷达”。但是里就不做修改了,因为我想到可以用这个例子教给大家如何找到自己想要的传感器。请关注后期课程。但是下面这个例子本身还是可供参考的。

        Acceltest  接近是Access,翻译一下就是接近测试,那就是距离传感器的测试。

        就从这个入手吧。打开目录,把里面的java文件拷贝到d盘根目录,然后运行nxjc和nxj指令。(首先打开java文件,删除第一行package org.lejos.sample. Acceltest ;,大家可能看着眼熟,这正是我们一层层进入的目录,所以为什么要删除,应该也能猜个差不多)。默认 的端口是1,该如何修改?我们打开代码看一下:
  1. public class AccelTest {
  2.         
  3.         public static void main(String[] args) throws Exception {
  4.                 Accelerometer accelerometer = SensorSelector.createAccelerometer(SensorPort.S1);
  5.                
  6.                 while(!Button.ESCAPE.isDown()) {
  7.                         LCD.clear();
  8.                         LCD.drawString("Accel", 0, 0);
  9.                         LCD.drawInt(accelerometer.getXAccel(), 6, 0, 1);
  10.                         LCD.drawInt(accelerometer.getYAccel(), 6, 0, 2);
  11.                         LCD.drawInt(accelerometer.getZAccel(), 6, 0, 3);
  12.                         Thread.sleep(500);
  13.                 }
  14.         }        
  15. }
复制代码
第三行,最后部分,SensorPort.S1 显然S1就是1号端口,依次类推。

        继续看其他目录,有一个View,猜测就是检查所有功能,运行一下。果然,测试马达,传感器,系统状态都在里面。
再看看其他的。

  •         Btgps  蓝牙GPS
  •         Colorsensortest颜色传感器测试
  •         Speedtest速度测试
  •         Dswitchtest开关测试
  •         Nxtcamtest相机测试

        我就不一一列举了。有认识的,有不认识的。先从认识的试起。LeJOS还是很厚道的,几乎每一个功能都有相应的测试项目,这是我们最大的帮手。如果你的程序需要获取颜色,就可以打开Colorsensortest文件,看看究竟是如何实现的。

4.      后记

        下一课我讲解java的语法和API文档的用法,学会之后就可以初步读懂别人的代码涵义,并且可以尝试着自己写一些小程序了。

如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
发表于 2013-5-12 17:05:22 | 显示全部楼层
哈哈,又赶上沙发了,没白苦等。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2013-5-12 17:08:12 | 显示全部楼层

回帖奖励 +2 乐币

iRobot老师讲解的很详细呀,正在慢慢学习,谢谢了。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2013-5-12 21:48:51 | 显示全部楼层
呵呵,这个是很需要的,明天有事干了,谢谢了,楼主辛苦了
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2013-5-12 21:53:42 | 显示全部楼层
hfj333 发表于 2013-5-12 21:48
呵呵,这个是很需要的,明天有事干了,谢谢了,楼主辛苦了

如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2013-5-13 08:30:04 | 显示全部楼层
楼主推荐一本java书呢

教程更新太慢了

想要自己看书但不知道什么书好   关于lejos的
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2013-5-13 08:42:15 | 显示全部楼层
楼主万岁!回楼上一下,网上有马士兵的视频不错。j2se这个是基础,看完马士兵的教程。再看楼主写的教程,感觉就像咖啡一样香醇,美丽。

感觉有点像做广告……  支持,支持,顶顶顶!!!!
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2013-5-13 08:52:39 | 显示全部楼层
xou822 发表于 2013-5-13 08:30
楼主推荐一本java书呢

教程更新太慢了

目前好像没有专门讲LeJOS的书。不过道理都是想通的。  你到书店找一本较薄的,包装精美的Java买回来就行了。看完了之后再去挑一本厚实的,那时你就知道该买什么样的啦。  其实我没学过Java,也没买过Java的书。。。。。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2013-5-13 09:02:32 | 显示全部楼层
wqvbqjywyg 发表于 2013-5-13 08:42
楼主万岁!回楼上一下,网上有马士兵的视频不错。j2se这个是基础,看完马士兵的教程。再看楼主写的教程,感 ...

呵呵   谢谢~

我有一点小建议,学习光靠帖子和视频是远远不够的。帖子我顶多写10几篇,视频顶多录制几十个小时,对于学习一门语言来说,只是这样的话,功夫下的还有些浅。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2013-5-13 21:50:09 | 显示全部楼层
iRobot 发表于 2013-5-13 09:02
呵呵   谢谢~

我有一点小建议,学习光靠帖子和视频是远远不够的。帖子我顶多写10几篇,视频顶多录制几 ...

有道理!
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2013-5-16 19:12:19 | 显示全部楼层

回帖奖励 +2 乐币

等比赛完,看看这个能学会么
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2013-5-16 21:00:50 | 显示全部楼层
caihc 发表于 2013-5-16 19:12
等比赛完,看看这个能学会么

你赶上直播了。这周六更新第四课。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2013-6-1 12:21:31 | 显示全部楼层
哇奥,irobot大牛 才玩了1,2个月就真么厉害,佩服,学习
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2013-6-17 21:29:10 | 显示全部楼层

回帖奖励 +2 乐币

认真听irobot老师讲课,讲的很细,谢谢老师。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2013-6-30 14:38:40 | 显示全部楼层

回帖奖励 +2 乐币

irobot很用心,我等要用心学习,感谢感谢大牛
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|中文乐高 ( 桂ICP备13001575号-7 )

GMT+8, 2024-3-28 16:20 , Processed in 0.129138 second(s), 26 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表