Hatena::ブログ(Diary)

作業記録/備忘録(仮) このページをアンテナに追加 RSSフィード

2015/06/25

cythonの本

cythonの本が新しく出た(2015/06)みたいなので買ってみた。
今開発中のシステムはCPUボトルネックではなく、通信ボトルネックなので、あまり使わないかもしれないけど。
でも配列と、画像圧縮扱ってるあたりでは部分的に使えるかもなー。

2015/06/19

CAN通信させてみた(BeagleBoneBlack-RaspberryPi間) - その2(2/3)

概要

BeagleBoneBlackとRaspberryPiの間でCANを利用した簡易通信実験ができるようになるまでに必要な情報をまとめた。
ほぼ先人の情報を参考にしてできたので、内容的には、その際に使用した参考にしたサイトを中心に紹介し、自分で実際にやってみて、間違えたところやうまくいかなかったところ、気づいた点などの情報を追記する形式とした。
間が空いてしまったが第2回は、RaspberryPiでのCAN利用について。

背景

CANを喋れるモーターコントローラーの話し相手に、まずは手元にあったRaspberryPiでCANをしゃべれるようにしてみた。
RaspberryPiはデフォルトではCANは話せない。
SPIの信号をCAN化する方法があったのでそれを試して通信するまでの手順について、参考にしたサイトの情報を記載した。

環境

PC: Ubuntu14.04 64bit (RasPi kernelのクロスコンパイル用)

仮想系。母艦はMacBookProのVirtualBoxWindows8.1のVMwarePlayer

リンク

写真

  • 作ったものたちは以下(クリックで拡大します)
  • 全体像。RasPi B+と、CANのコントローラ(MCP2515)、トランシーバ(MCP2551)を載せた基盤。
    • f:id:nihohi:20150618183005j:image:w240
  • CANの変換基盤(コントローラ+トランシーバ)。図中の緑と橙の線がCAN_HとCAN_L
    • f:id:nihohi:20150619190931j:image:w240
  • RaspberryPi B+
    • f:id:nihohi:20150619191007j:image:w240
  • 参考にした回路図+メモ。回路図は上記リンク先のもの。
    • f:id:nihohi:20150619190959j:image:w240

次回は、BeagleBoneBlack側のCANエレキ、ソフトの準備などについて記載予定。相互通信させてみた結果など。

2015/01/21

CAN通信させてみた(BeagleBoneBlack-RaspberryPi 間) - その1(1/3)

概要

BeagleBoneBlackとRaspberryPiの間でCANを利用した簡易通信実験ができるようになるまでに必要な情報をまとめた。
ほぼ先人の情報を参考にしてできたので、内容的には、その際に使用した参考にしたサイトを中心に紹介し、自分で実際にやってみて、間違えたところやうまくいかなかったところ、気づいた点などの情報を追記する形式とした。
初回は、CANのプロトコル仕様について。

背景

モータードライバをCANでコントロールする必要に迫られ、とりあえずCANってどういう仕様?というお勉強から、具体的に動かすために何が必要か(エレキ、ソフトウェア)の調査、実際に作ってみて・buildして実験まではできたので、それをまとめてみることにした。

環境

PC: Ubuntu14.04 64bit (RasPi kernelのクロスコンパイル用)

仮想系。母艦はMacBookProのVirtualBoxWindows8.1のVMwarePlayer

ロジックアナライザ: LogicCube(LAP-C16032)

StrawberryLinuxや秋月などで10k-12kほどで買えます。マルツでも買えるけどプローブが2個しかついてないみたい。
(マルツの方が安いのでプローブ持ってる人/使わない人は、そちらでいいかも)

リンク

まずは、CANの仕様について以下のサイトでお勉強してみた。
序章含めて全7回分あり、以下の4回を中心に読み進めた。

上記サイトから、CANの特徴を表し重要と感じたキーワードをピックアップすると以下。
使う分には、ざっくりと以下の意味と背景を知り、トラブルが発生した時にキーワードが思い出せれば最初の段階としてはいいのではなかろうか。(と勝手に思ってる)

  • ライン型構造
  • マルチマスター方式
  • CSMA/CA
  • IDを使用したメッセージ・アドレッシング
  • 耐ノイズ性に優れた物理層
  • エラー検出メカニズム
  • データの一貫性
  • ドミナントとリセッシブ
  • 同期
  • ビットスタッフィングルール
  • データフレーム
  • (リモートフレーム)
  • エラーフレーム
  • (オーバーロードフレーム)
  • コントローラとトランシーバ

感想としては、基本的には、IDとデータがあれば通信できると理解。
それをうまく動かす工夫として、ドミナントの意味と背景、ビットスタッフィングルールとエラー処理あたりがよく考えられてるなぁと感じた。
2線式だが低速の時は、1本切れても通信できたりも。

次回は、RasPi側のCANエレキ、ソフトの準備などについて記載予定。徐々にまとめる予定。

2014/06/02

BBBでシリアル通信

概要

BeagleBoneBlack(BBB)のシリアルポートUART4(P9 11:RXD,13:TXD)を使えるようにする。

背景

ある探査ロボットのモータ制御をRS485で行う必要があり、RS232でしゃべれるBBBを利用した。
その際に、手始めに、BBBでシリアル制御を行ったのでその備忘録。
この後、pythonからシリアル制御を行ったのでそれも近日中に記載予定。
RS232C<-->RS485コンバータの製作についても記載するかも。

手順

設定

以下の設定を行いreboot。UART4の部分は設定を行いたいものに読み替え。

$ diff -u /boot/uboot/uEnv.txt~ /boot/uboot/uEnv.txt
--- /boot/uboot/uEnv.txt~	2014-05-15 23:58:50.000000000 +0000
+++ /boot/uboot/uEnv.txt	2014-06-20 01:28:44.000000000 +0000
@@ -17,7 +17,7 @@
 ##BeagleBone Black:
 ##Disable HDMI/eMMC
 #optargs=capemgr.disable_partno=BB-BONELT-HDMI,BB-BONELT-HDMIN,BB-BONE-EMMC-2G
-
+optargs=quiet drm.debug=7 capemgr.enable_partno=BB-UART4
 console=ttyO0,115200n8
 
 mmcroot=UUID=526efd31-8f31-4dc6-8b5d-ac3a2b3736e2 ro

reboot後、/dev/ttyO4が見えるようになる。ちなみに、ttyO0は、オンボードのデバッグ用シリアルピン。
シリアル通信の設定を行う。

$ sudo stty -F /dev/ttyO4 raw
$ sudo stty -F /dev/ttyO4 9600

P9 11,13をシリアルで別の端末に接続。写真のような感じで。
端子同士の配線は以下。

  • BBB P9:1 GND -> シリアルケーブル黒:GND
  • BBB P9:11 RXD -> シリアルケーブル橙:TXD
  • BBB P9:13 TXD -> シリアルケーブル黄:RXD

f:id:nihohi:20140603000215j:image

動作確認

TeraTermなどでシリアルを9600bpsで開いた状態で、BBBから以下を実行。

$ sudo su -
# echo "Hello,nihohi" >/dev/ttyO4

無事表示されました。
BBB側も、ttO4をcatして、TeraTerm側からも文字を送ると受信にも成功。

# cat /dev/ttyO4 
moge^C hello,nihohi!

f:id:nihohi:20140603015747p:image

※2014/09/28追記。
もし2つのデバイスを有効化する場合(例えばttyO2とttyO4)、前述の/boot/uboot/uEnv.txtで、以下のようにカンマ区切りでデバイスを設定すればOK。

 capemgr.enable_partno=BB-UART2,BB-UART4

2014/05/20

今後の更新予定/備忘

  • (自分向け。見たときに思い出せるように)

決意/方針

  • ドタバタしてていろいろ放置気味だったので、完璧に仕上がらなくても一部でも知見を共有できるように徐々に更新して行こう...。
    • 「あっ、と気付いたこと」、「心に引っ掛かったこと」、「これ知ってると便利なのに」、や、「面白い/愉快と感じたこと」を中心に。
    • 無理に分野に分けるより、上記分類でタグ付けた方が自分の中ではわかりやすいかも。
    • あと、これらの一見異なるものがすべてリンクしているというのも表明できると面白いかも。
公開方法/内容について
  • githubとも連携していくかな。
  • 月面ローバー開発の話とかとpythonの話も盛り込めるといいな
    • pycon行く余裕あればネタに出来るかしら)
  • プログラム以外の方向も少し織り込む? 炎上しやすそう...

ソフトウェア技術ネタ

今後ぼちぼちアップして行こう

  • Qt5つかってみた
  • ZMQつかってみた
  • 802.11acドライバ構築まとめ on BBB --> github
  • BBBでシリアル通信(2014/06/03 済)
  • AndroidでGPSで距離計測アプリつくってみた/.11acの到達距離計測ロガー --> github/google playにも置く?
  • 3D mapping / SfM
  • ステレオマッチング/OpenCV
  • MEMS LRF
  • インターフェースデザインの在り方
  • 設計のはなし

実験ネタ

  • .11ac距離計測
  • 月面探査ローバー開発の話
  • 鉱山跡探訪
  • 砂鉄が良く取れるところ
  • 自宅製鉄実験

社会ネタ? 生活ネタ? 考え方?

  • 資本主義について
  • 科学と宗教、哲学
  • 心理の話、心の動きの話
  • 興味のある本/著者の紹介(文・理・芸術問わず)
  • コンサート(クラシック)、美術館、博物館情報
  • 知財の話
  • 合気道の話
  • カーリング部の話
  • ハクトの話
  • 問題解決の心構えの話/debug含む
  • 問題解決と課題設定の違いの話
  • レイヤー的考え方/OSIなど通信プロトコル含む
  • 要求と仕様と設計の違いについて/いっしょくたにされることが多い。分析と構築の話でもいいかも。
  • 分析的アプローチとは異なる方法の課題抽出、問題特定、及び課題・問題解決アプローチについて
  • 自己複製について/物理的個体・物理的集団の自己複製、考え方・文化・振る舞いの自己複製

ZMQを使ってみた

概要

// MQって、RabbitMQとかのMQと同じでmessage queue、とか

背景

// 非同期に通信を簡単にさせたかった

コード

// pythonのSub/Pubとか例でも

シリアル通信(RS232C/422A/485)の特徴まとめ

概要

  • Beagle Bone Black(以下BBB)/Ubuntu 12.04でのシリアル通信利用方法(RS232C/485)とその際に利用したRS232C-485コンバータのまとめ。(動作実績品ということで)

背景

  • BBBでモータードライバとシリアル通信する際にRS232Cだけでなく、RS485も使うことになったので、シリアル通信の整理と、サンプルコード、その際に利用したコンバータの情報などを整理しておきたいと思ったため。

環境

// 書く

RS232C/422A/485の特徴

  • RS485はRS422Aの上位互換があるらしい。(RS485が改良版)


規格最大伝送速度最大ケーブル長接続形式
RS232C 20kbps 15m 1:1
RS422A 10Mbps 1200m 1:N (Nmax:10)
RS485 10Mbps 1200m N:N (Nmax:32)

コンバータ

// RS232C<->RS485のコンバータ。BBBで動作実績あり。写真も。

コード

// 書く