LoginSignup
12
11

More than 5 years have passed since last update.

Mindstorms EV3をRubyで動かす方法(ev3dev OS)

Last updated at Posted at 2016-01-25

LEGO Mindstorms EV3にDebian Linuxベースのev3dev OSを載せて、ev3dev_ruby gemを使ってRuby(CRuby)でEV3を制御することができます。

ev3devは、microSDカードから起動して、LEGO社のEV3標準ファームウェア(OS)には一切変更を加えずに動作します。
リアルタイムOSではありませんが、RubyでライントレースのPID制御ができる程度の応答性は充分ありました。

他のリアルタイムOSのTOPPERS EV3RTを載せて、mrubyで動かす方法についてはこちらを
→・Mindstorms EV3をmrubyで動かす方法(Macで環境構築編) - noanoa07 - Qiita
→・来年のETロボコンにmrubyで参加しようと思ってるひとへ(2015年版) - yamanekko -Qiita

環境

  • Mindstorms EV3;ev3dev(ev3dev-jessie-2015-12-30)
  • PC;OS X 10.11.2 El Catitan

1.ev3dev のインストール、起動、ネットワーク設定

下記を参照;
→・(公式ページ)Getting Started with ev3dev - ev3dev.org
→・LEGO Mindstorms EV3 活用事例 - OpenRTM-aist
→・EV3 および ev3dev の初期設定 - OpenRTM-aist
→・EV3-Pythonプログラミング(ev3dev)環境 wifi接続手順 - アフレル

ネットワークの接続方法;

2.ev3devにリモートログイン

PC(Mac、Linux)のターミナル(WindowsではPuTTY、Tera Termなど)から、 EV3(ev3dev OS)にリモートログイン。

$ ssh robot@ev3dev.local
(または、EV3の液晶画面に表示されたIPアドレスが 192.168.1.76 だとすると;
$ ssh robot@192.168.1.76)

The authenticity of host 'ev3dev.local (192.168.1.76)' can't be established.
ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)? yes

初回のログインの警告には、 yesを入力。

Warning: Permanently added 'ev3dev.local,192.168.1.76' (ECDSA) to the list of known hosts.
robot@ev3dev.local's password: 

パスワード makerを入力。
※ デフォルトのユーザー名とパスワードは、2015-12-30版から robot と makerに。(それ以前は、root と r00tme)

            _____     _
   _____   _|___ /  __| | _____   __
  / _ \ \ / / |_ \ / _` |/ _ \ \ / /
 |  __/\ V / ___) | (_| |  __/\ V /
  \___| \_/ |____/ \__,_|\___| \_/

Debian jessie on LEGO MINDSTORMS EV3!

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.

robot@ev3dev:~$ 

※ コマンドプロンプトの表示;

  • $ は PC(Macや Windows、Linux OS)の操作
  • robot@ev3dev:~$ は EV3(ev3dev OS)のPCからのリモート操作

3.ev3devのアップデート

robot@ev3dev:~$ sudo apt-get update

 
※ ev3dev OSのカーネルアップデートでモータークラスに非互換の変更があったようなので、以下のコマンドの実行は現時点(2016.6.17)ではおすすめしません。

robot@ev3dev:~$ sudo apt-get upgrade
robot@ev3dev:~$ sudo apt-get dist-upgrade
robot@ev3dev:~$ sudo reboot

4.ev3dev_ruby gemのインストール

ev3dev_ruby gemを(PCにではなく、EV3のev3dev OSに)インストール。

robot@ev3dev:~$ sudo gem install ev3dev_ruby

5.サンプルプログラム

→・ev3dev_rubyのexamplesフォルダを参照

License; unlicense(public domain)

  • (EV3のポートAにMモーターを接続)
midiummotor.rb
#!/usr/bin/ruby

# LEGO EV3 Medium Servo Motor (45503)
# http://www.ev3dev.org/docs/motors/
# http://www.ev3dev.org/docs/motors/lego-ev3-medium-servo-motor/
# http://www.ev3dev.org/docs/drivers/tacho-motor-class/

require 'ev3dev'

mm = Ev3dev::Motor.new 'A'

p mm.device_path    #=> "/sys/class/tacho-motor/motor0"
p mm.driver_name    #=> "lego-ev3-m-motor"
p mm.address        #=> "outA"
p mm.commands       #=> "run-forever run-to-abs-pos run-to-rel-pos run-timed run-direct stop reset"
p mm.stop_commands  #=> "coast brake hold"
p mm.stop_command   #=> "coast"


mm.duty_cycle_sp 100
mm.command 'run-forever'
sleep 3
mm.command 'stop'

mm.duty_cycle_sp -100
mm.command 'run-forever'
sleep 3
mm.command 'stop'

実行するとモーターが3秒間回り、続いて3秒間逆回転。
 

  • (EV3のポート3にカラーセンサーを接続)
color_reflect.rb
#!/usr/bin/ruby

# LEGO EV3 Color Sensor (45506)
# http://www.ev3dev.org/docs/sensors/
# http://www.ev3dev.org/docs/sensors/lego-ev3-color-sensor/
# http://www.ev3dev.org/docs/drivers/lego-sensor-class/

require 'ev3dev'

col = Ev3dev::Sensor.new 3

p col.device_path  #=> "/sys/class/lego-sensor/sensor2"
p col.driver_name  #=> "lego-ev3-color"
p col.address      #=> "in3"
p col.modes        #=> "COL-REFLECT COL-AMBIENT COL-COLOR REF-RAW RGB-RAW COL-CAL"
p col.mode         #=> "COL-REFLECT"

col.mode 'COL-REFLECT'

p col.mode         #=> "COL-REFLECT"
p col.num_values   #=> "1"
p col.value0.to_i  #=> 93


50.times do
  puts col.value0.to_i
  sleep 0.1
end

実行するとカラーセンサーが読み取った反射光の明るさを50回表示。

6.サンプルプログラムの実行

下記を参照;
→・noanoa07/ev3dev_ruby/README.md - GitHub

参考)
→・EV3 デバイスの利用 - OpenRTM-aist
→・python-ev3dev の利用 - OpenRTM-aist
→・ev3dev C++ バインディングの利用 - OpenRTM-aist

6-1)サンプルプログラムのダウンロード

noanoa07/ev3dev_ruby - GitHubのページ右上の「Clone or download」ボタンを押し、「Download ZIP」で PC にサンプルプログラムをダウンロードし、展開。
(展開先は /Users/xxx/Downloads/ev3dev_ruby-master/examples/ とする)

6-2)EV3へコピー

EV3の液晶画面にFile Browserが表示するディレクトリは /home/robot なので、このディレクトリにコピーする。

  • scpやrsyncを使う(Mac、Linux)
$ scp -r /Users/xxx/Downloads/ev3dev_ruby-master/examples  robot@ev3dev.local:/home/robot
(改行せずに一行で) 
  • WinSCPを使う(Windows)

6-3)サンプルプログラムの実行

※ 実行方法は2通り。
(プログラム名を midiummotor.rbとする)

6-3-A)PCからリモートで実行

robot@ev3dev:~$ cd /home/robot
robot@ev3dev:~$ ls
LICENSE.txt button      led     screen      sound
battery     image       motor
robot@ev3dev:~$ cd motor
robot@ev3dev:~$ ls
autonomous.rb   largemotor.rb   linetrace.rb    linetrace_2.rb  midiummotor.rb
color_reflect.rb  linetrace_2.rb  midiummotor.rb
robot@ev3dev:~$ ruby midiummotor.rb

6-3-B)EV3単独で実行

6-3-B-1)プログラムにshebangを書く

プログラムの一行目にshebangと呼ばれる、起動させるRubyインタプリタを指定する行を付ける。

robot@ev3dev:~$ ruby -v
ruby 2.1.5p273 (2014-11-13) [arm-linux-gnueabi]
robot@ev3dev:~$ which ruby
/usr/bin/ruby

Rubyインタプリタのある場所は /usr/bin/ruby なので、
プログラムの一行目に
#!/usr/bin/ruby
と書いておく。(サンプルプログラムには記載済み。)

6-3-B-2)プログラムに実行権限を付ける

ファイルの実行権限の確認。

robot@ev3dev:~$ cd /home/robot
robot@ev3dev:~$ cd motor
robot@ev3dev:~$ ls -l
...
-rw-r--r-- 1 robot robot  474 Jan 18 16:18 midiummotor.rb
...

midiummotor.rb に、実行権限 x が表示されていないので、アクセス権限を変更。

robot@ev3dev:~$ chmod +x midiummotor.rb
robot@ev3dev:~$ ls -l
...
-rwxr-xr-x 1 robot robot  474 Jan 18 16:18 midiummotor.rb
...

実行権限 x が付与。

6-3-B-3)File Browserで実行

EV3の液晶画面のFile Browserで、/home/robot ディレクトリを表示させる。上下ボタンまたは中央ボタンでディレクトリやプログラムを選択していき、中央ボタンを押すと実行される。

7.irbでのプログラムの実行

EV3(ev3dev)の irb でもプログラムを実行できる。
(EV3のポートAにMモーターを接続)

robot@ev3dev:~$ irb
irb(main):001:0> require 'ev3dev'
=> true
irb(main):002:0> mm = Ev3dev::Motor.new 'B'
=> #<Ev3dev::Motor:0x193890 @device_path="/sys/class/tacho-motor/motor0">
irb(main):003:0> mm.device_path
=> "/sys/class/tacho-motor/motor0"
irb(main):004:0> mm.driver_name
=> "lego-ev3-l-motor"
irb(main):005:0> mm.address
=> "outB"
irb(main):006:0> mm.commands
=> "run-forever run-to-abs-pos run-to-rel-pos run-timed run-direct stop reset"
irb(main):007:0> mm.stop_commands
=> "coast brake hold"
irb(main):008:0> mm.duty_cycle_sp 100
=> #<Ev3dev::Motor:0x193890 @device_path="/sys/class/tacho-motor/motor0">
irb(main):009:0> mm.command 'run-forever'
=> #<Ev3dev::Motor:0x193890 @device_path="/sys/class/tacho-motor/motor0">
irb(main):010:0> sleep 3

=> 3
irb(main):011:0> mm.command 'stop'
=> #<Ev3dev::Motor:0x193890 @device_path="/sys/class/tacho-motor/motor0">
irb(main):012:0> exit
robot@ev3dev:~$ 

8.ev3dev API

ev3dev_ruby gemはev3dev OSの薄いラッパーなので、使い方はev3dev APIとほぼ同じ。

モーター

センサー

内蔵ハードウェア

9.Ev3dev::Motor クラスAPI

→・モータークラス API

※ sysfs
モーターはev3dev OSの仮想的ファイルシステムの /sys/class/tacho-motor/motor<N>
として扱われる。(<N> は接続された時に振られる数字で、ポート番号とは違う。)

  • device_path(読み取り専用)
    /sys/class/ のパスを表示

  • address(読み取り専用) ※ 2015-9版までは、port_name
    ポート名を表示

  • driver_name(読み取り専用)
    モーター名の表示

  • command(書き込み専用)
    以下のサブコマンドを伴って、モーター動作を指定する(例;command 'run-forever')
    ・run-forever
     別のコマンドが来るまでずっと回る
    ・run-to-abs-pos
     position_sp で指定したモーター位置(絶対値)まで回り、stop_command で指定されたモードで止まる
    ・run-to-rel-pos
     position_sp で指定したモーター位置(相対値)分だけ、現在の位置から回り(現在位置 + position_sp)、stop_command で指定されたモードで止まる
    ・run-timed
     time_sp で指定した時間だけ回り、stop_command で指定されたモードで止まる
    ・run-direct
     duty_cycle_sp で指定したスピードで回る。 他と違い、duty_cycle_sp が変わると直ちにスピードが変わる
    ・stop
    stop_command で指定されたモードで止まる
    ・reset
     モーターの動作モード、停止モードを初期値に戻し、モーターも止める

  • commands(読み取り専用)
    command のリスト

  • stop_command(読み取り/書き込み)
    停止モードの表示及び設定。
    ・coast: 惰性で止まる
    ・brake: ブレーキをかけて止まる
    ・hold: 現在位置を保持(外力がかかったら元に戻そうとする)

  • stop_commands(読み取り専用)
    停止モードの一覧表示

  • duty_cycle(読み取り専用)
    現在のモータースピードの表示(-100~100 %)。負の値は逆回転。

  • duty_cycle_sp(読み取り/書き込み)
    モータースピードのセット値の表示(デューティー比(出力率) -100 ~ 100 %)。数字を付けるとセット値の設定。(speed_regulationが offの場合に使われる。)
    負の値は逆回転。(run-to-abs-pos とrun-to-rel-pos では負の値は無視。)

  • time_sp(読み取り/書き込み)
    モーター駆動時間の表示及び設定。 run-timed で使用される。

  • position(読み取り/書き込み)
    モーターの現在位置の表示(ロータリーエンコーダーの値) 、及び設定。
    時計回りで増加、反時計回りで減少。(-2,147,483,648~+2,147,483,647 の32-bit signed integer)

  • position_sp(読み取り/書き込み)
    run-to-abs-pos とrun-to-rel-pos コマンドの設定モーター位置の表示及び設定。(-2,147,483,648~+2,147,483,647 の32-bit signed integer)

  • speed(読み取り専用)
    現在のモータースピードの表示。
    数字はカウント/秒で、度(°)ではないので、 必要ならcount_per_rot を使って変換すること。

  • speed_sp(読み取り/書き込み)
    目標スピードの表示及び設定。 数字を付けるとセット値の設定。(speed_regulationが onの場合に使われる。)
    負の値は逆回転。(run-to-abs-pos とrun-to-rel-pos では負の値は無視。)
    数字はカウント/秒で、度(°)ではないので、 必要ならcount_per_rot を使って変換すること。

  • count_per_rot(読み取り専用)
    一回転あたりのモーターカウント

  • speed_regulation(読み取り/書き込み)
    スピード調整モードの表示及び設定
    ・on: speed_sp で設定されたスピードにしようと自動調整する
    ・off: duty_cycle_sp で設定されたスピードで動く

  • state(読み取り専用)
    状態表示
    ・ramping: 加速 / 減速途中
    ・holding: モーターは回転していないが、その位置を保持している
    ・stalled: モーターは回転していない

  • ramp_up_sp(読み取り/書き込み)
    徐々に加速するセット値の表示及び設定(ミリ秒)。正の値で徐々に加速して、0%から100%になるまでの時間で表す。duty_cycle_spや speedで最大値が設定されていれば、加速は途中で止む。

  • ramp_down_sp(読み取り/書き込み)
    徐々に減速するセット値の表示及び設定(ミリ秒)。正の値で徐々に減速して、100%から0%になるまでの時間で表す。最初が100%以下なら、減速する時間はこれより短くなる。

  • encoder_polarity(読み取り/書き込み)
    モーターのロータリーエンコーダの極性の表示(normal またはinversed)、及び設定

  • polarity(読み取り/書き込み)
    モーターの極性の表示、及び設定
    ・normal: 時計回り
    ・inversed: 反時計回り

10.Ev3dev::Sensor クラスAPI

→・センサークラス API

※ sysfs
センサーはev3dev OSの仮想的ファイルシステムの /sys/class/lego-sensor/sensor<N>
として扱われる。(<N> は接続された時に振られる数字で、ポート番号とは違う。)

  • device_path(読み取り専用)
    /sys/class/ のパスを表示

  • address(読み取り専用) ※ 2015-9版までは、port_name
    ポート名を表示

  • driver_name(読み取り専用)
    センサー名の表示

  • modes(読み取り専用)
    センサーのモード一覧

  • mode(読み取り/書き込み)
    センサーのモードの表示、及び設定

  • num_values(読み取り専用)
    センサーから返ってくるデータの数

  • value(読み取り専用)
    センサーからのデータが、それぞれ value0、value1、value2、…で取得できる。
    返ってくる値は文字列なので、整数にしたい場合は value0.to_i のようにする

11.Ev3dev::Battery クラスAPI

→・Battery status? - Issue #68 - ev3dev/ev3dev - GitHub

※ sysfs
バッテリーはev3dev OSの仮想的ファイルシステムの /sys/class/power_supply/legoev3-battery
として扱われる。

  • device_path(読み取り専用)
    /sys/class/ のパスを表示

  • voltage_now(読み取り専用)
    バッテリーの現在の電圧(マイクロボルト)を表示。
    返ってくる値は文字列なので、整数にしたい場合は value0.to_i のようにする。

  • uevent(読み取り専用)
    バッテリーの各種情報を表示

12.Ev3dev::Sound クラスAPIの解説

→・Using Sound - ev3dev/ev3dev - GitHub

※ sysfs
サウンドはev3dev OSの仮想的ファイルシステムの /sys/devices/platform/snd-legoev3/
として扱われる。

  • device_path(読み取り専用)
    /sys/devices/ のパスを表示

  • mode(読み取り専用)
    再生モード(idle、tone、pcm)を表示

  • volume(読み取り/書き込み)
    音量(0~100)の表示、及び設定

  • beep
    →・beep man page - debian.org
    ビープ音を鳴らす
    ・引数なし
     440Hz 200ms で鳴らす
    ・beep '-f 200 -l 500'
     -f 周波数(Hz)の指定
     -l 長さ(ms) の指定
    ・sound.beep "-f 262 -l 180 -d 20 -r 2 \
    -n -f 392 -l 180"
     -r 繰り返し回数
     -d 繰り返しの時の間隔(ms)
     -n 前の指定をクリアする

  • tone
    ビープ音を鳴らす
    ・引数なし
     現在の周波数を返す(鳴っていない時は 0を返す)
    ・tone 440, 1000
     第1引数;周波数(Hz)の指定 (例;440Hz)
     第2引数;時間(ms)の指定(例;1000ms)
    ・tone 500
     周波数(Hz)の指定(例;500Hz)
     ずっと鳴る
    ・tone 0
     鳴るのを停止

  • aplay
    →・aplay(1) - Linux man page
    .wav ファイルを再生
    ・aplay 'my_file.wav'
     my_file.wav ファイルを再生
    ・aplay '-d 1 my_file.wav'
     -d 再生時間を指定(秒)(例;1秒)

  • mpg123
    .mp3 ファイルを再生
    ただし、あらかじめ mpg123 player のインストールが必要
    robot@ev3dev:~$ sudo apt-get install mpg123
    ・mpg123 'sample.mp3'
     sample.mp3 ファイルを再生
    ・mpg123 '-2 sample.mp3'
     -2 サンプリングレートを1/2(22 kHz)に

  • espeak
    →・eSpeak Speech Synthesizer
    テキストをしゃべらせる
    ・espeak "'I can speak.'"
     文字列 'I can speak.' をしゃべらせる(' 'の外側を " "で囲む)
    ・espeak "'#{text}'"
     文字列オブジェクト text を展開してしゃべらせる(' 'の外側を " "で囲む)
    ・espeak "-f sample.txt"
     sample.txt ファイルをしゃべらせる
    ・-f ファイルを指定
     -p ピッチを指定(0~90、標準 50)
     -s スピードを指定(ワード/分 80~500、標準 175、早口 260)

13.Ev3dev::Led クラスAPIの解説

→・Using the LEDs - ev3dev/ev3dev - GitHub

※ sysfs
LEDはev3dev OSの仮想的ファイルシステムの /sys/class/leds
として扱われる。

※ LED は4つ;
・左緑(left_green)、左赤(left_red)、右緑(right_green)、右赤(right_red)
・明るさの設定値 0~255(最大輝度)
・LEDを指定しないと、全LEDの操作となる

  • paths
    設定されている LEDのパスを表示

  • Ev3dev::Led::GREEN
    緑 255、赤 0

  • Ev3dev::Led::RED
    緑 0、赤 255

  • Ev3dev::Led::AMBER
    緑 255、赤 255

  • left_green
    左緑LED を指定

  • left_red
    左赤LED を指定

  • right_green
    右緑LED を指定

  • right_red
    右赤LED を指定

  • left
    左緑と左赤LED を指定

  • right
    右緑と右赤LED を指定

  • on
    ・on(引数なし);最大輝度で点灯
    ・on 100 ;輝度 100 で点灯
    ・on 100, 200 ;緑 100、赤 200 で点灯(緑と赤LED を指定時)

  • off
    全 LED を消灯

  • blink
    ・blink(引数なし);点灯 500ms、消灯 500ms、最大輝度 で繰り返す
    ・blink 255, 0, 1000, 150 ;緑 255、赤 0、点灯 1000ms、消灯 150ms で繰り返す(緑と赤LED を指定時)
    ・blink 100, 750, 250 ;輝度 100、点灯 750ms、消灯 250ms で繰り返す(単色LED を指定時)
    ・blink 255, 0 ;緑 250、赤 0、点灯 500ms、消灯 500ms で繰り返す(緑と赤LED を指定時)
    ・blink 10 ;輝度 10、点灯 500ms、消灯 500ms で繰り返す(単色LED を指定時)

  • set_flash
    ・set_flash(引数なし);フラッシュ時間 0.1s に設定
    ・set_flash 20 ;フラッシュ時間 0.2s に設定

  • flash
     フラッシュ点灯

以下、単独のLED を指定時;

  • max_brightness(読み取り専用)
    最大輝度を表示

  • brightness(読み取り/書き込み)
    設定されている輝度の表示、及び設定

  • trigger(読み取り/書き込み)
    設定されている Trigger の表示、及び設定
    ・timer(書き込み専用)(例;trigger 'timer')
     点灯・消灯繰り返しモードに設定
     - delay_on(読み取り/書き込み)
      点灯時間の表示、及び設定(ms)
     - delay_off(読み取り/書き込み)
      消灯時間の表示、及び設定(ms)
    ・none(書き込み専用)(例;trigger 'none')
     初期状態に戻す(消灯する)
    ・heartbeat(書き込み専用)
     CPUの使用に応じて点滅
    ・mmc0(書き込み専用)
     microSDカードのアクセスに応じて点滅
    ・transient(書き込み専用)
     フラッシュ点灯(上記)

14.Ev3dev::Button クラスAPIの解説

→・Using the EV3 Buttons - ev3dev/ev3dev - GitHub

※ EV3のボタンは 5つ;
上(up)、下(down)、左(left)、右(right)、中央(enter)、左上(back)

  • up?
    上ボタンが押されている/押されていない;返り値 true/ false

  • down?
    下ボタンが押されている/押されていない;返り値 true/ false

  • left?
    左ボタンが押されている/押されていない;返り値 true/ false

  • right?
    右ボタンが押されている/押されていない;返り値 true/ false

  • enter?
    中央ボタンが押されている/押されていない;返り値 true/ false

  • back?
    左上ボタンが押されている/押されていない;返り値 true/ false

  • pressed
    押されているボタンを配列で返す

15.液晶(LCD)APIの解説

→・Using the EV3 LCD - ev3dev/ev3dev - GitHub
→・Display_API.md - noanoa07/ev3dev_ruby - GitHub

  • 液晶のスペック
Mode 178 x 128 pixel
LineLength 24 bytes (192 bits)
Geometry 1 (1 bit per pixel)
Type PACKED PIXELS
Visual MONO01 (0: white, 1: black)
Frame Buffer directory /dev/fb0
Frame Buffer size 24 * 128 = 3072 bytes

※ 横幅は 192ビットの内の 178ビット、縦幅は 128ビットが実際に表示される

※ 対応する画像フォーマット
 モノクロ 192 x 128 ピクセル .mono フォーマット(LSB)
→・ImageMagick: Supported Image Formats

Ev3dev::Screen クラスAPI

  • インスタンス変数 @imgs(配列)に画像データが入る

  • load(image_file)
    image_fileファイルを読み込み、@imgs の配列に追加

  • load_blank
    空白画像を @imgs の配列に追加

  • show
    @imgs の配列の最初の画像をディスプレイに表示
    配列が2つ以上の時は、表示した画像は削除

  • show_blank
    @imgs に関係なく、空白画像をディスプレイに表示

Ev3dev::Image クラスAPI

  • 任意の画像フォーマットを「モノクロ 192 x 128 ピクセル .mono フォーマット」に変換
  • テキスト画像を作成
  • RMagick gem (ImageMagick Ruby binding) のインストールが必要
robot@ev3dev:~$ sudo apt-get update
robot@ev3dev:~$ sudo apt-get install ruby-rmagick
(または ~$ sudo gem install rmagick -N -V)

・initialize(image_file)
 image_fileファイルを読み込んで、「モノクロ 192 x 128 ピクセル .mono フォーマット」に変換、あるいはファイルを指定しないと空白の画像を作成

・save(output_file)
 output_fileファイルを保存(ファイル名には .mono が必要)

・text(x, y, size, string)
 テキスト画像を作成
 ・x; テキストの x 座標
 ・y; テキストの y 座標
 ・size; フォントサイズ
 ・string; 文字

PC上での対応画像(モノクロ 192 x 128 ピクセル .mono フォーマット)の作り方

ImageMagick での作り方

  1. ImageMagick のインストール
    →・ImageMagickサイト参照

  2. ターミナル(コマンドプロンプト)で実行

$ convert -resize 192x128! original_file.jpg converted_file.mono
 (出力ファイル名には .mono が必要)

3. PC上で .monoファイルの表示
(X Window System、MacではXQuartzが必要)

$ display -size 192x128 converted_file.mono

RMagick(ImageMagick のRuby binding)での作り方

  1. ImageMagick のインストール
    →・ImageMagickサイト参照

  2. RMagick のインストール
    →・RMagickサイト参照

  3. Rubyプログラムで実行

require 'RMagick'
target_image =  Magick::Image.read('original_file.jpg').first
target_image.resize_to_fill!(192, 128)
target_image.write('converted_file.mono')  #出力ファイル名は .mono にすること
target_image.destroy!

4. PC上で .monoファイルの表示
(X Window System、MacではXQuartzが必要)
 Rubyプログラム

require 'RMagick'
mono_image = Magick::Image.read('converted_file.mono') { self.size = "192x128" }.first
mono_image.display

 
(→・元記事

 

12
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
11