NVIDIA Jetson Nano 2GBのセットアップ

NVIDIA Jetson Nano 2GBをAmazonで買いました。

まぁGPUパススルーでCUDA環境を整えるのは前にやってるし、GoogleColaboratoryもあるんですが、
せっかくだし!
あと普通にラズパイの代わりにも使えそうなので、IoTデバイスを付けて運用してもいいし、何ならGPUでゴリゴリ動画エンコードさせてもいい。
まぁとにかくセットアップします。

1.OSイメージのダウンロード

以下サイトからイメージファイルをダウンロードします。
Getting Started with Jetson Nano 2GB Developer Kit | NVIDIA Developer

Windowsで書き込む場合の直リンクはこれ
https://developer.nvidia.com/jetson-nano-2gb-sd-card-image
6.1GBあるので気長に待ちます。

DLしたzipファイルを解凍すると、sd-blob.imgというファイルがあるので、
それをSDカードに書き込みます。
ガイドではEtcherというアプリを使っていますが、私はRufusというアプリを使ってるのでそれでやります。
f:id:engetu21:20211028181843j:plain

書き込み完了後にSDカードを抜いて、Jetson Nanoへ。
f:id:engetu21:20211028190636p:plain

特に問題なく起動しましたね。
OSはLubuntuなので、動作は軽いです。ただし日本語にはなってないので、別途対応は必要。
まぁ普通にラズパイですね、これは。
しかし、ただ動かしているだけでヒートシンクはかなり熱くなるため、小型でもいいのでやはりファンは必要ですね。

【Arduino】Arduino Nano(互換機)と赤外線センサで死角検知装置を作る

とあるYoutube動画で死角センサーなるものが紹介されていました。
maxwin.jp

どうやらクラファンで数万円するものらしく、これぐらいなら自分で作れんものかな?ということで電子工作。

材料は以下。
・赤外線センサ:GP2Y0A710K(https://akizukidenshi.com/catalog/g/gI-03157/)
・ブレッドボード
・0.2sqの配線
Arduino Nano(互換機)
・配線コネクタ([https://amzn.to/3oQaIw2)

1.赤外線センサの概要

GP2Y0A710Kは最大550cmまで測距してくれるらしい。
値段は1200円ぐらい(秋月)ですが、2個必要なのでまーまー高い。でも見た感じ秋月で買うのが一番安い。
このセンサはVccの接続を2つ設ける必要があるため(たぶん送信と受信で2つ?)、GNDの2つと信号線で計5つの線をArduinoと接続します。

とりあえず、買ったセンサはコード延長が必要になるため、コネクタを追加します。
f:id:engetu21:20211009102205j:plain
f:id:engetu21:20211009102555j:plain
両端から出ている黄色と赤の線がGND、青と黒がVcc、白が信号線になります。まぁ説明書に書いてあるのでよく読みましょう。
5足のオスコネクタをセンサ側につけます。
延長コードは0.2sqの配線コードを使って作成し、メスコネクタを付けます。(写真撮り忘れ)

2.ブレボイメージと回線図

ブレボイメージと回路図はこんな感じ。アイコンの関係上、以下画像でセンサから出ているコードは3本ですが、実際は先ほどの記載の通り5本です。
f:id:engetu21:20211010013017p:plain
f:id:engetu21:20211010013045p:plain
また、実際にはもっと小さいブレボ使ってます。

LEDも似たような感じで延長コードを作成して動作確認。
f:id:engetu21:20211009115319j:plain
 
以前書いたPWM Pinを使えば、プログラムで明るさを制御できる。抵抗を挟まなくていいので非常に楽。
engetu21.hatenablog.com
 
ESP-WROOM-02を2つ使えばLEDと赤外線センサを分ければ無線(Wifi)経由でAPIでやり取りできるけど、あんまりメリットはないなぁ。

3.プログラム

LEDはPWMが使えるD3,D5に接続することを前提にする。
赤外線センサはアナログ出力らしい。ラズパイはデジタル信号しか取り扱えないので、工夫が必要になるけど、Arduinoはアナログ/デジタルどちらも使えるので楽。

コメントアウトにしているのは、シリアルモニタで電圧や距離を確認するデバッグ用。
f:id:engetu21:20211014175016j:plain
まぁ5m以内、というので反応できればいいので、多少アバウトな数値で取れても問題はない。

なお、距離の算出は以下のサイトを参考にさせていただきました。
Raspberry Piにシャープ製の赤外線距離センサー”GP2Y0A710K”つけてみた: EeePCの軌跡
Arduinoで赤外線測距センサー”GP2Y0A710K”を使ってみた: EeePCの軌跡

4.ハンターカブへの設置

そういえばこのブログには、バイクを持っていることも、それがハンターカブであることも書いてなかった気がする。
設置は以下のように赤外線センサをリアキャリアに二か所設置。
死角検知なので、大体45度ぐらいのところに左右取り付けるようにする。
f:id:engetu21:20211009194419j:plain
f:id:engetu21:20211009194424j:plain

LEDはウインドスクリーンの金具裏に。
わかりづらいけど赤丸の部分に設置。対向車には光が見えない、かつ運転中でもわかりやすいところに。
f:id:engetu21:20211009192854j:plain
 
本体はボディの空いてるスペースに押し込む。
f:id:engetu21:20211009183701j:plain
本当はブレボじゃないほうがいいんだろうけど、ハンダ付け面倒なので…。
  
実際にはまだ走っていないため、あとは確認しながら調整だなぁ。

【Linux】【Ubuntu18.04】Python3でOracleDBから取得したデータをPostgreSQLに入れる

Python3でOracleDBのデータをそのままPostgreSQLにコピーする必要があったので、やり方をメモ。

1.cx_Oracleをインストール

pipでcx_Oracleのパッケージをインストールします。
このパッケージにてPython3でOracleDBへの接続ができるようになります。

$ python3 -m pip install cx_oracle
Defaulting to user installation because normal site-packages is not writeable
Collecting cx_oracle
Downloading cx_Oracle-8.2.1-cp36-cp36m-manylinux1_x86_64.whl (818 kB)
|????????????????????????????????| 818 kB 153 kB/s
Installing collected packages: cx-oracle
Successfully installed cx-oracle-8.2.1

2.psycopg2をインストール

psycopg2を利用することでPostgreSQLへの接続ができるようになります。
なお、PostgreSQLクライアントのヘッダやライブラリを含んでいるlibpq-dev も必要なので、一緒にインストールする。

$ sudo apt install -y libpq-dev
$ python3 -m pip install psycopg2

3.Pythonプログラム

PythonにてOracleDBの売上テーブルから昨日分のデータを取得し、それをPostgreSQLに格納する、というのを作ります。

PostgreSQLのインサートで失敗した場合、自動でロールバックしてくれる。
コメントの通り、タプル型で取得したデータをそのままINSERTするだけのとてもシンプルな処理になる。
ポスグレのINSERTに関してはexecute_valuesを利用する。なにやらexecuteを利用するより早く処理できるようです。
PostgreSQL - 高速でINSERTしたい君へ - Qiita

基本的に一度接続したコネクションは最後に閉じるようにする。with文で記載するとそこらへんは端折れるので、その方がいいかもしれない。
なお、try文などは省略しています。

Oracleとの接続は、tnsnames.oraで設定する内容と同様のものを定義しておく必要がある。
tnsnames.oraについては以下の記事を参照。
engetu21.hatenablog.com

【Linux】【Ubuntu18.04】OracleDB(10g)への接続

仕事で、というか仕事でしか触らないであろうOracleDBへ、Linuxからのアクセス方法をメモ。


【参考】https://ponsuke-tarou.hatenablog.com/entry/2020/03/09/232129

1.Oracle Instant Clientのダウンロード

まずクライアントをダウンロードする。
ダウンロードサイトは以下。
https://www.oracle.com/jp/database/technologies/instant-client/linux-x86-64-downloads.html

2021年9月時点での最新版をwgetで取得。
Basic Light Package (OL8 RPM)とSQL*Plus Package (OL8 RPM)の二つが必要。
rpmファイルはUbuntuで利用できないけど、後ほどdebファイルに変換する。

$ wget https://download.oracle.com/otn_software/linux/instantclient/213000/oracle-instantclient-basiclite-21.3.0.0.0-1.el8.x86_64.rpm --no-check-certificate
$ wget https://download.oracle.com/otn_software/linux/instantclient/213000/oracle-instantclient-sqlplus-21.3.0.0.0-1.el8.x86_64.rpm --no-check-certificate

※本来はユーザ登録してダウンロードが必要。--no-check-certificateで証明書を無視して強制ダウンロード
 

2.rpmファイル→debファイルに変換する

alienというソフトでdebファイルへの変換を行う。

$ sudo apt install alien


$ sudo alien oracle-instantclient-basiclite-21.3.0.0.0-1.el8.x86_64.rpm oracle-instantclient-sqlplus-21.3.0.0.0-1.el8.x86_64.rpm

debファイルが作成出来たらそれぞれdpkgで直接指定してインストールを行う。

$ sudo dpkg -i oracle-instantclient-basiclite_21.3.0.0.0-2_amd64.deb
$ sudo dpkg -i oracle-instantclient-sqlplus_21.3.0.0.0-2_amd64.deb

※証明書関連?でwarningが出るが気にしない

sqlplusがインストールできたかを確認する。

$ which sqlplus64
/usr/bin/sqlplus64

3.環境変数の設定

環境変数の変更を行う。

$ vi .bash_profile
↓以下追記

# SQL*Plusのインストール場所を指定する環境変数
export ORACLE_HOME=/usr/lib/oracle/21/client64
# UNIXおよびLinux上のライブラリの検索に使用するパスを指定する環境変数
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
# グローバリゼーション機能を指定する環境変数
export NLS_LANG=Japanese_Japan.UTF8

$ source .bash_profile

で読み込みを行う。(再ログイン以降は自動で追加した環境変数が適用される)

環境変数が適用されているかを確認する。

$ printenv | grep -i oracle
LD_LIBRARY_PATH=/usr/lib/oracle/21/client64/lib:
ORACLE_HOME=/usr/lib/oracle/21/client64
OLDPWD=/usr/lib/oracle/21
PATH=/usr/lib/oracle/21/client64/bin:/home/user/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

4.コマンド実行確認

sqlplus64が実行できるかを確認。

$ sqlplus64 -V
sqlplus64: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory

上記エラーが出る場合は、以下のコマンドを実行コマンド

$ sudo apt install libaio1

$ sqlplus64 -V
SQL*Plus: Release 21.0.0.0.0 - Production
Version 21.3.0.0.0

 

5.OracleDBへの接続設定

どうやらtnsnames.oraというファイルに書いておくとその設定を利用する?らしい。
tnsnames.oraの作成を行う。
設定内容は以下の通りだが、network/admin配下に置くようにマニュアルでも書いてあるようだが、ディレクトリがないので作る

$ cd $ORACLE_HOME/
$ pwd
/usr/lib/oracle/21/client64
$ sudo mkdir network
$ cd network
$ sudo mkdir admin
$ cd admin

$ sudo vi tnsnames.ora
XXX =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = xxx.xxx.xxx.xxx)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = YYY)
    )
  )

XXXはネットワークサービス名、YYYのSIDは古い記述らしく、SERVICE_NAMEが推奨らしい。
まぁ基本的には管理者などから提供される情報なので、それを利用することになるはず。
HOSTは接続先のIPアドレスを指定する。ホスト名でもいい。
ポートがデフォルトと異なる場合はそれを指定する。

6.OracleDBにログイン

ユーザ名がUSER、パスワードが1234だった場合は、以下のように入力してログインできる。
ユーザ名のところは@に続けてネットワークサービス名を指定する。
 

$ sqlplus64
ユーザー名を入力してください: USER@XXX
パスワードを入力してください:1234

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL>

以上。

【Linux】【Ubuntu18.04】pipのコマンドあれこれ

pipのコマンドを都度忘れるのでメモ。
python3での実行が前提です。

・pipでパッケージをインストール
$ python3 -m pip install xxxx
 
・pip自身をアップロード
$ python3 -m pip install -U pip
 
・インストールしているパッケージを羅列
$ python3 -m pip list
 
・インストール済パッケージの最新バージョンを確認
$ python3 -m pip list -o

【Linux】【Ubuntu18.04】プロキシ環境での設定いろいろ

インターネットへ接続するときの環境がプロキシ経由だった場合。
いろいろ設定しておかないと面倒なので以下のコマンドを実行していく。
 
プロキシサーバは「proxy.co.jp」とする。
 
・aptの設定

$ sudo vi /etc/apt/apt.conf.d/apt.conf

Acquire::http::proxy "http://proxy..co.jp:8080";
Acquire::https::proxy "http://proxy.co.jp:8080";
Acquire::ftp::proxy "http://proxy.co.jp:8080";

 
・pipの設定

$ export HTTP_PROXY=http://proxy.co.jp:8080
$ export HTTPS_PROXY=http://proxy.co.jp:8080
$ python3 -m pip install proxy

 
※pipでSSLエラーが発生する場合は以下の設定
$ vi ~/.pip/pip.conf

・以下を記載
[global]
trusted-host = pypi.python.org
pypi.org
files.pythonhosted.org

 
bashの設定

$ vi ~/.bashrc

export http_proxy="http://proxy.co.jp:8080/"
export https_proxy="http://proxy.co.jp:8080/"
export no_proxy="127.0.0.1,localhost,xxx-server.co.jp" ※プロキシを通さないルートはこの設定を入れる

 
curlの設定

$ vi ~/.curlrc

proxy=http://proxy.co.jp:8080

【Linux】DELLのタワー型サーバでインテルNICのドライバをインストール

業務で触ったDELLのタワー型サーバ。
Windowsなら問題ないんだけど、Linux(諸事象によりUbuntu18.04 LTS)でNICが認識されずにaptもできんという状況だったので、ドライバを入れるためのメモ。

NICの確認

$ lspci
00:1f.6 Ethernet controller: Intel Corporation Device 0d4c

末尾の4桁をメモる。

・該当ドライバの検索
https://cateee.net/lkddb/web-lkddb/E1000E.html
ここで先ほどメモった4桁で検索をかける。

vendor: 8086 ("Intel Corporation"), device: 0d4c ("Ethernet Connection (11) I219-LM")

IntelのサイトからI219-LMに該当するドライバをダウンロード
https://downloadcenter.intel.com/download/15817/Intel-Network-Adapter-Driver-for-PCIe-Intel-Gigabit-Ethernet-Network-Connections-Under-Linux-

・ネットワークドライバのインストールをするためにはmakeが必要。
 そしてmakeを実行するためにはgccが必要。
 
別のマシンからそれぞれ検索をかけてdebファイルをGetする。

$ sudo apt install ./gcc_7.3.0-3ubuntu2_amd64.deb
$ sudo apt install ./make_4.1-9.1ubuntu1_amd64.deb

※ただしNICが死んでる状況なので、関連ライブラリのDLができず失敗する可能性あり。
 その場合は、USB接続の有線LANデバイス等で一時的にインターネットにアクセスして作業を進めるしかない。
 また、企業内LANなどの場合は、事前にaptに対するプロキシ設定が必要。
 プロキシの設定はこちら
engetu21.hatenablog.com

 
・落としたドライバを解凍してコンパイルとインストール

$ tar zxvf e1000e-3.8.4.tar.gz
$ cd e1000e-3.8.4/src/
$ sudo make install

 
・サーバの再起動

$ sudo shutdown -r now