空飛ぶロボットのつくりかた

ロボットをつくるために必要な技術をまとめます。ロボットの未来についても考えたりします。

raspberry pi 3でサーボモータをいっぱい動かす(PCA9685を使う)

raspi3でサーボモータを動かす

いずれアームを作りたい

サーボブラケットをどう作るか…

準備するもの
  • raspi3
  • servo motor
  • PCA9685
  • 電池
  • ブレットボード
  • ピン etc…
ハードセットアップ
  • GND<->GND,5V<->Vcc, SCL<->SCL, SDA<->SDAをつなぐ。左がraspi右がPCA9685。
  • PCA9685にサーボをセット(0~16個)
  • PCA9685に電源をセット(試したのは単三電池4個=6Vくらい)

ピン配参考

Raspberry Pi2 & 3 Pin Mappings | Windows IoT

ソフトセットアップ
sudo raspi-config

でI2C設定をONに

次に

sudo apt-get install git build-essential python-dev
cd ~
git clone https://github.com/adafruit/Adafruit_Python_PCA9685.git
cd Adafruit_Python_PCA9685
sudo python setup.py install

でソフトの準備完了

あとは、サーボをPCA9685の0にセットして↓

cd examples
python simpletest.py

でサーボが動きます〜

たくさん動かしたいときは simpletest.pyのpwm.set_pwm(0, 0, servo_xxx)のひとつめの0をPCA9685にさしたサーボの番号に指定すればOK

参考:

GitHub - adafruit/Adafruit_Python_PCA9685: Python code to use the PCA9685 PWM servo/LED controller with a Raspberry Pi or BeagleBone black.

次はDCモータとかカメラをつけて遊びたい

OpenCVちゃんと動くかな…

YOLOの参考資料まとめ(Deep Learning Tool)

Deep Learningでの認識に興味がありやす

時間があるときに論文よみたい

参考:

pjreddie.com

YOLOv2/YOLOv2.md at master · leetenki/YOLOv2 · GitHub

GitHub - leetenki/YOLOv2: YOLOv2のchainerの再現実装です(darknetのchainerローダと、完全なchainer上での訓練コードを含みます)

ペンパイナッポーとアッポーペンを識別する(ChainerでYOLO ver2) - Qiita

ChainerでYOLO - Qiita

Deep Learningをお手軽に試してみる : Darknetを使ってオブジェクト認識 - Qiita

Yoloで物体検出 - PukiWiki

Deep Learningによる一般物体検出アルゴリズムの紹介 - ABEJA Tech Blog

Darknetという人工知能が超簡単で凄いと聞いたので試したら大変なことになった - karaage. [からあげ]

Visual SLAM参考資料まとめ

単眼カメラでの位置計測や自己位置推定に興味がありやす

  • Monocular Visual Odometry
  • Direct Sparse Odometry
  • LSD-SLAM
  • ORB-SLAM
  • PTAM

Visual SLAM

Monocular Visual Odometryがおもしろそう

http://yokoya.naist.jp/paper/datas/1407/SSII%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB%E4%BD%90%E8%97%A4.pdf

Good! OpenCVでカメラ画像から自己位置認識 (Visual Odometry)

Good! LSD-SLAMを使える環境を作るまでのあれこれ[後輩用] · GitHub

Good! 趣味なし奴のメモ帳: LSD-SLAMをROSで試す1-インストールとビルドとクイックスタート-

Good! Visual SLAM勉強日記

Good! 第2回cv勉強会@九州 LSD-SLAM

Avi Singh's blog

Avi Singh's blog

GitHub - marknabil/SFM-Visual-SLAM

GitHub - tum-vision/lsd_slam: LSD-SLAM

https://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=4&ved=0ahUKEwiG4dq23PvSAhWETLwKHVyBA2oQFggzMAM&url=https%3A%2F%2Fipsj.ixsq.nii.ac.jp%2Fej%2Findex.php%3Faction%3Dpages_view_main%26active_action%3Drepository_action_common_download%26item_id%3D162678%26item_no%3D1%26attribute_id%3D1%26file_no%3D1%26page_id%3D13%26block_id%3D8&usg=AFQjCNEtJDSvjWJX4ImmBzYlg01cD2acgw&sig2=mEPq8M9o-QiwXFDJz34CHg

単眼カメラで距離計測

Good! Python版OpenCVとカメラで簡易距離計測

http://www.ittc.co.jp/sproduct/photocalc/info/idea/idea.htm

単眼カメラで「距離」も測定できる新技術を東芝が開発。画像も同時取得、早期実用化目指す - Engadget 日本版

単眼カメラで撮影した1枚の画像から距離計測できる撮像技術 | 光と画像の技術月刊誌「OplusE」

SLAM ガジェット

https://crafty-as-a-fox.tumblr.com/post/139668302386/ubuntu-1404%E3%82%92beaglebone-black%E3%81%B8%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB

raspberry pi でモーターとかセンサとかを動かす(偉大な先人方の参考まとめ編)

モータまとめ

qiita.com

サーボモータ

Raspberry Pi 3でpythonを使いサーボモータを動かす - Qiita

Raspberry Piでサーボコントロール、Part1 上下・左右の2軸を動かす | ものづくりエクスペリメント

Raspberry Piで10個のサーボモーター動かしてみた: EeePCの軌跡

RaspberryPiでサーボモーター(SG90) | たくのこ Web

Raspberry Piでサーボモータ(SG90)を制御する|Buffer Overruns

サーボモーター(SG-90)を試す - Raspberry Pi 備忘録 / Mbedもあるよ!

「Raspberry Piで学ぶ電子工作」補足情報: (追加コンテンツ)サーボモーターをPCやスマートフォンから角度制御する

DCモータ

Raspberry Pi 3でpythonを使いモータードライバーを使いモータを制御する! - Qiita

Raspberry Pi 2でDCモーターを制御する - カイワレスタイル

DCモータを動かす(モータドライバ使用)(WebIOPi利用)

遠隔でRaspberryPi+DCモーターを制御してaitendoの名刺をクルクルさせる。 | curious4dev

Raspberry Pi 3 でモーター制御(USB電源) | manspace

カメラ 、openCV

Raspberry Pi で OpenCV(リベンジ) - Qiita

Raspberry Piで画像処理ライブラリ”OpenCV”使って”顔認識”試してみた: EeePCの軌跡

Raspberry PiでPython(とOpenCV)はじめました。 - なんでも作っちゃう、かも。

かわゆい

【Raspberry Pi】LEGOでPiカメラのケースを作ったよ

音声認識

Raspberry Pi でライザップミクを作る - karaage. [からあげ]

Juliusによる音声認識 | Raspberry Pi 研究室 | Feijoa.jp

raspberry pi 3で ROS Kinetic Kame を動かす

raspberry pi 3 に Ubuntu Mate 16.04を入れる

別の書き込み手順

Ubuntu Mate 16.04にKinetic Kameを入れる

GUIで操作

SSHの設定

  • sudo systemctl enable ssh
  • sudo service ssh restart

Terminalで以下を実行

  • sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
  • wget http://packages.ros.org/ros.key -O - | sudo apt-key add -
  • sudo apt-get update
  • sudo apt-get install ros-kinetic-desktop-full (ここでとても時間がかかるのでお出かけ推奨)
  • sudo rosdep init
  • rosdep update
  • echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
  • source ~/.bashrc

これでインストールおわり〜

roscoreができるはず!

rosのチュートリアルが動くことは確認しました

参考:

How To install ROS Kinetic on Raspberry Pi 3 (Ubuntu Mate) | Into Robotics

その他設定

  • デフォルトでSSHオフなので、できるようにする
    • raspi-configで設定 ($ sudo raspi-config)
  • avahiと emacsのインストール
    • $ sudo apt install avahi-daemon emcas24 tmux

これで他の PCからsshで操作ができるよ〜

  • ssh ユーザー名@ホスト名.local

これから、このraspi3でrosの勉強をするぞー( ´ ▽ ` )ノ

raspi x rosメモ

いつものまにかROSWIKIにraspiでのインストール方法書いてる。最高。

raspi3用 Ubuntu16 + rosのイメージ

raspi zerp用 rosのイメージ

参考

Installing ROS Indigo on the Raspberry Pi | Learning Robotics Using ROS

ラズパイで動くロボット「GoPiGo」をつかって遠隔見守りロボットを作ろう(1) 開発準備編 (1/6):CodeZine(コードジン)

rosのpocketsphinxの使い方

インストール

  1. $ git clone https://github.com/mikeferguson/pocketsphinx.git
  2. $ sudo apt-get install gstreamer0.10-pocketsphinx
  3. $ sudo apt-get install gstreamer0.10-gconf

修正

  1. pocketsphinx/nodes/recognizer.py
  2. pocketsphinx/nodes/voice_cmd_vel.py

のpublisherに queue_size = 10 を追加

実行

Terminal1

  1. roslaunch pocketsphinx voice_cmd.launch

(or roslaunch pocketsphinx robocup.launch)

Terminal2

  1. rostopic echo /recognizer/output

を確認。以下の言葉を聞き取ることができる。

forward
left
right
back
backward
stop
move forward
move right
move left
move back
move backward
halt
half speed
full speed

rosで3rdpartyのコードをインストールする時

rosのmkを追いかけてみる

/opt/ros/indigo/share/mk/download_unpack_build.mk

md5sumファイルがあれば

$(ROS_ROOT)/core/rosbuild/bin/download_checkmd5.py $(TARBALL_URL) $(TARBALL)

を実行

/opt/ros/indigo/share/ros/core/rosbuild/bin/download_checkmd5.py

  # Create intermediate directories as necessary, #2970
  d = os.path.dirname(dest)
  if len(d) and not os.path.exists(d):
    os.makedirs(d)

  fresh = False
  if not os.path.exists(dest):
    sys.stdout.write('[rosbuild] Downloading %s to %s...'%(uri, dest))
    sys.stdout.flush()
    urllib.urlretrieve(uri, dest)
    sys.stdout.write('Done\n')
    fresh = True

  if md5sum:
    m = hashlib.md5(open(dest).read())
    d = m.hexdigest()

    print('[rosbuild] Checking md5sum on %s'%(dest))
  
    if d != md5sum:
      if not fresh:
        print('[rosbuild] WARNING: md5sum mismatch (%s != %s); re-downloading file %s' % (d, md5sum, dest))
        os.remove(dest)

        # Try one more time
        urllib.urlretrieve(uri, dest)
        m = hashlib.md5(open(dest).read())
        d = m.hexdigest()
    
      if d != md5sum:
        print('[rosbuild] ERROR: md5sum mismatch (%s != %s) on %s; aborting' % (d, md5sum, dest))
        return 1

  return 0     

目的のファイルが無かったり、ハッシュ値が異なっていたらURLのファイルを取得

  • os.path.dirname

pathのディレクトリ名を返す

  • urllib.urlretrieve(uri, dest)

uriのリソースを取得

  • hashlib.md5(open(dest).read()).hexdigest()

ハッシュ値を取得

(makefile中のincludeはコマンド?)

参考:

mk - ROS Wiki

「ハッシュ」ってどんな意味? - Qiita

ファイルが一致することを確認する - いますぐ実践! Linuxシステム管理 / Vol.100

ダウンロードページの"xxx.md5"というファイルは何ですか? | SUZAKUサイト

シェルスクリプトでファイル存在確認 - fantasista_ikの日記

[開発]GNU makeのMakefileに、シェルスクリプトを自然に書くたった一つの方法 - ヒルズで働く@robarioの技ログ

GNU make 日本語訳(Coop編) - Makefileの条件分岐部分