2018年10月
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

カテゴリー

ブログパーツ

無料ブログはココログ

« 2013年6月 | トップページ | 2013年8月 »

2013年7月

2013年7月30日 (火)

catkin超入門(その1)・ざっくり理解する

ROSさんお手やわらかに:ROS奮闘編

groovy導入でまたぞろイチからやり直しか、と、めちゃくちゃテンションが下がっていたROSだが、一念発起、とにかくcatkinをやってみることにした。

まずは読み方だ。カトキンか? 冷凍エビフライの加ト吉みたいだな。はたまたキャットキンか? ネコノキンタマが思い浮かぶ。あれは結構マヌケなものだ。どうころんでもあまりシャープなイメージにはならないね。これに比べると、ロスビルドてえのはよかったね。ロスビルド、文字にしても声に出してもいい感じだ。ゴーリキーの「どん底」の名台詞を思い出す。「にん・げん。豪勢な響きがするじゃねえか」・・「ロス・ビルド。豪勢な響きがするじゃねえか。カトキンだかキャットキンだかじゃあ、腹に力が入らねえな」

閑話休題。ネイティブがなんと発音してようと、僕の心の中ではカトキンでいくことにした。とにかくこのcatkinでパッケージをインストールしたり、新規に作ったりができるよう、「超入門」した記録を残すことにする。

まずはcatkinとはなんぞや、である。まあ、やる気のある、市役所の窓口担当みたいなものか。前任のロス・ビルド氏のやっていた仕事を改善し、よく利用する市民には便利になったが、提出書類の書式ががらりと変わってしまい、たまーに利用する、僕みたいな市民はちょっと面食らう・・てな感じかな。何ぞやの答えになっていないが。

ともかく、catkinはrosパッケージの新しいビルドシステムである。ぶつぶつ言う前に使ってみなければならない。

デスクトップの取り替え式のハードディスクには、furteとgroovyをインストールしたubuntuが入れてある。以降はこのgroovy環境下で行った。

■ワークスペースを作る
チュートリアルにあるようにcatkin_wsというワークスペースを作る。ワークスペースには、パッケージを置くsrcフォルダも必要なので、これも一緒に作る。

$ mkdir -p ~/catkin_ws/src

次にsrcに移動し、これをワークスペースとして初期化する。

$ cd ~/catkin_ws/src
$ catkin_init_workspace

次にワークスペースに戻り、とりあえずmakeする。

$ cd ~/catkin_ws
$ catkin_make

これでワークスペースとして設定完了。新たに端末を開く度、下記のセットアップを実行し環境を設定する。

$ source ~/catkin_ws/devel/setup.bash

これでワークスペースは完成だ。

■catkinでのパッケージについて
◎catkinでのパッケージとは?
・パッケージにはメタ情報を記載したpackage.xmlファイルがある
・catkinでビルドするのに必要なCMakeLists.txtファイルがある
・パッケージのフォルダの中にはパッケージ一つだけ

◎パッケージの最小構成はこれだけ。ソースコードなしでもよい。
my_package/
 CMakeLists.txt
 package.xml

◎パッケージはcatkinワークスペースのsrcフォルダに置く。新規に作成するにはcatkin_create_pkgコマンドを使う。下記は beginner_tutorialsパッケージを作る場合。

$ cd ~/catkin_ws/src
$ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp

このへんはroscreate-pkgと同じ。書き方は
# catkin_create_pkg [depend1] [depend2] [depend3]

依存関係などはpackage.xmlに記載されている。これがrosbuildのマニフェストに相当するようだ。基本的にはrosbuildと同じなので、のちほど実戦で試してみることにする。

◎package.xmlを下記の要領で編集。説明などは公開するつもりがないなら、そのままで構わない。

・descreptionタグ
パッケージの説明を短く書く。

・maintainerタグ
メンテナンスする人のメールアドレスと名前を書く

・licenseタグ
パッケージのライセンスの種類を書く。全部自作ならBSDでよさそう。

・dependenciesタグ
いろいろな依存関係のタグをまとめて。使うときに考えることにする。中味を見ると、作るときに指定した依存関係が、build_dependとrun_dependとして入っている。

◎CMakeLists.txtについては今は考えないことにする。

■catkinでのビルド
ワークスペースに移動してcatkin_makeを実行する。

$ cd ~/catkin_ws/
$ catkin_make

srcフォルダの、変更のあったすべてのパッケージをビルドするようだ。どれをビルドするかの指定はいらない。

今回はここまで。次回は、練習として、以前の投稿でインストールしたゲームパッドのパッケージを、catkin版でインストールしてみる。


2013年7月21日 (日)

PIC24Fのシリアルポートで気をつけること

花岡ちゃんのウィークエンド

これまで、PIC24Fを使って、ハイクラスPICの使い勝手を調べてきました。結果としては良好で、速度やRAM容量が必要だったり、シリアルポートが2本必要なプロジェクトなどでは、採用する価値ありだと思います。

そこで、本業の方でちょうどいい案件があったので、早速採用してみました。モノはパソコンから115200bpsで定期的に送信されるシリアルデータを、複数のSPIチャネルに仕分けして転送する機械です。ちょこっとテストしたところ問題なく動作したので、実機に組み込んだところ、あれれ?、ハングアップしてしまいます。症状はシリアル通信を全く受け付けないだけで、その他の機能、タイマー割り込みでのランプの点滅とか、テストボタンの反応だとかは正常に動作しています。

この機械では、以前のプロジェクトで試したコードをタネにして、シリアル受信を割り込みで実装しています。
割り込みハンドラはこんな感じです。

void __attribute__((interrupt, no_auto_psv)) _U1RXInterrupt(void) {
unsigned char i;
i = U1RXREG; //受信データ読み込み
//
// ここに処理の本体
//
IFS0bits.U1RXIF = 0; //受信割り込みフラグ解除
}

現在の装置では、パソコンからデータストリームの送信が最初に始まり、その後、試作機械が立ち上がります。つまり、試作機械が立ち上がった時には、すでにパソコンからのデータが送り込まれていることになります。
いろいろ調べていくと、試作機械を先に立ち上げて、その後にパソコンからのデータストリームの送信を開始すると問題ないことがわかりました。試作機械は立ち上げ時に、シリアル受信をイネーブルにした後、100msほど初期化処理をした後に、受信割り込みを許可しています。どうもこの時差に問題があるように思えます。

色々やってみた結果、次のようなメカニズムで、受信割り込みが掛からなくなってしまうのが原因のようです。

シリアル受信をON
 ↓
初期化中に5バイト以上のシリアルデータが入ってきて、受信バッファがオーバーフロー
 ↓
シリアル割り込みを許可
 ↓
受信バッファがオーバーフローしているので、受信割り込みがかからない

PIC24Fはシリアル受信バッファとして4バイトのFIFOを持っていますが、これがオーバーフローすると、なんと受信割り込みが掛からなくなる仕様になっているようです。対策としては、シリアル受信をONにするタイミングを初期化処理後にもってくるのが一番簡単ですが、これだと、なんらかの理由でバッファがあふれてしまうと、やっぱりハングアップしてしまいますから、割り込みハンドラのなかできちんと対応することにしました。

新しいハンドラはこうなりました。

void __attribute__((interrupt, no_auto_psv)) _U1RXInterrupt(void) {
unsigned char i;
i = U1RXREG; //受信データ読み込み
//
// ここに処理の本体
//
//受信バッファフルへの対応(コレをしないと受信割り込みがかからなくなる)
if(U1STAbits.OERR) U1STAbits.OERR = 0;
IFS0bits.U1RXIF = 0; //受信割り込みフラグ解除
}

割り込みフラグを解除する前に、バッファオーバーフローエラーが出ていたら、それをリセット(受信データは全て破棄)する処理を挿入し、次の受信でちゃんと割り込みが掛かるようにしています。


2013年7月 7日 (日)

【昔語り4】信越電機商会の頃−2

アキバ昔語り

僕たちの70年代はICとともに訪れました。写真のラジオは1969年後半に発売された、ICを使用した東芝のラジオ、その名もIC-70です。

Dscn2602 Dscn2601

ヤフオクで懐かしさのあまり落札したジャンク品なので、あまり程度はよくありませんが、スタイリッシュなデザインは伝わりますね。前面パネルはアルミ製、本体下の安定用の足は、戦闘機の可変翼のように、前後連動して引き出すことが出来ます。そしてダイアルの下には、「感度に音質に IC革命」と誇らしげに記したラベルが。当時のICの位置づけがわかりますね。

ただ、アマチュアにはあまりICはなじみが無く、東芝のパワーアンプICを使ったアンプの製作記事くらいがいいとこだったように思います。種類も少なく、入手も難しかったのでしょう。
74シリーズのTTLは、そこそこ流通していて、周波数カウンタや時計を自作するアマチュアもいたようですが、当時の水準としては配線工数が多く、なかなか手の出しにくい分野だったようです。

そんな中、信越電機商会から画期的な商品が発売されます。「時計用LSIのキット」です。

5311

この広告は、1972年12月号のCQ誌に掲載されたものです。TTLで作れば20個近いICが必要になるデジタル時計が、たった一つで出来てしまうのですから、LSIとはすごいなと感心したのを覚えています。
キットという触れ込みですが、良く読むと、LSIと若干の周辺パーツしか入っていないのがおわかりになると思います。表示用のデバイスも入ってません。LEDなりデジトロン(蛍光表示管)なりミニトロン(電球のフィラメントを7セグ表示の形に配置したもの)なりを自分で用意するしかありません。
それでも、手に入りにくいLSIが応用回路例付きで手に入る訳ですから、アマチュアにとってはアリガタイ商品です。

ほどなくして、LEDなどの表示器をセットにしたものの発売も始まりました。これは先の広告の1年後、1973年12月号の広告です。

5311_led

表示器とのセット販売は、73年の春頃から始まったように思います。LSIはBCD出力付きのMM5311に変更になっています。
ここまで来ると、あとナントカ手に入れなければならない特殊な部品は、2.54ピッチのユニバーサル基板だけです。お金持ちはKELの基板を使えばいいし、僕のようなスカンピンには、2.54ピッチの穴だけが空いたベーク板を使うという手がありました。ランドがありませんが、なに、ICの足に直接電線をハンダ付けすればいいのです。僕は、30Wの半田ごてのコテ先をヤスリで削って尖らせ、これをやってました。同じ足に2本以上の引き出し線をハンダ付けするのは、結構高度なテクニックが必要でしたが。

その頃、日曜にアキバの信越電機に行くと、いつもたくさんの人でごった返して居ました。多忙のため通販を休止することが多く、地方からわざわざ買い物に上京するアマチュアも多かったようです。このような70年代のアマチュアから熱い支持を受け、信越電機商会はユニークなキットを次々に企画し、アキバの名物店になっていったのです。
もう皆さんにはお分かりですね。今日の秋月電子通商の前身が、この信越電機商会です。

今回の元ネタはこちらです。

「shin1972_12.jpg」をダウンロード
「shin1973_12.jpg」をダウンロード

« 2013年6月 | トップページ | 2013年8月 »