Ubuntu & ROS環境覚書

今使っているubuntu+ROSの環境を一応書いておきます.

 

OS:ubuntu 14.04+LTS

ROS:indigo

 

インストールすべきパッケージとインストール方法:

 

ROSのインストール:

ja/indigo/Installation/Ubuntu - ROS Wiki

 

catkinのインストール:

cyberworks.cocolog-nifty.com

 

PTAMのインストール:

さくっとPTAMをROSで試す(1)・・・サンプルデータでPTAMを試す - sabo laboratory

 

SPTAMのインストール:

GitHub - lrse/sptam: S-PTAM: Stereo Parallel Tracking and Mapping

 

UVCカメラを使えるようにするためのパッケージのインストール:

試行錯誤な日々: ROSでカメラ画像を表示

(ただしこれはROSのバージョンが違うので,groovyをindigoに直すこと)

 

ステレオカメラを使えるようにするためのパッケージのインストール:

bril-tech.blogspot.jp

(USBカメラを2個使う場合のもの)

 

Playstation4のステレオカメラをROSで使えるようにするための方法:

orientalrobotics.blogspot.jp

 

とりあえずはこんなところ.

それでは,また.

 

DFUに関して

備忘録的な内容なのですごく基礎的なことを書きます.

最近,仕事でDFUを触る必要性が出てきたので,とりあえずお勉強.
当たり前ですが,組み込みシステムは一度製品を出荷してしまうと
中々ファームウェアのアップデートはできません.

無論,それでもやらなきゃならないことはあるので,
そのために弄する手段の一つがDFU(Device Firmware Update)

通常,マイコンJTAGやSWDといった専用のインターフェースを用いて
書き込み・デバッグをします.
しかし,こんなものは製品にとっては無用の長物であるばかりか
CPUの中身を覗き放題なので出来る限り潰したいわけです.
しかし,先に書いたようにファームウェアのアップデートだってやりたい・・・

そのため,UARTやCAN・I2Cなど,そもそも別の用途に使っている
(つまり引き出している)インターフェースから書き込めるようにしようと
考えるのは自然の摂理と言えるでしょう.

マイコンにプログラムを書き込むという行為は,
極論してしまえば「メモリのプログラム領域にコンパイルしたデータを書き込む」
行為に他ならないわけで.

ぶっちゃけて言えば,
「母艦から好きなインターフェースでデータを受け取り,プログラム領域に書き込むプログラム」
マイコンのどこかにあれば,それを起動して話は解決というわけです.

多くのマイコンでは,「マイコンどこか」をDFU機能のための領域として確保しています.
ここに先に書いたようなプログラムを開発・書き込んでおけば問題ないというわけですね.

さて,このDFUという機能,一番わかり易いのがArduinoだと考えられます.
通常,Arduinoに使われるAVRマイコンにプログラムを書き込むには,
ICP(In Circuit Programmer)端子を利用して書き込む必要があります.
まぁ,その正体はただのSPIではあるのですが.

しかし,実際のArduinoはUSB,回路でUARTに変換したものを使って書き込んでいますね.
要は,ArduinoのAVRマイコン内部には,UARTからのデータを使ってマイコン
プログラムを書き込む機能(プログラム)が備わっているというわけです.

Arduinoにおいては,これをブートローダーと読んでいますが,
機能的にはDFUに近いものとして考えることが出来るでしょう.

 

 

DesignSpark PCBでドリル穴データが狂ったときの対処法

私は趣味の領域では回路CADとしてDesignspark PCBを使っている.

(基本的な操作がきちんとできるのと,Mechanicalとの連動機能があるのが気に入っている.

正直RSコンポーネンツとの連携機能は微妙に使い勝手が悪い)

で,出来上がったガーバーデータをFusionPCBやElecrowに発注しているのだが

先日データを送ったところ「ドリル穴データがないんだけど?」

という返答が返ってきた.

 

DesignSpark+FusionPCBの組み合わせは初めてではないので

おかしいと思ってガ―バーデータを改めてビューワで見たところ

穴データのみ拡大率が間違っていた.以下修正方法

 

「Output」

→「Manufactureing Plots」

→「Drill Data (Thorugh Hole)」メニュー

→「Output」タブ

→「Device Setup」ボタン

→「Units」の"Integer"と"Decimal"をそれぞれ"1"と"4"に設定

 (私が見た時には3と5になっていた)

f:id:s_ajisaka:20170303141907p:plain

これでOKらしい.ついでに他のレイヤーの設定も同じにしておくとより安全.

何でこうなったんだろう?とりあえず対処法はわかったがなぜそうなるかがわからないのが若干気持ち悪い.

 

では,また.

LPC-LINK2で Flash Download failed - "Cortex-M3" というエラーが出たときの対処法

前回に引き続きLPC-LINK2周りのエラーである.

 

今回は前回と異なり,コンパイル・ダウンロードが終わった後に

Flash Download failed - "Cortex-M3"

というメッセージが出て正常にプログラムがスタートしないエラーである.

調べてみるとこんなフォーラムが出てきた

ULINK: FLASH DOWNLOADING WITH CORTEX-M3 DRIVER

どうやら,書き込み領域の設定云々がエラーのようで・・・

 

しかし,TMPM37xのデフォルトのアドレスを指定しているはずなので

上手く動かないわけがない(というか領域外に書くのが怖くて変更したくない)

 

試しに,

「Project」→「Options for Target 'TMPM374'」→「Utilities」タブ

→「Settings」ボタン→「Flash Download」タブ→「Download Function」

を"Erase Full Chip"に指定するとなんかうまくいってしまった.

おそらくこれは書き込み前にマイコン内を全部消去するオプションだが

なぜこれでエラーが出なくなるかはよくわからない.

(変更されたところだけ書き込むアルゴリズムに不具合でもあるのかな?)

 

 

LPC Link2で"RDDI-DAP Error"が出たとき

先日,いざプログラミングとTMPM374にデータを書き込もうとした際

 

「RDDI-DAP Error」

 

というエラーが出て書き込めないトラブルが発生した.

何がなんやらわからず,

・LPC Link2のCMSIS-DAPファームウェアを書き直し

・ドライバの入れ直し

・別PCでの起動

・LPC Link2を買いなおしてやり直し

いずれも問題を解決することはできなかった.

 

やけくそになっていろいろ弄ってみたところ

TMPM374側のリセットボタンを押したり離したりしているうちに認識した.

どうやら,リセット周りがうまく動作していないことが原因だったようである.

リセットボタン周りのプルアップ抵抗が悪さしているのでは・・・と思っているが,

さてどうなんだろう?

(その後,抵抗をはずしては居ないがずっと動作はしている.)

 

それでは,また.

ATmega32u4は使いにくいという話

Arduinoを使った電子工作も慣れてくると色々と融通を効かせたくなるもので.

最近ではもっぱら純正基板の回路図をコピーして自分なりに作り替えて使ってます.
(部品を秋葉原で入手しやすいものに変えたり,サイズ変えたり)

 

今まで使っていたのは,Arduino UNOでおなじみにATmega328P,

その表面実装版であるATmega328P-AUだったわけですが・・・

 

いちいちUSBからアクセスするためにインタフェースICを追加するのが面倒だったので

いっそUSB機能付きのICに交換したれ,

ということでATmega32u4を使うことにしました,

 

ATmega32u4はUSB機能付きのICの中でも,Arduino Pro Microという

種類に使われているもの.当然回路図もあるので,それをコピーすれば楽勝・・・

と思っていたのが運の尽き.

 

実際に基板を設計し,実装した後でいざブートローダーを書き込もうとすると

一向に成功しない.

 

・まず,Aitendoで買ったPro MicroのコピーボードとUNOを接続し書き込み

→5V16MHzで成功.まぁこれで問題あるとどうしようもないんだけど.

・次に,自作ボードで同じように接続して書き込み

→3.3V8MHzで失敗.

"avrdude: Yikes!  Invalid device signature.
         Double check connections and try again, or use -F to override
         this check."

エラーの内容はこんなもの.どうせ接続が間違っているんだろうと

テスタで当たってみるも問題ない.

 

・何度かやってみると,Verifyに失敗しただのデバイスIDが違うだのと

毎回エラーの内容そのものが安定しない.

 

・もうどうにでもなれと,試しに5V16MHzに設定を変更して書き込み

→まさかの成功.ただし自作ボードに実装しているのは8MHzのクリスタル.

(まぁ,書き込む時はクロックの管理UNO側だから関係ないんだろうけど)

 

・その後,UNOを外して自作ボードをPCと接続するも,

USBデバイスが確認できないというエラーが発生.

 

その後,ブレイクアウトボードで試してみるなどいろいろやってみたが

問題は解決せず.

 

32u4で作れれば基板がすっきりするんだが,どうにもうまくやる方法が思いつかない.

(328Pの場合はUSB接続したいならFT232RL/Qを実装する必要がある.

IC2個はなかなかに面倒だ.何?今のUNOはFT232RじゃなくてATmega16u使ってる?

今回と同じようなオチになりそうなので使いたくありません.

シリアル通信できれば当面は何の問題もないしね.)

 

そんなわけで,しばらくは安全を取ってATmega328P+FT232Rの組み合わせで

設計することとしよう.ちょっと古臭いけどね.

 

では,また.

DesignSpark PCBでFusion PCB(あるいはElecrow)用データを出力するときの注意

時々,DesignSpark PCBでFusion PCB(あるいはelecrow)用のデータを出力する際,

外形データが認識されない不具合が出てくる.

 

どうしてなのかと色々実験した結果,どうやら基板外形の入れ子構造に問題があるようだ.

 

基板外形内にPadで穴を開ける

f:id:s_ajisaka:20160921172746p:plain

結果:正しく出力される(当たり前)

 

基板外形内に基板外形線で穴を開ける(1個)

f:id:s_ajisaka:20160921173201p:plain

結果:正しく出力される

 

基板外形内に基板外形線で穴を開ける(2個以上)

f:id:s_ajisaka:20160921173310p:plain

結果:基板外形線が認識されない

 

PADの銅部分半径<穴半径として胴部分を全て削り取る

f:id:s_ajisaka:20160921173427p:plain

結果:基板外形線(とPAD)が認識されない

 

要するに

・基板外形内に外形線であけられる穴は一つまで

・基本,穴はPADで開けろ

・デザイン上矛盾すること(銅部分を全て削り取る)はするな

ということらしい.ただ,チップアンテナを搭載したモジュール等を実装したい場合,

取り付け穴に銅部分を残したくない場合はどうすればいいのだろう・・・?

 

 

では,また.