raspberry pi でモーターとかセンサとかを動かす(偉大な先人方の参考まとめ編)
モータまとめ
サーボモータ
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 3で ROS Kinetic Kame を動かす
raspberry pi 3 に Ubuntu Mate 16.04を入れる
以下からubuntu mateのimgをダウンロード
Etcherをインストールし、上記イメージを選択してSDカードに書き込み
別の書き込み手順
SDカードフォーマッターでイレースフォーマットを実行
DD for Windowsでイメージを書きこむ
http://www.si-linux.co.jp/techinfo/index.php?DD%20for%20Windows
Ubuntu Mate 16.04にKinetic Kameを入れる
GUIで操作
- System -> Administration -> Software & Updatesへ
SSHの設定
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の使い方
インストール
- $ git clone https://github.com/mikeferguson/pocketsphinx.git
- $ sudo apt-get install gstreamer0.10-pocketsphinx
- $ sudo apt-get install gstreamer0.10-gconf
修正
- pocketsphinx/nodes/recognizer.py
- pocketsphinx/nodes/voice_cmd_vel.py
のpublisherに queue_size = 10 を追加
実行
Terminal1
- roslaunch pocketsphinx voice_cmd.launch
(or roslaunch pocketsphinx robocup.launch)
Terminal2
- 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はコマンド?)
参考:
ファイルが一致することを確認する - いますぐ実践! Linuxシステム管理 / Vol.100
ダウンロードページの"xxx.md5"というファイルは何ですか? | SUZAKUサイト
シェルスクリプトでファイル存在確認 - fantasista_ikの日記
[開発]GNU makeのMakefileに、シェルスクリプトを自然に書くたった一つの方法 - ヒルズで働く@robarioの技ログ
スレッドについて
プロセスとスレッドの違い
- プロセス:メモリ領域が独立しているので安全、しかし切り替えに処理が多い
- スレッド:切り替えのコストは低いが、干渉しないように考慮する必要がある
参考:
イケてるエンジニアになろうシリーズ 〜メモリとプロセスとスレッド編〜 - もろず blog
連載.NETマルチスレッド・プログラミング入門:第1回 マルチスレッドはこんなときに使う (1/2) - @IT
スレッド化のキーポイント
- レスポンスタイム
ex: ダウンロード中のほかの操作など
- スループット(単位時間当たりの処理能力)
ex: ネットワークやディスクへのアクセスは時間がかかるがCPUの処理は低いため、この時CPUを有効活用する
スレッドの実装のイメージ
わかりやすい👇
参考:
オーバーヘッド
- 行いたい処理とは別に付加的に必要な処理や時間
ex : 送りたいデータではなく、その制御に使う処理
参考:
オーバーヘッドとは|overhead : 意味/定義 - IT用語辞典
コンテキストスイッチ
- スレッド間での切り替え動作
参考:
rosのNamesに関して
名前の種類
- base
- relative/name
- /global/name
- ~private/name
参考:
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
環境変数
参考: