あまりニーズがなさそうですが、roslibjsで独自メッセージ型を使うケースについて調べてみました。
roslibjsとは、web上でrosのトピックを送受信したり、rosのサービス/アクションを叩いたり
できるようになるjavascriptライブラリです。
ロボットに取り付けた画面からロボットに指令を出したり、ロボットからの情報を表示したりします。
rosにはrviz, rqt等、ROS基盤にアクセスするアーキテクチャはありますが、
エンドユーザ向けの画面を作りたい場合はコテコテ作る必要があります。
pyqtで画面を作ればpythonコードで直接rosAPIにアクセス出来て楽ですが、
UIというとWebアーキテクチャがメインっぽいですし、qtに依存するのもあれですし・・
基本的なことはROSのwikiに丁寧に書かれてます。
http://wiki.ros.org/roslibjs/Tutorials/BasicRosFunctionality
独自メッセージ型と書きましたが、Web側(つまりroslibjs)で型定義するわけではありません。
あくまで型定義はロボット側ROSパッケージで行います。どういうことなのか。
#1.独自メッセージ型をROSパッケージで定義
これもwikiに書かれてるので、そのとおりにサンプルを用意します。
http://wiki.ros.org/ROS/Tutorials/CreatingMsgAndSrv
#2.メッセージ型を確認
>rosmsg show beginner_tutorials/Num
int64 num
作成したパッケージbeginner_tutorialsの下に、Numというメッセージ型が新規作成され、
その型がint変数一個であることがわかります。
#3.ros側のブリッジサーバ起動
roslaunch rosbridge_server rosbridge_websocket.launch
新しいパッケージを作成し、source devel/setup.bashをした後、ブリッジサーバを
起動する必要があります。でないと、ブリッジサーバが新しい独自メッセージ型を
認知できません。
#4.ros側でトピック待ち
>rostopic echo /aaa
WARNING: topic [/aaa] does not appear to be published yet
新しいメッセージ型を、/aaaという名前のトピックで受信します。
とはいえ、この時点でrosマスタはそんな名前のトピックは知りません。
ただ、「そのうち誰かが/aaaという名前でトピックをpublishするだろう」と
思ってるだけです。
#5.Webページ側でトピック発行
基本的なコードは上記のwikiに書かれてるので、トピックを発行するとこだけ抜粋すると、
var pub = new ROSLIB.Topic({
ros:ros,
name:'/aaa',
messageType: 'beginner_tutorials/Num'
});
pub.publish(new ROSLIB.Message({num: 999}));
これで、4の画面に以下のようにトピックが届きます。
> rostopic echo /aaa
num: 999
roslibjs側では、beginner_tutorials/Numというメッセージ型が
どういう型なのか定義されているわけではありません。
ただ、型の定義に合わせてデータを構成して送れば、
rosマスタが良しなにトピックのサブスクライバに配信してくれます。
4で、/aaaという正体不明のトピックが登録されたrosマスタは、
このようにWebページからトピックを発行されて初めて、
/aaaというトピックが、beginner_tutorialsパッケージのNumメッセージ型を
保持したトピックであることを知ります。そして、rostopic echoしてるところ、
すなわちコンソールのサブスクライバにトピックを配信します。