lejos ev3 (ev3 使用 java 完整攻略) - jerry Tsai

Ev3 是 LEGO® MINDSTORMS® 乐高公司发展的可程序机器人,有原生的专用语法,且可使用java 做控制。
网路上已有几篇文章,可惜未能从头解释到实作,本文希望有相同问题的人看这篇就够了,补充一些较困难的细节,以下是完整的测试过程。

开发环境设定
Java 语言是一种可以跨平台的语言,原理上需要有一个在该平台上执行java的执行器,而Ev3 (较旧型的还有nxt),使用 java 主要是使用一个可以把ev3啓动成可以执行java的系统,名为 lejos。

安装的部份如下:
1.windows端 使用j2se的开发(含jdk)

(这里查官网lejos0.9.0只能使用到jdk1.7的开发)https://download.oracle.com/java/17/latest/jdk-17_windows-x86_bin.exe
安装好後将jdk开发元件 安装在 c:\jdk1.7 底下, 另外windows的java执行器(jre )则使用 安装程序预设的路径。

设置java 环境变数
控制台->系统->进阶系统设定->环境变数
JAVA_HOME=c:\jdk1.7

**2.Ev3端
烧录lejos for ev3 **
此处下载的列表中lejos 也有旧款 nxt 的安装软件,注意到 要下载ev3版。
下载lejos ev3 我的目标是下载 0.9.0 的安装程序
https://sourceforge.net/projects/ev3.lejos.p/files/0.9.0-beta/leJOS_EV3_0.9.0-beta_win32_setup.exe/download
安装完成後,在 控制台>系统 发现 环境变数已新增
**
Ev3_HOME=c:\Program Files\leJOS EV3

3.烧制啓动Ev3用的 小张TF/SD卡 分为2个步骤
实做中这里有奌复杂
测试了很多次都失败,直接烧录卡片,Ev3本体并无法用lejos 开机,机器还是使用原来的Ev3系统开机
,後来查询很多网路资料,发现要做2次的烧录,第一次烧录成空白卡,第二次将其他啓动软件拷贝进入;猜测啓动卡本身的磁区要设成 主要啓动磁区。
https://ithelp.ithome.com.tw/upload/images/20220324/201477072YVptdiAyH.png
3.1烧录卡片第1次
将 lejos Ev3安装中附的 Sd500.zip 解压缩 为sd500.img

,下载 win32 disk imager https://sourceforge.net/projects/win32diskimager/
https://ithelp.ithome.com.tw/upload/images/20220324/20147707Q1UaaMM93P.png

此时为确保啓动卡没有问题,先将此空白卡 做 Fat32 的格式化。
再做win32diskimager烧录,捉取sd500.img制做成 啓动卡 烧录完成後 原本 32G 的SD卡 变成500M 大小 的空白卡,

3.2写入卡片第2次:找到lejos的安装目录
( c:\Program Files\leJOS EV3 ),接着找到bin目录,打开ev3sdcard.bat 这个批次档 做执行

烧录的内容 会自动选lejosimage.zip

3.3下载EV3 JRE 注意一样下载1.7版,ejre-7u60-b19-ejre-7u60-fcs-b19-linux-arm-sflt-headless-07_may_2014.tar.gz这个。
http://download.oracle.com/otn/java/ejre/7u60-b19/ejre-7u60-fcs-b19-linux-arm-sflt-headless-07_may_2014.tar.gz

将开机用的其他档案制作到 卡片中,过程如下,
发现SD卡的名称在第1次被改为 ”SD500” 此处设为G 磁碟。
https://ithelp.ithome.com.tw/upload/images/20220324/20147707NXdFKyt8WL.png

烧录2次的SD卡放入EV3中 再开机,显示如下:
https://ithelp.ithome.com.tw/upload/images/20220324/201477073n68QJYSVE.png
开机过程显示载入linux 模组及啓动许多Ev3的元件。
花了很多时间,此时Ev3 已可以用lejos 开机了。
https://ithelp.ithome.com.tw/upload/images/20220324/20147707REE0a7rEf4.png

以上 EV3 安装lejos的部份已全部完成。
再来要设定 pc端 windows 上写程序的部份

4.下载eclipse mars 版( 执行jdk1.7)
https://www.eclipse.org/downloads/packages/release/mars/2

5.加入 lejos 功能 到 eclipse 上
在Eclipse 选单 “help”->”install newsoftware”->”add”
Name填入lejos,Location填入http://lejos.sourceforge.net/tools/eclipse/plugin/ev3,
最後点击Ok。

6.将 ev3 机器 接线 连到 windows usb 上
Pc 上出现 “新增硬体” 提示
https://ithelp.ithome.com.tw/upload/images/20220324/20147707zlCKn0UYWb.png

查询网路,才知道 要装一个 RNDIS 的驱动
Google 一下,RNDIS(Remote Network Driver Interface Specification,远程网络驱动接口规范)是一个通信协议。
安装 windows 连到ev3 的驱动程序 driver
如下连结:
http://www.java-online.ch/lego/index.php?inhalt_links=home/nav_home.inc.php&inhalt_mitte=ev3install/usb_windows.inc.php&navUSB=ev3install/usb_windows.inc.php

安装好以後照着EV3主机上的显示 10.0.1.1 检查看有没有连接到,
使用 ping 指令 : ping 10.0.1.1
https://ithelp.ithome.com.tw/upload/images/20220325/20147707rgpnmNqmfa.png
有回应Reply 表示Windows 已经可以连到Ev3了 。

7.打开eclipse 新增一个 lejos 专案
新增一个测试文件 档名是Test.java
https://ithelp.ithome.com.tw/upload/images/20220325/20147707zAM9VzMoiq.png

选择lejos -> Ev3 control
https://ithelp.ithome.com.tw/upload/images/20220325/20147707yoT4gqWblS.png

Name 的地方填入 Ev3 的ip位址 10.0.1.1
https://ithelp.ithome.com.tw/upload/images/20220325/20147707X2FRZHyP0S.png

按 Connect
https://ithelp.ithome.com.tw/upload/images/20220325/20147707NFne6CWmcp.png

显示 Connected (已连接)

8.将测试程序上传
写一个 测试程序 取名 Test.java 执行档 做成 Test.jar
上传 (按 下方 Upload File)
https://ithelp.ithome.com.tw/upload/images/20220325/20147707vixRtNlF50.png
此时显示 java 测试程序Test 已经上传成功。
https://ithelp.ithome.com.tw/upload/images/20220325/20147707uBRy6IBUmp.png

9.执行测试
https://ithelp.ithome.com.tw/upload/images/20220325/20147707BuqmnHVEV1.jpg

出现 执行 java 的图形

https://ithelp.ithome.com.tw/upload/images/20220325/20147707BGar9TfbM8.png

10.测试用 程序解析
Test.java
Import lejos.hardware.motor.Motor; //引入 马达类别
Import lejos.robotics.RegulatedMotor; //引入 马达类别
public class Test { //建构类别 Test
static RegulatedMotor leftMotor = Motor.B;
//宣告 取名 左马达 是 B埠 右马达是 C埠
static RegulatedMotor rightMotor = Motor.C;
public static void main(String[] args) //执行区
{
leftMotor.setSpeed(400); //设定左速度为400
rightMotor.setSpeed(400); //设定右速度为400
for(int i=0;i<10000;i++) //设定回圈执行一万次
{
leftMotor.forward(); //左马达 正转
rightMotor.forward();//右马达 正转
}
}
}

**11.执行结果:

按照java测试程序中所写的 ,轮型机器人Ev3

设定速度为400,

向前 直走 了一些时间 等 for 回圈跑完就自动停止了。**

到此 Ev3 使用java 全部完成, 後续其他功能尚待时间研究。

此文若蒙参考采用 请贴上连结 谢谢

参照文件

  1. lejos +Ev3+win7之设定
    https://www.twblogs.net/a/5b891e8e2b71775d1ce00144
  2. lejos Ev3 问题解决
    http://blog.sina.com.cn/s/blog_1967596aa0102za7u.html
    3.修平科技大学 资讯管理系 实务专题审查 扫地机器人制作(lejos Nxt)
    http://ir.hust.edu.tw/bitstream/310993100/3209/1/

<<:  爲什麽我的Mac运行缓慢?解决办法是什麽?

>>:  怎么恢复安卓系统被删除的短信呢?

[Day 30] 再访碰撞侦测与解析(二) - 初步碰撞解析

今天只有研究一些相关的文章与做法,并没进行实作,所以单纯的纪录一下 今日目标 角色移动不穿过其他物件...

[Day23] 发布你的Action

现在你的Action已经具备完善的对话流,能针对各式装置进行支援。 测试者们回报的用户体验均十分良...

【Day01】JavaScript 是如何运行的

程序语言的运行过程 在知道如何运行之前,必须先了解程序语言是如何被运行的。 程序语言依照运行方式可分...

Day-8 Geeker 们最爱的工程型怀旧游戏神器 OSSC

如果要把怀旧玩家分种类、我想我会分成以下三种。 玩家、这类型的人以游戏为主、不一定会在乎用什麽方式玩...

[深入浅出MQTT]: v3.1.1与v5 的差异

[深入浅出MQTT]: v3.1.1与v5 的差异 MQTT v3.1.1 与 v5 完全相容,且提...