技術関連の覚書

案件でやったり自宅で試したことの覚書

加速度センサを複数センシングする

前回http://blog.hatena.ne.jp/boctok-ctpoba/boctoc1969.hatenablog.com/edit?entry=26006613474310903

MPU-6050でセンシングした記事を書いたので今回はそれを複数センシングする話を書きます。

I2C通信では複数の機器を同時に通信することができますが、同じIDの機器はつなげられません。

ここでアナログスイッチ74HC4051を使ってセンサーデータを切り替えながら取得していきます。

http://www.b-system.co.jp/shop/UPD74HC4053G-T2.pdf

アナログスイッチは、電気的に入力された信号に応じて回路のオンオフをするスイッチです。

例えば12MHzのクロックで8ビットの信号を取得する場合、CS信号やヘッダなどで12のクロック分の信号を取得すると考えて1μ秒で1つの信号を受け取ります。 そうしたらスイッチを切り替えてもう一つのセンサのデータを取り、これを繰り返すことで複数の同じセンサの信号を受け取ることができます。

加速度センサ MPU-6050

加速度、ジャイロ6軸センサーのMPU-6050を使ってセンシング。

センサとの接続 センサの駆動電源は3.3Vなのでラズパイの3.3Vピンから電源を取ります。 I2C通信なので接続するのは電源(VccとGND)と信号線2本の合計4本だけです。

ラズパイ3やZEROの場合は 1(3.3V)、3(SDA)、5(SCL)、6(GND)になります。 これを基盤に書かれているとおりに配線します。 センサとの通信は"I2Cなのでまずraspi-confでI2Cを有効化する。

i2c-toolsをインストールしておく。

sudo apt update
sudo apt install -y i2c-tools

接続確認 i2cdetectコマンドで接続されているかを確認。 レジスタは68なので68が検出されればOK

pi@raspi:~ $ i2cdetect  -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         

Pythonで値を取るための準備

必要なライブラリをインストール

sudo apt -y install python3-smbus

ラズパイ接続用プリント基盤作成

秋月でいいユニバーサル基板を見つけたので使ってみることにした。 ラズパイ3のGPIO40ピンを接続して使えるようにした基盤なのでこれを使う。

最初、被覆線でやってみたけど、これだと配線がごちゃごちゃするので通電テープを使う。 8mm幅のテープだと大変なことがわかったけど、2.5mmピッチの基盤でこれ以上の大きさだと切り取りながら使うことが多そうなので8mmをつなぎながら使うことにした。 本当は13mm、25mmも買っておいて用途に合わせて使うのが一番良いのだろうけど、1000円以上するのでもう少し予算があるときにする。

IC、リレーは交換できるようにICソケット、を使うが、リレーの場合ソケットがなかったので丸ピンコネクタで代用することにした ピンコネクタだと抜けてしまって使えなかったので。

ラズパイとの接続は40ピンのGPIOでつなごうとしたけども、40箇所のはんだ付けは面倒。 実際に使うのも一部だけなので文字回こねくたにしてみた。

本当なら、プリント基板を作るのが良いのだろうけど、廃液処理が大変そうということで断念。

DevelopersIO2019

今年聞いてきたもの

タイトル スピーカー
Developers.IO CAFEのこれまでとこれから 〜顧客体験へのフォーカスから考える技術選択〜 横田聡
「今」のAI技術と「3年後」のAI技術のご紹介 清野剛史(せーの)
AWS初心者が陥りやすい運用アンチパターンから学ぶ成功の法則 JIG-SAW 小嶋一毅 氏
Serverless ー SaaS版 Developers.IO Cafeのアーキテクチャ設計で考えたこと ー 渡辺修司
ITの民主化とユーザー部門によるIoTコトはじめ LIXIL 佐々木義 氏
AWSに超詳しいエンジニアが育つ環境を作る方法 豊崎
クラメソ金曜ロードショー「沈黙の分析3」〜スティーブン・セガール映画の邦題に「沈黙」がつくかどうか機械学習で予測してみた 玉井励
全部Excelだけで実現しようとして後悔するデータ分析 Second Edition 小澤祐也(じょんすみす)
ハイブリッド/マルチVPC環境を構成するためのAWSネットワーク完全理解 菊池修治

DevelopersIO CAFEは去年聞いたものから現状まで 0ヶ月目 (横田社長が)感動する 1ヶ月目 とりあえず動くものにしてみる 2ヶ月目 展示する

無謀なスケジュー感だけど思うけど、

  • 動画でやりたいことを見せる

  • 要件定義書や設計書を書いてる時間それらの合意にかける時間を考えずにすむ。

社内だからできたことだけど、この成功事例を広めて無駄に時間をかけて大量の書類を作る文化をそろそろやめてもいいと思う。

できたところと出来上がったイメージを組み合わせてやってみる

  • 出来上がってから試す場合、出来上がりを待つのも時間がかかる

  • 出来上がってないところをダミーにすることで次にやるべきイメージができる

決済部分ができていなくても決済画面を表示することはできる 実際の買い物の決済と違っていてもイメージはできるようになるからそこからまた勧めていくことができる

こういったことが3ヶ月で展示までたどり着いた要因だとは思う。 ここまでは前回の話でも出てきたところで、その続きは 実店舗Developers.IO CAFEを作ってみた。

実際に運用することで、

  • お客様からのフィードバック

  • カフェ店員からのフィードバック

  • エンジニアからのフィードバック

これらを得ることができて次にやるべきことがわかってくる。 ただし、この時点では利益はあまり出ない。

実際に店舗を作ることで問い合わせも来る そうなってくると、量産化、利益を生むための仕組みが必要。

スピード重視の開発から保守性、汎用性を考えた開発 モジュール化、基盤の発注など

まとめると、 紙(パワポ資料)よりも動画 まず作ってみる できてないところはダミーで全部つなげて試してみる やってみて蓄えたノウハウがそのまま事業になる

AWS初心者が陥りやすい運用アンチパターンから学ぶ成功の法則 アンチパターン:監視ができていない、監視しすぎる、稼働目標が高すぎる、想定外を想定していない、運用を意識していない構成

監視についてはお客さんとどのように監視していくか、テスト段階で実際に必要だったかをブラッシュアップしていき最適化していくということはできていたが 稼働目標が高すぎるについては、コストとのバランスを見ないと何でも盛り込みすぎてコストに見合わないような構成が出来上がる。 想定外を想定することは一見難しそうだけど、エスカレーションフローを考える、ユーザーへの障害アナウンス、DR環境の準備 これらは、運用手順として盛り込んでおくことで解消されること。 運用を意識していない構成は、AWSがPaaSであることを意識しないで運用設計をしてしまうこと。 既存のオンプレをそのままリプレースしても構成は可能だし、AWSのサービスを利用しなくてもCloudWatchを利用して変更や追加に柔軟に対応できるようにする。 RDSを導入しなくてもGuardDutyを利用してセキュリティを強化するということもできる。

実際にやってみたことでは、Elasticsearchのバージョンが合わずにElasticCacheを使えずEC2にElasticsearchを入れて動かすといった運用をした。 その時、オンプレの時に出していたログでは足りない部分があったりで導入前に改修 その後も運用していくうちに不要なログや足りないログを調整し、その管理は社内のGerritのmasterにcommitした時にフックしてCLoudWatchで再構築

と言ったことをしていたのでわかりみな部分も多かった。

クラメソ金曜ロードショー AIに詳しくない人がAIをやってみた話

まず本を見る そのとおりにやってみる データパターンを考えてみる データの入手先を探す 実際にそのサンプルが適当か、AIにする合理性があるかは考えず、まずやってみたというところ 実際に正しいかどうかはやってみたあとにわかるというのも横田DeGoに近いかもしれない

サンプル数が50以下は不可能なので、映画のタイトルという一人の俳優が出演するのに限界があるものではサンプルが集まるかも厳しい ポスターに写ってる面積から割り出してみたけど別の俳優に認識されたり、人として認識されないので手作業で補正するところもあった そういう苦労をしたのに実際にはポスターの面積は関係なかった など、こういうことはやってみないとわからないという典型例です。

AWSのp3インスタンスでnvidia-dockerを動かしてみる

今まででなんとなくわかってきたこと

  • kernelとnvidiaドライバの関係は重要
  • cudaやcuDNNのバージョンはアプリに合わせておく
  • nvidiaドライバによってcudaの使えるバージョンが違ってくるので使いたいアプリと整合性を取る
  • nvidia-dockerの挙動はホストOSのnvidiaドライバに依存するっぽい

グラフィックボードによって使えるドライバも決まるので CUDA Zone | NVIDIA Developerで調べましょう。

kernelはドライバをインストールした時のカーネルバージョンを維持します。

sudo apt-mark hold linux-image-generic-hwe-18.04
sudo apt-mark hold nvidia-410

ドライバとカーネルを維持したらCUDAとcuDNNのインストール

debianリポジトリの作り方とapt-get

リポジトリディレクトリ構成 pool/先頭文字/パッケージ/パッケージファイル プロトコルはhttpなので、curlコマンドやブラウザで見ることができる。

debianファイル(*.deb) ファイル名は アプリケーション名バージョンアーキテクチャ.deb そのため、アプリケーション名やバージョン名にアンダーバーを含むとエラーになる。 debファイルはarコマンドで展開できる。 ar xfv xxx_nnn_amd64.deb 展開すると、 data.tar.xz,control.tar.gz,debian-binaryのファイルが展開される。

m@k:~/deb$ ls
alien-arena-server_7.66+dfsg-2+b2_i386.deb
m@k:~/deb$ ar xfv alien-arena-server_7.66+dfsg-2+b2_i386.deb 
x - debian-binary
x - control.tar.gz
x - data.tar.xz

m@k:~/deb$ ls -l
合計 540
-rw-rw-r-- 1 m m 267918 10月 16 06:06 alien-arena-server_7.66+dfsg-2+b2_i386.deb
-rw-r--r-- 1 m m   1226 10月 16 06:08 control.tar.gz
-rw-r--r-- 1 m m 266500 10月 16 06:08 data.tar.xz
-rw-r--r-- 1 m m      4 10月 16 06:08 debian-binary

control.tar.gzを展開してみると

m@k:~/ドキュメント/deb$ tar zxfv control.tar.gz 
./
./md5sums
./control
m@k:~/deb$ ls -l
合計 548
-rw-rw-r-- 1 m m 267918 10月 16 06:06 alien-arena-server_7.66+dfsg-2+b2_i386.deb
-rw-r--r-- 1 m m    908 10月 15  2014 control
-rw-r--r-- 1 m m   1226 10月 16 06:08 control.tar.gz
-rw-r--r-- 1 m m 266500 10月 16 06:08 data.tar.xz
-rw-r--r-- 1 m m      4 10月 16 06:08 debian-binary
-rw-r--r-- 1 m m    997 10月 15  2014 md5sums

controlファイルの内容

Package: alien-arena-server
Source: alien-arena (7.66+dfsg-2)
Version: 7.66+dfsg-2+b2
Architecture: i386
Maintainer: Debian Games Team <pkg-games-devel@lists.alioth.debian.org>
Installed-Size: 695
Depends: libc6 (>= 2.17), libjpeg62-turbo (>= 1:1.3.1), ruby, alien-arena-data
Section: contrib/games
Priority: extra
Homepage: http://red.planetarena.org
Description: Dedicated server for Alien Arena
 ALIEN ARENA is a standalone 3D first person online death-match shooter crafted
 from the original source code of Quake II and Quake III, released by id
 Software under the GPL license. With features including 32-bit graphics, a new
 particle engine and effects, light blooms, reflective water, hi-resolution
 textures and skins, and hi-poly models and stain maps, ALIEN ARENA pushes the
 envelope of graphical beauty rivaling today's top games.
 .
 This package installs the dedicated server for Alien Arena.

md5sumsファイルの内容

128e50e4b29a6ecaf0c19679ed3ed751  usr/games/alien-arena-server
681aac6d18f43ceee95f4cdd3937e4f5  usr/lib/games/alien-arena/alienarena-ded
40ea39225eb350c31fae546452edd64b  usr/lib/games/alien-arena/kill-runaway-crx-ded
9eabea4f9c03016ade9b36b194f85ed9  usr/lib/games/alien-arena/launch-server
d7fdf723796836dff8a5204dfecb48cf  usr/lib/games/alien-arena/rcon
ead48ccbc3a8ac9fd519de698ec81e41  usr/lib/games/alien-arena/svstat
aeee01f2e703d162b2fa8585d37f56cf  usr/share/doc/alien-arena-server/README.Debian
cdc952ef28cc486aa3ffba667f439d0a  usr/share/doc/alien-arena-server/README.gz
2bff351fb97fea83927e3845ff129dde  usr/share/doc/alien-arena-server/README.txt.gz
3a1a897aa71a9e895d7b9d04751b05dc  usr/share/doc/alien-arena-server/changelog.Debian.gz
6bdc94666f4a57876a8a340f7e025569  usr/share/doc/alien-arena-server/changelog.Debian.i386.gz
3be29ea06086683e2abb6190f656fd90  usr/share/doc/alien-arena-server/copyright
89362717257b5ad40f4e1ae2f0bfc0af  usr/share/man/man6/alien-arena-server.6.gz

data.tar.xzファイルを展開する xz形式なので

Linux で tar.xz 形式のファイルを解凍する - Qiitaを参照して展開

xz形式のファイルが展開できない場合、sudo apt install xz-utilsを実行してインストールする必要がある

m@k:~/deb$ tar Jxfv data.tar.xz 
./
./usr/
./usr/share/
./usr/share/man/
./usr/share/man/man6/
./usr/share/man/man6/alien-arena-server.6.gz
./usr/share/doc/
./usr/share/doc/alien-arena-server/
./usr/share/doc/alien-arena-server/README.txt.gz
./usr/share/doc/alien-arena-server/README.gz
./usr/share/doc/alien-arena-server/changelog.Debian.gz
./usr/share/doc/alien-arena-server/changelog.Debian.i386.gz
./usr/share/doc/alien-arena-server/copyright
./usr/share/doc/alien-arena-server/README.Debian
./usr/games/
./usr/games/alien-arena-server
./usr/lib/
./usr/lib/games/
./usr/lib/games/alien-arena/
./usr/lib/games/alien-arena/alienarena-ded
./usr/lib/games/alien-arena/svstat
./usr/lib/games/alien-arena/rcon
./usr/lib/games/alien-arena/kill-runaway-crx-ded
./usr/lib/games/alien-arena/launch-server

md5sumsファイルの内容が、data.tar.xzに格納されているファイルのmd5sumを取ったものの一覧であることがわかる

ミラーリングの仕組み

apt-getの仕組み

ubuntu18.04から変わったファイルのチェック内容 メタファイルの内容 日付の書式

nvidia-dockerメモ

GPUドライバの取得 apt search nvidia-[0-9]{3} この中で最適なドライバを探す

nvidiaのサイトでダウンロードする

apt-getでも取得できるけど、バージョンが古い場合もある nvidiaのサイトでダウンロードして取得する方が良さそう

nvidiaドライバとCUDAのバージョンの関係はシビア CUDAドライバもnvidiaのサイトでダウンロードしたほうが確実

nvidia-docker

nvidia-docker,nvidia-docker2,nvidia-container-toolkitがある nvidia-dockerではGPUコンテナを動かす場合、nvidia-dockerコマンドでないと正常に動作しない

nvidia-docker2はdockerをラップしてdockerコマンドにオプションを追加して使えるような形にしたもの

nvidia-container-toolkitはそのオプションを簡略化して使いやすくなった

インストール ここに書いてあるとおり、自分の環境に合わせてインストールする 前提としては、dockerの19.03以上がインストールされていること 古い場合は一旦削除して新しいdockerに入れ直してからインストールする。

github.com

オプション --gpus でだいたい指定できる