找回密码
 马上注册

QQ登录

只需一步,快速开始

查看: 63582|回复: 64

ev3dev - 可运行在EV3上的完整linux系统

    [复制链接]
发表于 2015-3-1 15:16:34 | 显示全部楼层 |阅读模式
本帖最后由 quakewang 于 2015-3-1 15:41 编辑

简介

ev3dev ( http://www.ev3dev.org/ ) 是一个可运行在Lego MINDSTORMS EV3控制器上的Linux发行版, 是一个完整的Debian发行版本(内核3.16.x).

它可以允许各种编程语言通过读写文件的方式对EV3进行编程, 只要你喜欢的编程语言有ARM移植, 并且支持文件读写, 那就可以用来对EV3编程.

目前ev3dev发行版本内置支持如下语言:

* bash/dash
* awk/gawk
* perl
* Lua
* guile
* ruby
* python
* Google Go (golang)
* Node.js

如果你喜欢的语言没有被内置, 你也可以通过标准的apt工具来进行安装.

特性

和官方的Lego内核相比, 有如下特性

* 支持更多的无线网卡驱动
* 支持SSH
* 支持基于USB的完整网络
* 标准的apt工具支持
* NFS文件共享和传输
* 自动NTP时钟同步
* 内建文件编辑器vim / nano
* 内置的编程语言支持, 比如 Lua, perl, gawk, Python, guile, Ruby等等

简单来说, ev3dev可以做标准linux发行版可以做的所有事情, 而官方的Lego内核只是一个精简版linux.

使用ev3dev内核:

无需舍弃官方Lego内核和rootfs, 你只需要将ev3dev安装到任何microSD (最小1GB), 然后将sd卡插入EV3, 启动器就会从sd卡启动. 当你想切换回官方内核, 只需要将sd卡拔出, 然后重启就可以了.

ev3dev还提供了名为brickman的可视化界面, 方便来做网络等相关设置.

项目状态

ev3dev目前支持大部分EV3控制器的功能, 包括:

* 马达
* 传感器
* 声音
* LED
* LCD


点评

内容给力!: 5.0 中文乐高有你更给力:): 0.0
内容给力!: 5 中文乐高有你更给力:): 0
  发表于 2015-3-1 19:25

评分

参与人数 4乐币 +60 人气 +30 收起 理由
dong628 + 10 + 10 中文乐高有你更精彩:)
yep + 10
Welkin + 5 竟然有Node.js
大蒜头 + 50 + 5 中文乐高有你更给力:)

查看全部评分

如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
发表于 2015-10-27 16:44:54 | 显示全部楼层
楼主有试过在ev3dev基础上做网络视频监控项目么?
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复 1 0

使用道具 举报

 楼主| 发表于 2015-3-1 15:17:00 | 显示全部楼层

安装ev3dev

本帖最后由 quakewang 于 2015-3-1 19:33 编辑

安装ev3dev

Step 1: 下载ev3dev镜像文件

下载地址: https://github.com/mindboards/ev3dev/releases

提供了zip和xz 2种不同格式的文件, xz文件更小, 但是需要其他软件解压(比如7zip)

Step 2: 将镜像文件拷贝到sdcard
注意: 这将会清空sdcard.

根据操作系统不同, ev3dev的官网给出了很详细的操作说明:
  • Linux
  •     * 命令行: http://www.ev3dev.org/docs/tutorials/writing-sd-card-image-linux-command-line
  •     * 可视化界面: http://www.ev3dev.org/docs/tutorials/writing-sd-card-image-ubuntu-disk-image-writer
  • Mac OS X
  •     * 命令行: http://www.ev3dev.org/docs/tutorials/writing-sd-card-image-mac-command-line
  • Windows
  •     * Win32DiskImager工具: http://www.ev3dev.org/docs/tutorials/writing-sd-card-image-win32diskimager


Step 3: 启动ev3dev
将sd卡插入EV3, 同时启动它, 第一次启动时间会比较长, 在启动过程中你会看到熟悉的linux企鹅:

QQ20150301-3.png

启动成功以后, 你会看到brickman的操作界面:


Step 4: 设置网络链接

有多种网络链接方式, 我推荐采用蓝牙链接, 然后EV3通过共享电脑的网络进行上网. 其他链接方式还包括USB/wifi网卡等, 官网上也有很详细的说明:

比如如何在windows上通过usb链接: http://www.ev3dev.org/docs/tutorials/setting-up-ethernet-over-usb-on-windows

这里我详细讲一下Mac OS如何和ev3进行蓝牙链接(因为官网上还没有这种方式的详细文档).

首先通过brickman的bluetooth菜单, 让ev3和你的电脑进行蓝牙配对.

配对成功以后, 你在电脑的网络设置里面应该可以看到Bluetooth PAN设备, 如果没有的话, 就手工添加一个:

QQ20150301-2.png

然后在系统设置的Sharing里面, 将Internet Sharing打开:

QQ20150301-1.png
然后再通过brickman的网络设置里面, 设置为通过蓝牙进行链接.

链接成功以后, brickman的左上角可以看到ip地址为192.168.2.2

Step 5: 第一次启动以后建议要做的事情

修改root密码
ssh root@192.168.2.2 默认密码是r00tme
执行passwd命令
  1. root@ev3dev:~# passwd
  2.     Enter new UNIX password:
  3.     Retype new UNIX password:
  4.     passwd: password updated successfully
复制代码

设置新用户

执行adduser命令, 创建一个你想要的用户名和密码. 同时用usermod命令, 给这个新用户设置用户组:
  1. root@ev3dev:~# adduser user
  2.     Adding user `user' ...
  3.     Adding new group `user' (1001) ...
  4.     Adding new user `user' (1001) with group `user' ...
  5.     Creating home directory `/home/user' ...
  6.     Copying files from `/etc/skel' ...
  7.     Enter new UNIX password:
  8.     Retype new UNIX password:
  9.     passwd: password updated successfully
  10.     Changing the user information for user
  11.     Enter the new value, or press ENTER for the default
  12.       Full Name []: First Last
  13.       Room Number []:
  14.       Work Phone []:
  15.       Home Phone []:
  16.       Other []:
  17.     Is the information correct? [Y/n] y
  18.     root@ev3dev:~# usermod -a -G sudo,ev3dev,plugdev,audio,video,input,bluetooth user
复制代码

设置时区

  1. root@ev3dev:~# dpkg-reconfigure tzdata
复制代码


扩大文件系统

ev3dev镜像文件只有900MB左右的大小, 执行如下命令扩大可用空间

  1. root@ev3dev:~# lvextend --extents +100%FREE --resizefs /dev/ev3devVG/root /dev/mmcblk0p3
复制代码

更新系统包默认debian的更新源在国内访问很慢, 可以先修改源到国内镜像: vim /etc/apt/sources.list 将 ftp.debian.org 修改成 ftp.cn.debian.org, 然后执行:
  1. root@ev3dev:~# apt-get update
  2.     root@ev3dev:~# apt-get upgrade
  3.     root@ev3dev:~# apt-get dist-upgrade
复制代码
如果你安装的是最新版本的镜像文件, 可以跳过这个步骤, ev3dev的开发很活跃, 一般2周左右可以执行一下这个命令, 将系统更新到最新版本.

如果有发行包升级, 安装以后, 需要重启:

  1.     root@ev3dev:~# reboot
复制代码






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

使用道具 举报

 楼主| 发表于 2015-3-1 15:17:16 | 显示全部楼层
本帖最后由 quakewang 于 2015-3-1 17:22 编辑

对于程序员来说, 所有的编程都是在解决输入输出(input/output)问题, 在linux的世界里面, 所有的io操作都是文件操作, 而ev3dev将传感器和马达的操作映射到了文件系统, 变成了统一的文件操作.

传感器

将一个超声波传感器 ( http://www.ev3dev.org/docs/sensors/lego-ev3-ultrasonic-sensor/ ) 接入到3号端口, 然后看一下文件系统下的文件:
  1. root@ev3dev:~# ll /sys/class/msensor
  2. total 0
  3. lrwxrwxrwx 1 root root 0 Mar  1 08:38 sensor0 -> ../../devices/platform/ti_omapl_pru_suart.1/tty/ttySU1/sensor0
复制代码



读取sensor0目录下的port_name文件, 显示是3号输入接口, 说明驱动已经加载成功:
  1. root@ev3dev:~# cat /sys/class/msensor/sensor0/port_name
  2. in3
复制代码



读取sensor0目录下的value0和mode文件, 显示目前距离是2550厘米(最大值, 代表在最大可探测范围内没有物体)
  1. root@ev3dev:~# cat /sys/class/msensor/sensor0/mode
  2. US-DIST-CM
  3. root@ev3dev:~# cat /sys/class/msensor/sensor0/value0
  4. 2550
复制代码



将物体在传感器前面来回移动, 可以看到这个值在发生改变
  1. root@ev3dev:~# cat /sys/class/msensor/sensor0/value0
  2. 149
  3. root@ev3dev:~# cat /sys/class/msensor/sensor0/value0
  4. 281
复制代码



我们可以通过改变mode文件的内容, 这样探测结果的单位就变成了英寸:
  1. root@ev3dev:~# echo US-DIST-IN > /sys/class/msensor/sensor0/mode
  2. root@ev3dev:~# cat /sys/class/msensor/sensor0/value0
  3. 126
复制代码


马达

将2个大型马达和1个中型马达分别接入A, B, D端口
然后看一下文件系统下的文件:
  1. root@ev3dev:~# ll /sys/class/tacho-motor/
  2. total 0
  3. lrwxrwxrwx 1 root root 0 Jan  1  2000 motor0 -> ../../devices/platform/legoev3-ports/outA/outA:ev3-tacho-motor/tacho-motor/motor0
  4. lrwxrwxrwx 1 root root 0 Jan  1  2000 motor1 -> ../../devices/platform/legoev3-ports/outB/outB:ev3-tacho-motor/tacho-motor/motor1
  5. lrwxrwxrwx 1 root root 0 Jan  1  2000 motor2 -> ../../devices/platform/legoev3-ports/outD/outD:ev3-tacho-motor/tacho-motor/motor2
复制代码



读取motor2目录下的port_name, 显示是D号输出接口, 说明驱动已经加载成功:
  1. root@ev3dev:~# cat /sys/class/tacho-motor/motor0/port_name
  2. outD
复制代码


马达的控制相比传感器更加复杂一些, 有不同的模式:  https://github.com/ev3dev/ev3dev/wiki/Using-Motors

将端口D的马达运转模式设置为时间模式
  1. root@ev3dev:~# echo  time > /sys/class/tacho-motor/motor2/run_mode
  2. root@ev3dev:~# echo   off > /sys/class/tacho-motor/motor2/regulation_mode
  3. root@ev3dev:~# echo coast > /sys/class/tacho-motor/motor2/stop_mode
  4. root@ev3dev:~# echo    40 > /sys/class/tacho-motor/motor2/duty_cycle_sp
复制代码


让端口D的马达运转2秒钟
  1. echo 2000 > /sys/class/tacho-motor/motor2/time_sp
  2. echo 1    > /sys/class/tacho-motor/motor2/run
复制代码

就可以看到马达在运转了2秒钟以后停了下来.

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

使用道具 举报

 楼主| 发表于 2015-3-1 15:17:38 | 显示全部楼层
本帖最后由 quakewang 于 2015-3-1 21:57 编辑

ev3dev内置了多种语言, 其中有我最喜欢的ruby, 利用ruby简便的文件操作api和method missing特性, 用几十行代码就可以封装出一个类库:https://github.com/quake/ev3dev_ruby

以控制马达为例子:
将马达接入端口B, 引入类库, 设置运行模式为按时间计算, 设置运行速率为50, 运行500毫秒:
  1. require 'ev3dev'

  2. m = Ev3dev::Motor.new :B
  3. m.run_mode :time
  4. m.duty_cycle_sp 50
  5. m.time_sp 1000
  6. m.go
复制代码


除了文件操作以外, 我们还可以利用语言的各种特性, 比如多线程, 循环, 来实现原先在Lego的可视化编程界面里面对应的各种功能, 以下代码就是一个简单的znap机器人, 可以原地打转, 同时判断到有物体接近, 就会张开大嘴巴去咬:
require 'ev3dev'

m1 = Ev3dev::Motor.new :A
m1.run_mode :time

m2 = Ev3dev::Motor.new :B
m2.run_mode :time

m3 = Ev3dev::Motor.new :D
m3.run_mode :time

s1 = Ev3dev::Sensor.new 3

t1 = Thread.new do
  loop do
    m2.duty_cycle_sp 50
    m2.time_sp 500

    m3.duty_cycle_sp -50
    m3.time_sp 500

    m2.go
    m3.go

    sleep rand(1.5..1.9)

    m2.duty_cycle_sp -50
    m2.time_sp 500

    m3.duty_cycle_sp 50
    m3.time_sp 500

    m2.go
    m3.go
    sleep rand(1.5..1.9)
  end
end

t2 = Thread.new do
  loop do
    distance = s1.value0.to_i
    if distance < 400
      m1.duty_cycle_sp -100
      m1.time_sp 300
      m1.go
      sleep rand(1.5..1.9)
      m1.duty_cycle_sp 50
      m1.time_sp 500
      m1.go
      sleep rand(1.5..1.9)
    end
  end
end



直接贴上Lego的标准znap机器人视频作为参考:




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

使用道具 举报

发表于 2015-3-1 21:13:02 | 显示全部楼层
据说将要支持bluetooth 4.0,可拓展性要好很多, EV3天生不带bt4 算是个硬伤
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2015-3-1 22:36:42 | 显示全部楼层
写的不错,有空学习一下.就是windows 的USB  转发会崩溃.
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2015-3-2 08:48:50 | 显示全部楼层
好东西呀!感谢楼主!收藏先,楼主高手!
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2015-3-9 09:18:26 | 显示全部楼层
楼主高手!
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2015-6-4 22:16:08 | 显示全部楼层
很好,连上去了
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2015-6-21 22:08:54 | 显示全部楼层
要是能装scratch就好了
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2015-8-4 19:03:35 | 显示全部楼层
求助!!!!!sd卡插入后启动不了,灯也不亮,一直在企鹅那死机。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2015-8-27 23:29:06 | 显示全部楼层
扶梯 发表于 2015-6-21 22:08
要是能装scratch就好了

额,要是能装scratch就真的叼炸天了。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2015-9-10 18:07:12 | 显示全部楼层
2130304 发表于 2015-8-4 19:03
求助!!!!!sd卡插入后启动不了,灯也不亮,一直在企鹅那死机。

同时按“确认”和“返回”键可以重启系统。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2015-9-10 18:09:09 | 显示全部楼层
这个项目真的非常棒啊。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-18 12:10 , Processed in 0.199777 second(s), 27 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

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