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

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

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の条件分岐部分

スレッドについて

プロセスとスレッドの違い

  • プロセス:メモリ領域が独立しているので安全、しかし切り替えに処理が多い
  • スレッド:切り替えのコストは低いが、干渉しないように考慮する必要がある

参考:

イケてるエンジニアになろうシリーズ 〜メモリとプロセスとスレッド編〜 - もろず blog

連載.NETマルチスレッド・プログラミング入門:第1回 マルチスレッドはこんなときに使う (1/2) - @IT

スレッド化のキーポイント

  • レスポンスタイム

ex: ダウンロード中のほかの操作など

ex: ネットワークやディスクへのアクセスは時間がかかるがCPUの処理は低いため、この時CPUを有効活用する

スレッドの実装のイメージ

わかりやすい👇

参考:

スレッド - Python入門から応用までの学習サイト

オーバーヘッド

  • 行いたい処理とは別に付加的に必要な処理や時間

ex : 送りたいデータではなく、その制御に使う処理

参考:

オーバーヘッドとは|overhead : 意味/定義 - IT用語辞典

コンテキストスイッチ

  • スレッド間での切り替え動作

参考:

連載.NETマルチスレッド・プログラミング入門:第1回 マルチスレッドはこんなときに使う (1/2) - @IT

rosのNamesに関して

名前の種類

  • base
  • relative/name
  • /global/name
  • ~private/name

参考:

ja/Names - ROS Wiki

Names - ROS Wiki

Namespace and Remapping - ROS Answers: Open Source Q&A Forum

ROS Naming and Namespaces | NooTriX

Remap

  • topic名やparameter名を簡単に変更できる

<launch>

  <group ns="turtlesim1">
    <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
  </group>

  <group ns="turtlesim2">
    <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
  </group>

  <node pkg="turtlesim" name="mimic" type="mimic">
    <remap from="input" to="turtlesim1/turtle1"/>
    <remap from="output" to="turtlesim2/turtle1"/>
  </node>

</launch>

参考:

Remapping Arguments - ROS Wiki

ja/Remapping Arguments - ROS Wiki

roslaunch/XML/remap - ROS Wiki

環境変数

参考:

ROS/EnvironmentVariables - ROS Wiki