BioErrorLog Tech Blog

試行錯誤の記録

ChatGPTをロボットの頭脳にする その1: カメラ/サーボモーターとChatGPTを組み合わせる

Raspberry Pi上で、カメラ/サーボモーターとChatGPTを組み合わせて簡単な実験を行います。

はじめに

ChatGPTを初めて触った時、これはロボットの頭脳として使えるのでは、とピンと来ました。

最小限の世界観を作ってみたので、備忘録を残します。

ChatGPTとRaspberry Pi/カメラ/サーボモーターを組み合わせる

プロトタイプコンセプト

今回の実験コンセプトはこちら:

  1. ChatGPTが現実世界の情報を認識する
  2. ChatGPTが現実世界の次のアクションを自ら決定する
  3. 1-2を繰り返し、自分が置かれている現実世界の状況をChatGPTが把握する
  4. 「ねえ今どんな気持ち?」ってChatGPTに聞く

現実世界の次のアクションを"ChatGPT自身が"決定する、というところがこだわりです。

将来的には、ChatGPTを頭脳としてロボットが自由に動き回り、環境を自律的に学習していく、みたいなことが出来たら面白いですね。

構成

ハードウェア

ハードウェア構成

サーボモーター2つとカメラ1つをRaspberry Piに接続しています。

サーボモーターの制御方法は、以前書いたこちらの記事と同様です。

www.bioerrorlog.work

サーボモーターとカメラは、両面テープと輪ゴムでくっつける、という小学生の工作みたいなことをしています。

サーボモーターとカメラを両面テープと輪ゴムでくくり付けただけの"首振りロボット"

これで水平方向および垂直方向の首振りと、カメラによる画像取得が可能です。

ソフトウェア

ソースコードはこちら:

github.com

ざっくり下記の処理を行っています。

  1. カメラから画像を取得
  2. 取得画像から物体認識
  3. 現状のサーボモーターの角度と、画像に映った物体の名前をChatGPT APIに送信
  4. 次のサーボモーターの角度と、今の気持ち(フリートーク)がChatGPT APIから返される
  5. ChatGPTが指定した角度に従い、サーボモーターを制御
  6. 1-5を複数回繰り返す
  7. 置かれた環境についての説明を求める


一つのポイントは、"次のサーボモーターの角度"をChatGPTに指定させることです。 返答に含まれる値をPython側で解釈し、実際にサーボモーターを制御しています。 画面のあちら側だけの存在だったChatGPTに、現実世界に作用できる手段を与えたみたいで興奮しました。

これは、ChatGPTからの返答をJSON形式に固定させることで実現しています。 (JSONならそのままPythonで容易に解釈できる)

ChatGPTからの返答をJSON形式に固定させるためには、ChatGPT APIのtemperature(回答のランダム性パラメータのようなもの)を低めに設定する必要があります。 今回は0.2に設定して上手く機能しましたが、高め(例えばデフォルトの1.0)に設定すると、指定したJSON形式とは異なる返答がくる場合が出てきます。


もう一つの注意点は、ChatGPT APIからのレスポンスは現状かなり遅い(10-20sec, ひどい時はもっと遅い)、という点です。 これはForumで調べてみても皆同じように言っているのですが、現状は改善を待つことしかできなそうです。

Search results for 'API response too slow' - OpenAI API Community Forum

スムーズにこの首振りロボットを動かすには、なるべくAPIを呼び出す回数を減らす工夫が必要になります。 今回のケースでは、一回の応答の中に"次のサーボモーター角度"の指定を複数回分入れ込ませることで、API応答の待ち時間が毎回発生するのを回避しました。

最終的には、こちらのsystemプロンプトに落ち着きました:

You are a robot with a camera, composed of 2 servo motors: horizontal & vertical.
Horizontal: min -90 right, max 90 left.
Vertical: min -90 down, max 90 up.
Your behavior principles: [curiosity, inquisitiveness, playfulness].
Your answer MUST be in this JSON format: {"NextServoMotor": [{"Horizontal": int(-90~90), "Vertical": int(-90~90)}], "FreeTalk": string}
Constraint: len(your_answer["NextServoMotor"]) == 5
Answer example: {"NextServoMotor": [{"Horizontal": -60, "Vertical": -30},{"Horizontal": 0, "Vertical": 0},{"Horizontal": 90, "Vertical": -45},{"Horizontal": 0, "Vertical": 60},{"Horizontal": -30, "Vertical": -60}],"FreeTalk": "Based on what I've seen, I'm curious about the PC and mouse. I wonder what you use them for and what kind of work or play they are involved in?"}

robot-gpt/robot.py at 85c256e3366f57532e74ee5c1294b69717647df9 · bioerrorlog/robot-gpt · GitHub

動作結果

実際にこの"首振りロボット"が動作している様子はこちらです:

周囲の探索を複数回行った後、置かれている状況を尋ねると下記のような返答が返ってきます。

Based on what I have seen, there are a few objects in the room, including a bottle and a laptop. However, I have not seen much else yet. I am curious to explore more and see what other interesting things I can find!

「これまでに見たものに基づくと、部屋にはボトルとラップトップ等の物がいくつかあります。 しかし、まだそれ以外の物はあまり見てません。 もっと探索して、他にどんな面白いものが見つけられるか楽しみです!」

想定した最小限の世界観を実現できました。

夢が広がります。

課題

最小限の世界観は実現できましたが、もちろん課題がたくさんあります。

物体認識

現状の実装では、物体認識の精度は高くありません。

今回はカメラで取得した画像をYOLOv3で物体認識させています。 実際は周囲の物体を認識できることは稀で、たまに何かを認識する(ほとんど何も認識しない)くらいの挙動です。

画像認識関連に詳しくなかったので、ChatGPTに聞いたりググって出てきたやり方で簡単に実装しましたが、改めて調べてみるとYOLOv3はかなり古いモデルのようです。 新しいモデルを使えば、精度も処理速度も向上するかもしれません。

そもそも、GPTでマルチモーダルが利用可能になれば、取得画像ごとGPTに送って認識させる、という形にできるでしょう。 マルチモーダルの課金体系が良心的であることを祈っています。

Token消費量

現在の実装では、ChatGPT APIから帰ってきたレスポンスは全てassistantプロンプトとして追加しています。 動作を続ければ続けるほど、蓄積されたレスポンス全てをプロンプトに入れ込むので、tokenの消費量は増加していく仕様です。

ちょっとした実験くらいなら無視できるような課金量ですが、今後長く起動し続けるような使い方をしてくならば、今のやり方は現実的ではありません。

レスポンス全てをプロンプトに入れ込むのではなく、重要情報を要約してcontextに入れ込むようにすれば、情報量の喪失を抑えたままtoken消費を軽減できるでしょう。

記憶保持

現在は一連の処理が終われば記憶は残りません。 起動する度にまたゼロから周囲を探索する形になっています。

例えばデータベースを使って外部記憶の仕組みを導入すれば、いわゆる長期記憶的な感じで情報を保持できるようになるでしょう。 長期記憶があれば、遊びの幅が広がります。

外界の認識

現在の実装では、

  • サーボモーターの角度 (水平方向および垂直方向)
  • 認識された物体名のリスト

の組み合わせを蓄積することで、外界の状況を認識させています。

このやり方でも、結構上手く外界を認識できています。 例えば「周囲にある物を左側から順に説明して」みたいに聞いても、ある程度正しい位置関係で説明が返ってきます。

ただ、もっとChatGPT/LLMならではのやり方が、もっと機械っぽくない良いやり方があると思っています。 物体リストと角度の組み合わせではなく、例えば「周囲の状況を詳細に描写した文章」を記憶の拠り所にする、とかも面白そうですね。 あるいはマルチモーダルが使えるようになったら、もっと自由な手段が取れそうです。

「機械/プログラムを扱っている」という人間側の思い入れが、遊びの幅を狭めてしまうことのないよう気をつけたいところです。

おわりに

以上、ChatGPTをロボットの頭脳にする取り組みの第一弾として、試作したものをまとめました。

昨今のLLMの盛り上がりから、何か面白い物が作れるんじゃないか、という興奮が止みません。

色々実験して遊び倒していきたいところです。

[関連記事]

www.bioerrorlog.work

www.bioerrorlog.work

www.bioerrorlog.work

参考

OpenAI API

Search results for 'API response too slow' - OpenAI API Community Forum

GitHub - bioerrorlog/robot-gpt at 85c256e3366f57532e74ee5c1294b69717647df9

Raspberry PiでPyTorchがIllegal instructionエラーを起こす事象の対処法

Raspberry Pi 4でPyTorch2.0が下記エラーを出す事象の解決策をメモします。

Illegal instruction

はじめに

最近、Raspberry PiとChatGPTを組み合わせて何か面白いことができないだろうか、とあれこれ実験しています。

そんな中、Raspberry PiでPyTorch2.0.0(記事執筆時の最新バージョン)をインストールしたところ、import torchしただけでIllegal instructionのエラーが出る事象に遭遇しました。

状況と取り急ぎの対処をメモします。

Raspberry PiでPyTorchがIllegal instruction

起きた事象

PyTorch2.0.0をpip installしてimport torchすると、Illegal instructionのエラーが出る。

pip install torch==2.0.0 torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
python -c "import torch;print(torch.__version__)"
# Illegal instruction


環境: Raspberry Pi 4 Model B 4GB RAM / 64bit Raspberry Pi OS(bullseye)

$ hostnamectl
   Static hostname: raspberrypi
         Icon name: computer
        Machine ID: 4f8b19cb3280458c99d89xxxxxx
           Boot ID: 275f81g1c1fd4249a49bbxxxxxx
  Operating System: Debian GNU/Linux 11 (bullseye)
            Kernel: Linux 6.1.19-v8+
      Architecture: arm64

対処法

根本解決ではありませんが、PyTorchバージョンを1.13.1に戻せば解消します。

pip install torch==1.13.1 torchvision==0.14.1 torchaudio==0.13.1 --index-url https://download.pytorch.org/whl/cpu
python -c "import torch;print(torch.__version__)"
# 1.13.1

原因はPyTorch最新バージョン2.0.0とRaspberry PiのCPUアーキテクチャの相性の問題だと思いますが、下記のissueでも未だ議論は決着していません。

Illegal instruction (core dumped) : PyTorch 2.0 on Raspberry Pi 4.0 8gb · Issue #97226 · pytorch/pytorch · GitHub

バージョンを戻せば解消する、という元も子もない話ですが、逆にその他もろもろの足掻きでは解消できなかった事例、と受け取ってもらえれば幸いです。

おわりに

バージョンを戻さないと解決しなかった、というただの懺悔のような話になってしまいました。

今後のversionで解決されるのを祈っています。

[関連記事]

www.bioerrorlog.work

www.bioerrorlog.work

www.bioerrorlog.work

参考

Illegal instruction (core dumped) : PyTorch 2.0 on Raspberry Pi 4.0 8gb · Issue #97226 · pytorch/pytorch · GitHub

Illegal instruction (core dumped) on Raspberry Pi 4B · Issue #8 · KumaTea/pytorch-aarch64 · GitHub

Raspberry Piで複数のサーボモーターを制御する

PWM/サーボ制御モジュールを使わずに、複数のサーボモーターを制御する方法の備忘録です。

はじめに

最近またRaspberry Piを触って遊んでいます。

複数のサーボモーターを制御したい、となったとき、世の事例を検索してみると、多くの場合はPWM/サーボ制御モジュールを取り付けることが多そうです。 ただ今回は外部モジュールを使わずに、とりあえず素のGPIOで複数サーボを制御してみました (パーツの用意やはんだ付けが面倒だったので...)。

やり方の備忘録を残します。


[関連記事] www.bioerrorlog.work

Raspberry Piで複数のサーボモータを制御する

OS環境の準備

モデルはRaspberry Pi 4 Model B (4GB RAM)を使いました。

Raspberry PiにはUbuntu 22.04.1 LTS (64-bit)を入れています (Raspberry Pi OSなど他の環境でも特に動作に違いはないはず)。

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.1 LTS
Release:    22.04
Codename:   jammy

Raspberry PiにUbuntuを入れる方法は別途記事にしているので、こちらを参照ください: www.bioerrorlog.work

回路を組む

回路は↓のように組みました。

  • サーボモーターにはSG90を使用
  • サーボモーターに供給する外部電源は単4電池4本パック/6Vを使用
    (データシートによるとギリギリSG90の動作範囲)
  • 外部電源とサーボモーターのマイナス端子はRaspberry PiのGNDに接続
  • サーボモーターのPWM制御線とRaspberry PiのGPIOを1kΩ抵抗を挟んで接続
    (今回は17, 18, 27のpinを使用)

サーボモータを動かすスクリプトの用意

では、サーボモーターの動作チェックのための簡単なスクリプトを書きます。 今回はPythonで書きました。

ソースコード: github.com

import math
import time
from gpiozero import AngularServo


def main():
    servo_17 = AngularServo(17)
    servo_18 = AngularServo(18)
    servo_27 = AngularServo(27)

    t = 0
    max_angle = 60
    gap_angle = 30

    try:
        while True:
            servo_17.angle = math.sin(math.radians(t % 360)) * max_angle
            servo_18.angle = math.sin(math.radians((t % 360) + gap_angle)) * max_angle
            servo_27.angle = math.sin(math.radians((t % 360) + (gap_angle * 2))) * max_angle

            t += 2
            time.sleep(0.01)
    except KeyboardInterrupt:
        servo_17.angle = 0
        servo_18.angle = 0
        servo_27.angle = 0


if __name__ == '__main__':
    main()

gpiozeroAngularServoを使って3つのサーボを動かす、動作確認用のちょっとしたスクリプトです。 回転を滑らかにするため、角度の計算にはsin関数を挟んでいます。

サーボモータを動かす

では用意したスクリプトをRaspberry Piで実行します。

スクリプトをcloneして、必要なライブラリをRaspberry Piにインストールします:

# Clone
git clone https://github.com/bioerrorlog/raspberry-pi-examples.git
cd raspberry-pi-examples/multi_servo_gpio/

# Install required packages
sudo apt update
sudo apt upgrade
sudo apt install python3-pip python3-dev gcc git
sudo pip install -r requirements.txt

そしたら、Pythonスクリプトを実行します:

sudo python3 main.py

# sudoで実行するのは、下記エラー回避のため:
# RuntimeError: No access to /dev/mem. Try running as root!

上手く実行できれば、↓みたいな感じでサーボモーターが動きます。

(サーボモーター同士をダンボールで固定しています)

おわりに

Raspberry Piで複数のサーボモーターを制御する方法の備忘録でした。

PWM制御モジュールも使ってないし、ソフト面での工夫もしていないので結構ジッターが入ってしまいますが、とりあえず動く、というところは見ることができます。

以上、備忘録でした。

[関連記事]

www.bioerrorlog.work

www.bioerrorlog.work

www.bioerrorlog.work

参考

O'Reilly Japan - Raspberry Piクックブック 第3版

マイクロサーボ9g SG-90 | 秋月電子通商

GitHub - gpiozero/gpiozero: A simple interface to GPIO devices with Raspberry Pi

GitHub - bioerrorlog/raspberry-pi-examples: Example projects for Raspberry Pi.

Raspberry PiにUbuntuをインストールする | Raspberry Pi Imager

Raspberry PiにUbuntu 22.04.1 LTSをインストールする方法の備忘録です。

はじめに

こんにちは、@bioerrorlogです。

これまではRaspberry Pi OSをインストールしていましたが、いろんなツールでの互換性を考えるとやはりUbuntuをインストールしたくなってきます。

今回はRaspberry Pi Imagerを使って、Ubuntu Desktop 22.04.1 LTS をRaspberry Piにインストールしてみます。

※環境
Raspberry Pi 4 Model B 4GB RAM

※Raspberry Pi Imagerのインストール方法は↓の記事を参照ください。 www.bioerrorlog.work

Raspberry PiにUbuntuをインストールする

以下の手順で、Raspberry PiにUbuntuをインストールしていきます。

  1. microSDをPCに挿してRaspberry Pi Imagerを起動する

    起動画面

  2. "OSを選ぶ"を選択

  3. "Other general-purpose OS"を選択

  4. "Ubuntu"を選択

  5. インストールしたいUbuntuのversionを選択
    (今回は"Ubuntu Desktop 22.04.1 LTS"を選びます)

  6. OSが選択できたので、次はストレージを選択します。
    "ストレージを選ぶ"を選択

  7. 挿入してるSDカードを選択

  8. "書き込む"を選択

  9. "はい"を選択

書き込み処理が終了したら、SDカードをPCから取り出します。

Raspberry Piを起動する

Raspberry Piの起動方法は、Raspberry Pi OSのときと変わりません。

やり方は下記リンクを参照ください。

www.bioerrorlog.work

おわりに

以上、Raspberry PiにUbuntuをインストールする方法の備忘録でした。

Raspberry Pi Imagerに従ってポチポチするだけだったので簡単ですね (この備忘録を書く必要もなかったかも)。

どなたかの参考になれば幸いです。

[関連記事]

www.bioerrorlog.work

www.bioerrorlog.work

www.bioerrorlog.work

参考

Install Ubuntu on a Raspberry Pi | Ubuntu

ROS 2 on Raspberry Pi — ROS 2 Documentation: Foxy documentation

Raspberry Pi OSを削除する | Raspberry Pi Imager

microSD上のRaspberry Pi OSを削除する方法の備忘録です。

はじめに

こんにちは、@bioerrorlogです。

Raspberry Piで使うOSのバージョンを変えり、他のOSを入れたくなったときは、先にmicroSDに入れているOSを削除する必要があります。

今回は、microSD上のRaspberry Pi OSをRaspberry Pi Imagerで削除する方法をまとめます。

※Raspberry Pi Imagerのインストール方法は↓の記事を参照ください。 www.bioerrorlog.work

Raspberry Pi OSをmicroSDから削除する

以下の手順で、Raspberry Pi OSをmicroSDから削除します。

  1. microSDをPCに挿してRaspberry Pi Imagerを起動する
    起動画面


2. "OSを選ぶ"を選択


3. "削除"を選択


4. "ストレージを選ぶ"を選択


5. 挿入してるSDカードを選択


6. "書き込む"を選択


7. "はい"を選択


削除処理が終了したら、SDカードをPCから取り出して完了です。

削除完了画面

おわりに

以上、microSD上のRaspberry Pi OSを削除する方法のちょっとした備忘録でした。

Raspberry Pi Imagerを使えば、いろいろと面倒を見てくれるので簡単ですね。

どなたかの参考になれば幸いです。

[関連記事]

www.bioerrorlog.work

www.bioerrorlog.work

www.bioerrorlog.work

参考

Raspberry Pi OS – Raspberry Pi

Raspberry Pi

Raspberry PiのGPIOピン配置を確認する

Raspberry PiのGPIOピン配置位置を確認する方法を整理します。

はじめに

Raspberry PiのGPIOピン配置は複雑です。
私は毎度ピン配置を調べてから作業しています。

ピン配置の調べ方をしばしば忘れてしまうので、備忘録を残します。


[関連記事] www.bioerrorlog.work

想定環境

Raspberry Pi 2/3/4 ではGPIOピン配置は同じ(40本)で、本記事ではこちらを想定します。

一方、Raspberry Pi 1 Model B+以前はピン配置が異なります(26本)。

Prior to the Pi 1 Model B+ (2014), boards comprised a shorter 26-pin header.

ドキュメントより

Raspberry PiのGPIOピン配置を確認する

GPIOピン配置を確認する方法は、ざっくり以下のふたつがあります。

  • pinoutコマンドで確認する
  • ドキュメントから確認する

pinoutコマンドで確認する

Raspberry Piのターミナルでpinoutコマンドを実行することで、ピン配置を簡単に確認することが出来ます。

pi@raspberrypi:~ $ pinout
,--------------------------------.
| oooooooooooooooooooo J8   +======
| 1ooooooooooooooooooo  PoE |   Net
|  Wi                    1o +======
|  Fi  Pi Model 4B  V1.2 oo      |
|        ,----. +---+         +====
| |D|    |SoC | |RAM|         |USB3
| |S|    |    | |   |         +====
| |I|    `----' +---+            |
|                   |C|       +====
|                   |S|       |USB2
| pwr   |hd|   |hd| |I||A|    +====
`-| |---|m0|---|m1|----|V|-------'

Revision           : c03112
SoC                : BCM2711
RAM                : 4GB
Storage            : MicroSD
USB ports          : 4 (of which 2 USB3)
Ethernet ports     : 1 (1000Mbps max. speed)
Wi-fi              : True
Bluetooth          : True
Camera ports (CSI) : 1
Display ports (DSI): 1

J8:
   3V3  (1) (2)  5V
 GPIO2  (3) (4)  5V
 GPIO3  (5) (6)  GND
 GPIO4  (7) (8)  GPIO14
   GND  (9) (10) GPIO15
GPIO17 (11) (12) GPIO18
GPIO27 (13) (14) GND
GPIO22 (15) (16) GPIO23
   3V3 (17) (18) GPIO24
GPIO10 (19) (20) GND
 GPIO9 (21) (22) GPIO25
GPIO11 (23) (24) GPIO8
   GND (25) (26) GPIO7
 GPIO0 (27) (28) GPIO1
 GPIO5 (29) (30) GND
 GPIO6 (31) (32) GPIO12
GPIO13 (33) (34) GND
GPIO19 (35) (36) GPIO16
GPIO26 (37) (38) GPIO20
   GND (39) (40) GPIO21

POE:
TR01 (1) (2) TR00
TR03 (3) (4) TR02

For further information, please refer to https://pinout.xyz/


ドキュメントから確認する

Raspberry Piにログインしているときは先述のpinoutコマンドを実行するのが簡単ですが、普通にドキュメントから調べることもできます。

Rapsberry Pi公式ドキュメントでは、GPIOピン配置や各ハードウェア仕様を確認できます:


pinout.xyzからもGPIOピン配置を確認できます。

先述のpinoutコマンドで参考URLに指定されていたのは、こちらのサイトの方ですね。

# pinout コマンド出力結果最終行
For further information, please refer to https://pinout.xyz/

おわりに

今回は、Raspberry PiのGPIOピン配置を確認する方法をメモしました。

ピンの場所は油断するとすぐ間違えがちなので、気を付けて作業したいものです。 ピン配置が記載されたカードを装着することも考えた方がよいかもしれません。

このメモがどなたかの参考になれば幸いです。

[関連記事]

www.bioerrorlog.work

www.bioerrorlog.work

www.bioerrorlog.work

参考

Raspberry Pi GPIO Pinout

documentation/using-gpio.adoc at develop · raspberrypi/documentation · GitHub

Raspberry Pi Documentation - Raspberry Pi OS

GPIO Pin Numbering - Raspberry Pi Forums

Raspberry Pi OSにDockerをインストールする

Raspberry Pi OSにDockerをインストールする方法をまとめます。

はじめに

こんにちは、@bioerrorlogです。

先日、Raspberry Pi 4を購入しました。

Raspberry Piで色々と遊んでいると、Dockerもインストールしてみたくなりました。

今回はそのインストール方法をまとめます。

前提

使用機器:Raspberry Pi 4

Raspberry Pi OSが動作済みで、ディスプレイ/キーボード接続またはSSH接続によってRaspberry Pi OSのターミナルが操作できる状態を前提としています。

Raspberry Pi OSのセットアップにはこちらも参考にしてください: www.bioerrorlog.work

Raspberry Pi OSにDockerをインストールする

以下の手順でDockerをインストールしていきます。

  1. OSアップデート
  2. Dockerのダウンロード/インストール
  3. Dockerインストールの確認
  4. ユーザにDockerへの権限を付与
  5. 再起動
  6. 動作確認:hello-worldコンテナを動かす

1. OSアップデート

まず、以下のコマンドでOSをアップデート/アップグレードして最新の状態に更新します。

sudo apt update && sudo apt upgrade

2. Dockerのダウンロード/インストール

Docker公式が提供しているインストールスクリプトを取得/実行して、Dockerをインストールします。

curl -sSL https://get.docker.com | sh

3. Dockerインストールの確認

docker --versionを実行し、Dockerが無事インストールされたことを確認します。

$ docker --version
Docker version 20.10.7, build f0df350

4. ユーザにDockerへの権限を付与

Dockerをインストールした直後の状態では、ユーザにDocker実行の権限がありません。 毎回sudoで実行する必要があります。

これを解消するために、ユーザにDocker実行の権限を付与(dockerグループに追加)します。

sudo usermod -aG docker ${USER}

${USER}は、現在のユーザを指し示す変数です。 ユーザ名を直接指定しても同じく権限を付与することが出来ます。

sudo usermod -aG docker [user_name]

5. 再起動

ユーザへのDocker実行権限付与を反映させるため、Raspberry Piを再起動します。

6. 動作確認:hello-worldコンテナを動かす

ここまでの手順で、Dockerのインストールとユーザへの実行権限付与が出来ました。

最後にhello-worldコンテナを実行して、Dockerが実行できることを確認します。

$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2c7ed585684a: Pull complete 
Digest: sha256:df5f5184104426b65967e016ff2ac0bfcd44ad7899ca3bbcf8e44e4461491a9e
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (arm32v7)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

上記のようにhello-worldコンテナが実行できれば成功です。

おわりに

今回は、Raspberry PiにDockerをインストールする方法をまとめました。

Raspberry Pi OSのアーキテクチャ(Arm32)には気を付ける必要がありますが、これでコンテナをRaspberry Piで動かすことが出来るようになりました。

どんな使い方が出来るか、想像が膨らみます。

[関連記事]

www.bioerrorlog.work

www.bioerrorlog.work

www.bioerrorlog.work

参考

How To Install Docker and Docker-Compose On Raspberry Pi - DEV Community 👩‍💻👨‍💻

Docker comes to Raspberry Pi - Raspberry Pi

Raspberry Piを購入してセットアップする | Raspberry Pi入門

Raspberry Pi 4とその周辺パーツの購入から、Raspberry Pi OS起動までの作業をまとめます。

はじめに

こんにちは、@bioerrorlogです。

先日、Raspberry Piを買ってきました。

私はRaspberry Piはもちろん、電子工作的なものにも経験ありません。 新しい世界にワクワクしてます。

本記事では、Raspberry Pi 4とその周辺パーツの購入から、Raspberry Pi OS起動までを記録します。

Raspberry Piを購入してセットアップする

Raspberry Piとその周辺パーツの購入

まず、Raspberry Pi 4と周辺パーツを購入します。

Raspberry Pi 2や3など他のバージョンで必要なパーツと、Raspberry Pi 4で必要なパーツは異なります。

ネット上の情報を参考にする場合は、その記事がどのバージョンのRaspberry Piに言及しているのかに注意してください。 本記事ではRaspberry Pi 4を使います。

必要なもの:

  • Raspberry Pi 4 (筆者はModel B 4GB RAMを購入)
  • USB-C 電源コード (出力 3A, 5Vほど)
  • microSDカード (容量8GB以上、Class10のものが良い)
  • microSDカードアダプタ (microSDにPCからデータを書き込む用)
  • USBキーボード (有線)
  • USBマウス (有線)
  • micro HDMIケーブル (Raspberry Pi側がmicro HDMI)
  • ディスプレイ

ディスプレイは既に持っているものがあれば、使いまわして大丈夫です。

これらパーツを、ネットでもリアル店舗でもよいので購入します。

私は以下の秋葉原の電気屋を巡って購入しました。 ネットでポチるのも良いですが、実物を見ながら買うのもまた一興です。 東京にいる方は参考にしてみてください。

microSDカードのセットアップ

パーツが揃ったら、Raspberry Pi Imagerを使ってmicroSDにRaspberry Pi OSを書き込みます。

Raspberry Pi Imagerとは、Raspberry Pi OSをmicroSDに自動でインストールしてくれるアプリケーションです。 書き込み後のmicroSDをRaspberry Piに挿して電源を付ければ、OSを起動することが出来ます。

Raspberry Pi Imager is the quick and easy way to install Raspberry Pi OS and other operating systems to a microSD card, ready to use with your Raspberry Pi.

公式の説明より


以下の手順でmicroSDに書き込んでいきます。

今回私はWindows PCを使っていますが、MacやLinux (Ubuntu)でも同様の操作が可能です。


1.Raspberry Pi Imagerのインストーラをダウンロード

Raspberry Pi OS – Raspberry Pi

上記リンクから、PCのOSに合ったRaspberry Pi Imagerのインストーラをダウンロードします。


2.Raspberry Pi Imagerをインストール

ダウンロードしたRaspberry Pi Imagerのインストーラをダブルクリックし、画面に従ってインストールを進めます。

"Install" をクリック

"Finish" をクリック


3.Raspberry Pi ImagerでmicroSDに書き込み

Raspberry Pi Imagerのインストールが終わると、ウィンドウが自動で立ち上がります。 立ち上がったら、下記の手順でmicroSDにRaspberry Pi OSを書き込んでいきます。

起動画面でCHOOSE OSを選択


Raspberry Pi OS (32-bit)を選択


"CHOOSE STORAGE"からSDカードを選択


書き込み終了


書き込みが終了したらmicroSDを取り出し、Raspberry Piの起動に移ります。

Raspberry Piの起動

Raspberry Piを起動するには、順番に各部品を取り付けてから電源コードを挿入します。

1.microSDを挿入

microSDを挿入する | 画像は公式チュートリアルより


2.USBマウス・USBキーボードを取り付け

マウス・キーボードを取り付ける | 画像は公式チュートリアルより


3.micro HDMIディスプレイを取り付け

ディスプレイを取り付ける | 画像は公式チュートリアルより


4.電源コードを取り付け

電源コードを取り付ける | 画像は公式チュートリアルより改変


電源コードを取り付けると、自動でOSが立ち上がります。

Raspberry Pi OSの起動後画面 | 画像は公式チュートリアルより

これで、今回の目的は達成しました。

おわりに

今回は、Raspberry Pi 4とその周辺パーツを揃えてOSを起動するまでの作業をまとめました。

今後もRaspberry Piで遊びながら、作業記録を記事に残していこうと思います。

[関連記事]

www.bioerrorlog.work

www.bioerrorlog.work

www.bioerrorlog.work

参考

Projects | Computer coding for kids and teens | Raspberry Pi

Raspberry Pi OS – Raspberry Pi