オリジナルメッセージ型を用いたPythonでの通信ができません

2,004 views
Skip to first unread message

Osawa Souhei

unread,
Oct 14, 2013, 8:09:24 AM10/14/13
to ros-jap...@googlegroups.com
大澤です。

オリジナルメッセージ型を用いてPythonでのパブリッシャの作成を考えています。

ros_workspace(作業環境)/beginner_tutorials/msg下に
Hello.msgというオリジナルメッセージ型を作成し、CMakeLists.txtのrosbuild_genmsg()をコメントアウトしてmake後、
$python ./talker.pyによって作成したパブリッシャ(talker.py)を起動しました。
すると以下のようなエラーが出てしまいました。何が悪いのか分かる方がいらっしゃいましたらご教示ください。
よろしくお願いいたします。


mechuser@IMI-T400s:~/ros_workspace/beginner_tutorials$ python ./talker.py
Traceback (most recent call last):
  File "./talker.py", line 5, in <module>
    from beginner_tutorials.msg import Hello
ImportError: cannot import name Hello

また以下はtalker.pyの中身です。

#!/usr/bin/env python                                                                                              
import roslib; roslib.load_manifest('beginner_tutorials')
import rospy
from std_msgs.msg import String
from beginner_tutorials.msg import Hello

def talker():
    pub = rospy.Publisher('chatter2', Hello)
    rospy.init_node('talker')
    while not rospy.is_shutdown():
        str = "hello world %s"%rospy.get_time()
        rospy.loginfo(str)
        hello = Hello();
        hello.hello = "world"
        hello.pos.x = 0;
        hello.pos.y = 1;
        hello.pos.z = 2;
        pub.publish(hello);
        rospy.sleep(1.0)
if __name__ == '__main__':
    try:
        talker()
    except rospy.ROSInterruptException:
        pass

Isaac Isao Saito

unread,
Oct 14, 2013, 11:27:30 AM10/14/13
to ros-jap...@googlegroups.com
大澤さん,

2013/10/14 Osawa Souhei <kisara...@gmail.com>:
> Hello.msgというオリジナルメッセージ型を作成し、CMakeLists.txtのrosbuild_genmsg()をコメントアウトしてmake後、

rosbuild_genmsg() をコメントアウトするということは catkin を使っていると想像しますが,合っていますか?

カスタム (自作) msg を利用するには .msg から .py を生成する必要がありますが,上記の通りだとすると,日本語
tutorial の例えば下記ページには catkin 用の msg 生成方法が翻訳されてないように見えるので,オリジナルの wiki
を参照してみたらどうなるでしょうか.
http://wiki.ros.org/ja/ROS/Tutorials/CreatingMsgAndSrv


--
Isao Isaac Saito
Software Engineer
TORK (Tokyo Opensource Robotics Kyokai Association) / 東京オープンソースロボティクス協会
http://opensource-robotics.tokyo.jp


2013/10/14 Osawa Souhei <kisara...@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 14, 2013, 3:22:20 PM10/14/13
to ros-jap...@googlegroups.com
田中です。

オリジナル型のHello.msgを作成した後、makeは通りましたか?
通ったかどうかというのは、make時にエラーが出なかったどうかということです。

例えば、こんな感じのエラーが出たりしませんでしたか?

[ 25%] Generating ../msg_gen/cpp/include/beginner_tutorials/Hello.h
Traceback (most recent call last):
  File "/opt/ros/groovy/share/roscpp/rosbuild/scripts/genmsg_cpp.py", line 44, in <module>
    msg_gen.generate_messages(sys.argv)
  File "/opt/ros/groovy/share/roscpp/rosbuild/scripts/msg_gen.py", line 740, in generate_messages
    generate(arg)
  File "/opt/ros/groovy/share/roscpp/rosbuild/scripts/msg_gen.py", line 710, in generate
    write_traits(s, spec, cpp_prefix, rospack=rospack)
  File "/opt/ros/groovy/share/roscpp/rosbuild/scripts/msg_gen.py", line 588, in write_traits
    gendeps_dict = roslib.gentools.get_dependencies(spec, spec.package, compute_files=False, rospack=rospack)
  File "/opt/ros/groovy/lib/python2.7/dist-packages/roslib/gentools.py", line 325, in get_dependencies
    raise MsgSpecException("Cannot load type %s.  Perhaps the package is missing a dependency."%(str(e)))
roslib.msgs.MsgSpecException: Cannot load type 'geometry_msgs/Vector3'.  Perhaps the package is missing a dependency.

2013年10月14日月曜日 21時09分24秒 UTC+9 Osawa Souhei:
Message has been deleted

Osawa Souhei

unread,
Oct 14, 2013, 9:34:57 PM10/14/13
to ros-jap...@googlegroups.com

迅速な返信ありがとうございます。

Isao Isaac Saito さんのおっしゃったリンクを参照して色々やってみたところ、
どうもmakeでうまくいっていないということが分かりました。
そして、田中さんのおっしゃるとおりmake時に以下のようなエラーが出ていました。

mechuser@IMI-T400s:~/ros_workspace/beginner_tutorials$ make
mkdir -p bin
cd build && cmake -Wdev -DCMAKE_TOOLCHAIN_FILE=/opt/ros/groovy/share/ros/core/rosbuild/rostoolchain.cmake  ..
[rosbuild] Building package beginner_tutorials
[rosbuild] Cached build flags older than manifests; calling rospack to get flags
-- Using CATKIN_DEVEL_PREFIX: /home/mechuser/ros_workspace/beginner_tutorials/build/devel
-- Using CMAKE_PREFIX_PATH: /opt/ros/groovy
-- This workspace overlays: /opt/ros/groovy
-- 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.74
[rosbuild] Including /opt/ros/groovy/share/roslisp/rosbuild/roslisp.cmake
[rosbuild] Including /opt/ros/groovy/share/roscpp/rosbuild/roscpp.cmake
[rosbuild] Including /opt/ros/groovy/share/rospy/rosbuild/rospy.cmake
-- 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 rosbuild_premsgsrvgen
make[3]: ディレクトリ `/home/mechuser/ros_workspace/beginner_tutorials/build' に入ります
make[3]: ディレクトリ `/home/mechuser/ros_workspace/beginner_tutorials/build' から出ます
[ 40%] Built target ROSBUILD_genmsg_py
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' に入ります
[ 60%] Generating ../msg_gen/cpp/include/beginner_tutorials/Hello.h

Traceback (most recent call last):
  File "/opt/ros/groovy/share/roscpp/rosbuild/scripts/genmsg_cpp.py", line 44, in <module>
    msg_gen.generate_messages(sys.argv)
  File "/opt/ros/groovy/share/roscpp/rosbuild/scripts/msg_gen.py", line 740, in generate_messages
    generate(arg)
  File "/opt/ros/groovy/share/roscpp/rosbuild/scripts/msg_gen.py", line 710, in generate
    write_traits(s, spec, cpp_prefix, rospack=rospack)
  File "/opt/ros/groovy/share/roscpp/rosbuild/scripts/msg_gen.py", line 588, in write_traits
    gendeps_dict = roslib.gentools.get_dependencies(spec, spec.package, compute_files=False, rospack=rospack)
  File "/opt/ros/groovy/lib/python2.7/dist-packages/roslib/gentools.py", line 325, in get_dependencies
    raise MsgSpecException("Cannot load type %s.  Perhaps the package is missing a dependency."%(str(e)))
roslib.msgs.MsgSpecException: Cannot load type 'geometry_msgs/Vector3'.  Perhaps the package is missing a dependency.
make[3]: *** [../msg_gen/cpp/include/beginner_tutorials/Hello.h] エラー 1
make[3]: ディレクトリ `/home/mechuser/ros_workspace/beginner_tutorials/build' から出ます
make[2]: *** [CMakeFiles/ROSBUILD_genmsg_cpp.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

おそらくgeometry_msgs/Vector3へのパスが通っていないということだと思うのですが、どう対処してよいのか分かりません。
よろしくお願いいたします。

Kei Okada

unread,
Oct 15, 2013, 12:50:36 AM10/15/13
to ros-jap...@googlegroups.com
manifest.xmlに
<depend package="geometry_msgs"/>
を追加する必要があるかもしれません.

確認してみて下さい.

Osawa Souhei

unread,
Oct 15, 2013, 4:03:30 AM10/15/13
to ros-jap...@googlegroups.com
岡田先生

うまくいきました。ありがとうございました。
Reply all
Reply to author
Forward
0 new messages