msg/Hello.msgの場所

411 views
Skip to first unread message

大西克典

unread,
Oct 27, 2013, 3:53:04 AM10/27/13
to ros-jap...@googlegroups.com
大西と申します。

ROSを学習するにあたって、まず手始めにpythonとcppを使ってパブリッシャとサブスクライバを作り
$ python .alker.py
[INFO] [WallTime: 1382857947.720525] hello world 1382857947.72
[INFO] [WallTime: 1382857948.722451] hello world 1382857948.72

のようにメッセージを送受信しているのですが、ここでオリジナルメッセージの追加をしたいです。
そのためにはmsgディレクトリ以下に
$cat msg/Hello.msg
Header header
string hello
geometry_msgs/Vector3 pos
として追加すれば良いらしいとのことですが、Hello.msgを含むmsgディレクトリはどこにあるのでしょうか?
ファイルマネージャーからmsgで検索して見つかったフォルダの中を探してもHello.msgは見つかりませんでした。

環境としましてはubuntu13.04にhydroをインストールして使用しております。
よろしくおねがいします。

y-ta...@jsk.imi.i.u-tokyo.ac.jp

unread,
Oct 27, 2013, 5:40:53 AM10/27/13
to ros-jap...@googlegroups.com
田中です

Linuxにあまり慣れていないのでしょうか?

まず、ここで
$cat msg/Hello.msg
という一行が何を意味しているのか考えてみてください。

最初のcatというのがLinuxのコマンドであるということは想像できると思います。
そのように想像することができれば、
catって何をするためのコマンドなんだろう?という発想に辿り着き、
www.google.comとブラウザのURLに打ち込み、検索サイトから情報収集を行うことで、
catコマンドとは、ターミナル上にファイルに記述された中身を表示するコマンドだという情報が得られます。

ちなみに、Linuxにおいて、コマンドの形式は、
$ [コマンド名] [オプション] [引数(ファイル名など)]
といった感じになっています。

そうすると、
$cat msg/Hello.msg
とターミナルに打ち込めば、
Header header
string hello
geometry_msgs/Vector3 pos
といったように、msgディレクトリ内にあるHello.msgというファイルの中身を表示することができます。

また、オリジナルのメッセージを作るということは、
あらかじめ用意されていないというものをつくるということです。

msgディレクトリが無ければ、mkdir msgでディレクトリを作り、
msgディレクトリの中にHello.msgを作りましょう。
Hello.msgの中身は前述したので、その通りにHello.msgファイル内に記述します。
この時、エディタは主にemacsかvimを使うでしょうが、emacsの場合ですと、
emacs -nw Hello.msg
としてファイルを作成します。

ここまで全て解説してきましたが、
ディレクトリを作ると言われて、じゃあ、どうやってディレクトリを作るのだろう?
と考えを膨らませられたら、www.google.comにて「Linux ディレクトリ 作成 コマンド」
といったような検索をしようという想像力が働くことでしょう。
Hello.msgの作成であれば、「Linux ファイル 編集 エディタ」
といった検索をすることになるでしょう。

余談ですが、このように、www.google.comは「○○ってなんなんだろう?」という素朴な疑問を、
○○と入力して検索ボタンを押すだけでほとんどの疑問を解決してくれることから、
敬意を込めて、「Google先生」と呼ばれています。

2013年10月27日日曜日 16時53分04秒 UTC+9 大西克典:

大西克典

unread,
Oct 27, 2013, 6:09:55 AM10/27/13
to ros-jap...@googlegroups.com
田中さん

ありがとうございます。
catがファイルの中身を確認するものというのはわかっていたのですが、msg/Hello.msgを作ればよかったのですね。
どこかのディレクトリにいってHello.msgを見つけたらcatして中身を確認してその後書き換えればよいのかと思っておりました。

ご丁寧にありがとうございました。

2013年10月27日日曜日 18時40分53秒 UTC+9 y-ta...@jsk.imi.i.u-tokyo.ac.jp:

鎌田一史

unread,
Oct 27, 2013, 12:36:51 PM10/27/13
to ros-jap...@googlegroups.com
ros-japanの解説を読んでやってみましたが、
上手くいきませんでした。
beginners_tutorialsのディレクトリに入った状態でmakeをおこなうと
mechuser@IMI-T400s:~/ros_workspace/beginner_tutorials$ make
mkdir -p bin
cd build && cmake -Wdev
-DCMAKE_TOOLCHAIN_FILE=/opt/ros/hydro/share/ros/core/rosbuild/rostoolchain.cmake
 ..
[rosbuild] Building package beginner_tutorials
-- Using CATKIN_DEVEL_PREFIX:
/home/mechuser/ros_workspace/beginner_tutorials/build/devel
-- Using CMAKE_PREFIX_PATH: /opt/ros/hydro
-- This workspace overlays: /opt/ros/hydro
-- Using Debian Python package layout
-- Using CATKIN_ENABLE_TESTING: ON
-- Skip enable_testing() for dry packages
-- Using CATKIN_TEST_RESULTS_DIR:
/home/mechuser/ros_workspace/beginner_tutorials/build/test_results
-- Found gtest sources under '/usr/src/gtest': gtests will be built
-- catkin 0.5.77
[rosbuild] Including /opt/ros/hydro/share/roslisp/rosbuild/roslisp.cmake
[rosbuild] Including /opt/ros/hydro/share/roscpp/rosbuild/roscpp.cmake
[rosbuild] Including /opt/ros/hydro/share/rospy/rosbuild/rospy.cmake
[rosbuild] WARNING: rosbuild_genmsg() was called, but no .msg files were found
[rosbuild] WARNING: rosbuild_genmsg() was called, but no .msg files were found
-- Configuring done
-- Generating done
CMake Warning:
  Manually-specified variables were not used by the project:

    CMAKE_TOOLCHAIN_FILE


-- Build files have been written to:
/home/mechuser/ros_workspace/beginner_tutorials/build
cd build && make
make[1]: ディレクトリ `/home/mechuser/ros_workspace/beginner_tutorials/build' に入ります
make[2]: ディレクトリ `/home/mechuser/ros_workspace/beginner_tutorials/build' に入ります
make[3]: ディレクトリ `/home/mechuser/ros_workspace/beginner_tutorials/build' に入ります
make[3]: ディレクトリ `/home/mechuser/ros_workspace/beginner_tutorials/build' から出ます
[  0%] Built target rospack_genmsg_libexe
make[3]: ディレクトリ `/home/mechuser/ros_workspace/beginner_tutorials/build' に入ります
make[3]: ディレクトリ `/home/mechuser/ros_workspace/beginner_tutorials/build' から出ます
[  0%] Built target rosbuild_premsgsrvgen
make[3]: ディレクトリ `/home/mechuser/ros_workspace/beginner_tutorials/build' に入ります
make[3]: ディレクトリ `/home/mechuser/ros_workspace/beginner_tutorials/build' から出ます
[  0%] Built target ROSBUILD_genmsg_cpp
make[3]: ディレクトリ `/home/mechuser/ros_workspace/beginner_tutorials/build' に入ります
make[3]: ディレクトリ `/home/mechuser/ros_workspace/beginner_tutorials/build' から出ます
[  0%] Built target ROSBUILD_genmsg_lisp
make[3]: ディレクトリ `/home/mechuser/ros_workspace/beginner_tutorials/build' に入ります
make[3]: ディレクトリ `/home/mechuser/ros_workspace/beginner_tutorials/build' から出ます
[  0%] Built target rospack_genmsg
make[3]: ディレクトリ `/home/mechuser/ros_workspace/beginner_tutorials/build' に入ります
make[3]: ディレクトリ `/home/mechuser/ros_workspace/beginner_tutorials/build' から出ます
[ 40%] Built target ROSBUILD_gensrv_py
make[3]: ディレクトリ `/home/mechuser/ros_workspace/beginner_tutorials/build' に入ります
make[3]: ディレクトリ `/home/mechuser/ros_workspace/beginner_tutorials/build' から出ます
[ 60%] Built target ROSBUILD_gensrv_lisp
make[3]: ディレクトリ `/home/mechuser/ros_workspace/beginner_tutorials/build' に入ります
make[3]: ディレクトリ `/home/mechuser/ros_workspace/beginner_tutorials/build' から出ます
[ 80%] Built target ROSBUILD_gensrv_cpp
make[3]: ディレクトリ `/home/mechuser/ros_workspace/beginner_tutorials/build' に入ります
make[3]: ディレクトリ `/home/mechuser/ros_workspace/beginner_tutorials/build' から出ます
[ 80%] Built target rospack_gensrv
make[3]: ディレクトリ `/home/mechuser/ros_workspace/beginner_tutorials/build' に入ります
make[3]: ディレクトリ `/home/mechuser/ros_workspace/beginner_tutorials/build' から出ます
[ 80%] Built target rosbuild_precompile
make[3]: ディレクトリ `/home/mechuser/ros_workspace/beginner_tutorials/build' に入ります
make[3]: ディレクトリ `/home/mechuser/ros_workspace/beginner_tutorials/build' から出ます
make[3]: ディレクトリ `/home/mechuser/ros_workspace/beginner_tutorials/build' に入ります
[100%] Building CXX object CMakeFiles/listener.dir/src/listener.cpp.o
/home/mechuser/ros_workspace/beginner_tutorials/src/listener.cpp:3:40:
致命的エラー: beginner_tutorials/Hello.msg: そのようなファイルやディレクトリはありません
コンパイルを停止しました。
make[3]: *** [CMakeFiles/listener.dir/src/listener.cpp.o] エラー 1
make[3]: ディレクトリ `/home/mechuser/ros_workspace/beginner_tutorials/build' から出ます
make[2]: *** [CMakeFiles/listener.dir/all] エラー 2
make[2]: ディレクトリ `/home/mechuser/ros_workspace/beginner_tutorials/build' から出ます
make[1]: *** [all] エラー 2
make[1]: ディレクトリ `/home/mechuser/ros_workspace/beginner_tutorials/build' から出ます
make: *** [all] エラー 2


のようなエラーが表示されます。しかし、
mechuser@IMI-T400s:~/ros_workspace/beginner_tutorials$ ls
CMakeLists.txt   Makefile  include       manifest.xml  srv        talker.py~
CMakeLists.txt~  bin       lib           scripts       srv_gen
Hello.msg        build     mainpage.dox  src           talker.py

このように、beginners_tutorialsのディレクトリにはHello.msgは存在します。
もしかしたら、と思い、Hello.msgを Hello.hに変えてみるなどしましたが、やはりエラーは解消されませんでした。


2013年10月27日日曜日 19時09分55秒 UTC+9 大西克典:

Yohei Kakiuchi

unread,
Oct 27, 2013, 2:45:57 PM10/27/13
to ros-jap...@googlegroups.com
基本的なことですが,
メッセージファイルは, <package_dir>/msg ディレクトリに置かれる,
サービスファイルは,<package_dir>/srv ディレクトリに置かれます.

鎌田さんや大西さんの参照している日本語チュートリアルページがどこだか
分からなかったのですが,英語だと以下のページに書いてあり,
http://wiki.ros.org/ROS/Tutorials/CreatingMsgAndSrv
msgディレクトリをつくって,その下に,<message name>.msg というファイルを作ることで
メッセージが作られます.

$ roscd beginner_tutorials
$ mkdir msg
$ echo "int64 num" > msg/Num.msg

makeすると,msg_genやsrv_genというディレクトリができてそこに,msgファイルやsrvファイル
からできるcのヘッダーが置かれます.makeしたときには自動的にincludeディレクトリに追加されます.

2013年10月28日 1:36 鎌田一史 <doctort...@gmail.com>:
> --
> このメールは Google グループのグループ「ROS JAPAN User's Group」の登録者に送られています。
> このグループから退会し、メールの受信を停止するには、ros-japan-use...@googlegroups.com
> にメールを送信します。
> その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。

y-ta...@jsk.imi.i.u-tokyo.ac.jp

unread,
Oct 30, 2013, 8:10:03 AM10/30/13
to ros-jap...@googlegroups.com
同様の和訳ページもあります。

http://wiki.ros.org/ja/ROS/Tutorials/CreatingMsgAndSrv

2013年10月28日月曜日 3時45分57秒 UTC+9 垣内:
> このグループから退会し、メールの受信を停止するには、ros-japan-users+unsubscribe@googlegroups.com
Reply all
Reply to author
Forward
0 new messages