Raspberry Pi サーボ覚書

Raspberry Pi 3 で pigpio のサーボ制御を利用して不安定だったので色々調べた覚書。

今回のトラブルはGPIO4の故障で発生。原因は詳しくは不明。

<現象>

Servo PWM制御が不安定。サーボ側の故障も考えたが、arudinoでは問題なく動く。

GPIO4を利用してして pi.set_servo_pulsewidth(4,1500) とかやっていたが下記のように不安定。

  • gpio実行の失敗。 pi.set_servo_pulsewidth(4,1500) とかのコマンド10回に2-3回失敗する。piscope で見ると何も出力されていない。
  • 動作不定。繰り返し実行すると動いたりする。
  • PWMが2-3秒で停止。piscope で見ていると、コマンド実行後2-3秒でPWMの出力が止まる。しかしpi.get_servo_pulsewidth(4) では1500とか出力されていることになっている。
  • ノイズ。上記停止後はpi.set_mode(4,0) として止めないとノイズが入る。誤動作の元。
  • ポートOUT/INモードまで変わってしまう。gpio readall で見ると、PWM出力中は MODEがOUTだが、2-3秒でINに代わる。だいたいこのタイミングでPWMの出力がかわる。

<解決?>

GPIOを4をやめて26に変更したら安定した。GPIOは4以外では正常だった。

  • 失敗なし。 pi.set_servo_pulsewidth(26,1500) とかで2-30回中失敗なし。
  • 動作安定。繰り返しでも動作変わらず。
  • 無停止。コマンド実行後停止するまでずっと PWM出力。ちなみに50Hzで出力。
  • ノイズなし。
  • ポートモード変化なし。gpio readall でずっとOUT.
  • 空いているGPIOざっと確認したがGPIO4以外では同様のトラブルなし。

何かがGPIO4を利用しているようにも見えるが不明。OCTPY使っているだけなんだが。

M5StickV がPCから認識しない → 解決

M5StickV が一昨日到着したが、PCから認識できなかった。他の動作は正常。

現象:PCに接続しても、Windows 10 から USBデバイスとして認識に失敗する。「不明なUSBデバイス(デバイス記述子要求の失敗)」や「不明なデバイス」など。

USBデバイス認識失敗の例

かたっぱしからテストした結果、どうも USB供給の電圧が5V未満になると認識に失敗するようだ。

ダメになる例。一時的に5Vを下回る。
電圧がVが大きめ(+0.08V程度)に出るので実際は4.86V位。
通常は5V程度あっても認識中に5V以下になる。PC本体の電源が弱いのか。

 

ACアダプタ付きUSBハブで解決。 USBハブはエレコム U3H-A408SBK を利用しました。

さすがACアダプタ付きHUB、電圧値安定。
+0.07V程度表示ずれ。テスターも怪しいですが。

蛇足ながら、試したことは下記の組み合わせ。どれも結果良くならず。

  • USBケーブル交換、USBポート変更
  • PCリブート、PCシャットダウン
  • M5 StickV のAボタン押し続けて起動(boot.pyスクリプト起動しない)
  • 内蔵バッテリーを疑い充電を空にしたり、逆に満まで充電したり
  • Silicon Labs ドライバを手動インストールしたり(通常自動インストール)

さて、、まずは起動時の音を小さく設定。/flash/boot.py を確認。

player = audio.Audio(path = "/flash/ding.wav")
player.volume(100)

のvolume値を100から5に変更。これで夜中でも家族に怒られませんね。

簡易エディタ pye の使い方はこちらなど

maix bit とWROOM-02 でネットワーク接続など

WROOM-02(ESP8266)を接続してネットワーク接続できるようになった。

WROOM-02なので技適も問題なし。

配線は WROOM-02のTX to pin-6,RX to pin-7 ,ATモードでESP8266を動作させる。

あとは電源、Io0、IO2、EN、電源(3.3V/GND)などは通常のWROOM-02と同様。

ntp含めて、maixpy のサンプルをgithubに置いてます。

https://github.com/shiosalt/maixpy_sample

maixpy 覚書

maix bit camera

1)maixpy IDEと対応ファームウェア

maixpy IDE でファイル送付や画像表示はファームウェア 3.1以上が必要。

Add file transfer support for MaixPy IDE

yolov2 20classサンプル公開されているファームは3.0用なので注意。

os.uname() コマンド出力の version とかでファームを確認。

2)プロンプト(REPL)上で xx.py ファイルを実行する方法

with open("xx.py") as file:
    exec(file.read())
# Back Space + Enter

あるいは下記コマンドなら1行で同じことをする。

exec(open("xx.py").read())

3)カメラの撮影、LCDへの表示、SDへの保存サンプル

import sensor
import image
import lcd

#LCD初期設定
lcd.init()
lcd.direction(lcd.YX_LRUD) #デフォルトだとLCD上下逆のため設定。YX:横長 LR 左右順 UD上下順

#カメラ初期設定
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_hmirror(0) # デフォルトだとカメラがミラーに設定されているため
sensor.run(1)

i=0 #ファイル名用
while (True):
    img = sensor.snapshot()
    lcd.display(img)
    filename = "/sd/{0:0=8}.jpg".format(i) # 00000000.jpg から連番
    img.save(filename)
    i=i+1
    lcd.draw_string(10,20,filename)

4)簡易エディタ pye の使い方

pye("ファイル名")

矢印キー 移動
マウス 移動
deleteキー 実質バックスペース
BackSpaceキー 押さないこと! 文字置換 押してしまったら Enter 2回

Ctrl + l またはスペース 行選択(画面上黄色選択)
Ctrl + c 行コピー
Ctrl + v 行ペースト
Ctrl + s 保存。ファイル名が表示されるので Enter 。flash だと10-15秒保存に時間がかかる。ファイル名表示が消えれば保存完了。SDなら1秒未満で保存完了。
Ctrl + q 終了。
 保存していないときは 終了していいか聞いてくる。y/N 、デフォルト N
 保存せず終了の場合、 Delete(デフォルトのNを消す) y(Yes) Enter (確定) 

5)SDカードにより不安定

SDカードによっては、USBでシリアル接続しているとマウントされるが、USBで給電のみだとマウントされないものがある。SDにより不安定とのユーザ報告もちらほらみられる。

逆にSDカードのフォーマットは FATのみ対応を記載されているが、3.1ではFAT32でも問題なかった。古いファームでは不明。

maix bit camera
テスト中。 thingiverseから適当に3Dプリンタデータをダウンロードしたら寸法違った。

6) Maix BiT は2種類あり。マイクあり・なし

キットとしてカメラ+液晶セットだが、本体ボード上に秋月電機はマイクなし・SwitchScienceはマイクありの模様。入手は秋月電子版のためマイク未テスト。

M5StackVはまだ配送中。シンガポール。

MAix BiT 初期メモ

MAix BiT 入手。

Arduino勉強会を参照。maixpy_v0.3.2_full.bin K-FLASHを利用して書き込み。

”Unable to enter ISP mode” となるので”boot” ボタンを押しながらFlash書き込みを実行したら成功した。

error: Unable to enter ISP mode.
flash success

 

シリアルポート(今回はCOM5だった)に接続したらカメラと液晶も動作。

シリアルでmaxpy に接続するにはCtl-C。一旦切断して再接続でもOK。

心配した消費電力もカメラを液晶表示で今のところ5V 0.14A 程度。起動時は0.05A程度。yolov2 でキャプチャ連続処理させても0.2A弱。すごい。

キャプチャ取得中
yolov2 動作中

anaconda python仮想化覚書

知らんかった。

コマンドオプション説明
conda create -n nameAnacondaAnaconda一式入ったvirtualenv 作成。自動でショートカットも
作成するのでそこから起動可能。(powershell/cmd.exe)
conda create -n name2 – -clone namenameをもとにname2を作成
conda info -e仮想環境一覧
activate name*ショートカットから実行なら不要
deactivate
conda remove name仮想環境 name 削除
conda update -n base -c defaults conda仮想環境のベースを更新
conda update –prefix C:\xxx\Anaconda3 anacondaanaconda自体を更新

pip で “THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE.”とかの対応

備忘録。

pip で raspiのtensorflow インストールに失敗する。HASHが違うとエラー。

pi@raspberrypi:~ $ sudo pip --no-cache-dir install --upgrade tensorflow==1.9.0
Collecting tensorflow==1.9.0
  Downloading https://www.piwheels.org/simple/tensorflow/tensorflow-1.9.0-cp27-none-linux_armv6l.whl (62.8MB)
    25% |?????????                       | 16.0MB 324kB/s eta 0:02:25
THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE. If you have updated the package versions, please update the hashes. Otherwise, examine the package contents carefully; someone may have tampered with them.
    tensorflow==1.9.0 from https://www.piwheels.org/simple/tensorflow/tensorflow-1.9.0-cp27-none-linux_armv6l.whl#sha256=ca364521a1c4dc6cc2c19798bbd65d51f2c599d67cd5626f0301d05f6d8adc1b:
        Expected sha256 ca364521a1c4dc6cc2c19798bbd65d51f2c599d67cd5626f0301d05f6d8adc1b
             Got        c04d65eb504b6c6d0033210001b84f7a0e6fe88319c7ffc43b5ff6e0fa05a883

fromから wgetでダウンロードしてみたら、通信エラー。”TLS packet with unexpected length was received” サーバ過負荷か通信経路障害か。自動リトライ7回目でダウンロードできた。

“pip で “THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE.”とかの対応” の続きを読む

Windows10の WSL Ubuntu で docker – TensorFlowを稼働させる

だいぶはまったのでメモ。

tensorflow は前提環境が色々面倒なためdockerを利用したが、これでも準備が結構はまった。

dockerは wsl ubuntu 上で最新は動かない。service docker start で 起動しない。リンク先情報をもとに(ありがとうございます)18.03.1をインストール。ちなみにwsl ubuntu は管理者権限で起動。

sudo apt-get install docker-ce=18.03.1~ce~3-0~ubuntu

tensorflow も最新はwsl ubuntuで動かない。リンク先情報(ありがとうございます)を参考に、こちらは dockerの1.5.0 を直接ダウンロード。 こちらもwsl ubuntu は管理者権限で起動。 警告は出るが動くようになった。

#docker pull tensorflow/tensorflow:1.5.0

“Windows10の WSL Ubuntu で docker – TensorFlowを稼働させる” の続きを読む