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

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

他のPCへ向けてrosの指令を送る方法

ROS_MASTER_URIを変更する

  • .bashrcに以下のように記載しておくと便利

alias raspi_robot_mode='export ROS_MASTER_URI=http://{IPアドレス}:11311 export PS1="[\033[41;1;37m]<raspi_robo>[\033[0m]\w$ "'

こうすることで、他PCでroscoreが立ち上がっていると、自PCで動かしたプログラムで他PCにrosの指令を送ることができる〜

設定方法

ja/ROS/NetworkSetup - ROS Wiki

set ROS_HOSTNAME on robot PC to its own ip,

set ROS_HOSTNAME on base PC to its own ip

set ROS_IP on robot PC to base IP

set ROS_MASTER_URI to base IP:11311 both machines.

ubuntu 16.04 mateのautologinの方法

起動したときにデスクトップ画面に自動ログインする設定

  • System -> Administration -> Users and Groups -> password をNot asked on loginに変更
  • /usr/share/lightdm/lightdm.conf.d/60-lightdm-gtk-greeter.confに以下を記載
autologin-user=pi (<- ユーザ名)

これで再起動すると自動的にdesktop画面へ

sshからshutdownする方法

sudo poweroff

scpの使い方

以下参考:

SCPコマンドでローカルのファイルをサーバにアップ&サーバ上のファイルをDL - Qiita

プログラムを自動起動にする方法

PCを再起動した時にプログラムを自動起動する方法

sudo crontab -e

でeditorを選択して、一番下に

@reboot /home/user/test.sh > /home/user/test.txt

を追加。ここで、最終行に空行をいれること。

test.sh

#!/bin/sh

echo "test!!!"

これで再起動時にtest.txtが生成されている。 起動時にshスクリプト自動起動していることが確認できました〜

参考:

Raspberry Piでプログラムを自動起動する5種類の方法を比較・解説

linux起動時に自動的に実行するコマンド(プログラム)の設定 - Qiita

【Ubuntu】OS起動時に自作スクリプトを動かす - パンジェンシーの「汗だく開発日誌」

raspberry pi 3でDCモータを2つ動かす(TA7291Pを使う)

raspi3でDCモーターを2つ動かす

 準備
  • raspi3
  • dc motor 2つ
  • TA7291P 2つ
  • 電池
  • ブレッドボード
  • ピン

etc …

ハードセットアップ
  • 配線の仕方は以下参考。こちらはraspi 12ピンをpwmに設定。さらにraspi 16 18 32 ピンを同様に使用。32にpwmをセット。

参考:↓わかりやすい内容ありがとうございます↓

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

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

  • 電源をセット(試したのは単三電池4個=6Vくらい)
ソフトセットアップ
sudo apt-get install python-rpi.gpio

RPi.GPIOパッケージのインストール

import time
import RPi.GPIO as GPIO

time.sleep(3)
                                                                                                                                                                                    
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)

GPIO.setup(8,  GPIO.OUT)
GPIO.setup(10, GPIO.OUT)
GPIO.setup(12, GPIO.OUT)

GPIO.setup(16,  GPIO.OUT)
GPIO.setup(18, GPIO.OUT)
GPIO.setup(32, GPIO.OUT)

pwmR = GPIO.PWM(12, 50)
pwmR.start(0)
pwmL = GPIO.PWM(32, 50)
pwmL.start(0)

pwmR.ChangeDutyCycle(0)
GPIO.output(8,  1)
GPIO.output(10, 0)
pwmL.ChangeDutyCycle(0)
GPIO.output(16,  1)
GPIO.output(18, 0)

pwmR.ChangeDutyCycle(100)
pwmL.ChangeDutyCycle(100)
time.sleep(3)

GPIO.output(8,  0)
GPIO.output(10, 0)
GPIO.output(16,  0)
GPIO.output(18, 0)
time.sleep(3)

pwmR.ChangeDutyCycle(0)
GPIO.output(8,  0)
GPIO.output(10, 1)
pwmL.ChangeDutyCycle(0)
GPIO.output(16,  0)
GPIO.output(18, 1)

pwmR.ChangeDutyCycle(100)
pwmL.ChangeDutyCycle(100)
time.sleep(3)

GPIO.output(8, 1)
GPIO.output(10, 1)
GPIO.output(16, 1)
GPIO.output(18, 1)
time.sleep(3)
                                                                                      
GPIO.output(8, 0)
GPIO.output(10, 0)
GPIO.output(16, 0)
GPIO.output(18, 0)
pwmR.stop()
pwmL.stop()

GPIO.cleanup()
time.sleep(1)

これを実行するとモーターが2つ動きます〜

動作は正回転、停止、逆回転、停止です。

これで車と腕を動かせるようになりました。次はモバイルマニピュレータをつくりたいっす

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