概要
ROSでカスタムメッセージを作った際に、少し困った時の解決方法を以下に示します。
実行環境
次に実行環境を示します。
Soft and Hard | バージョン |
---|---|
Raspberry pi | Model 3 b+ |
OS | 2018-10-09-raspbian-sterech |
Python | 2.7 |
ROS | Kinetic |
ROSのCustom msgの作り方
ROSのCustom msgの作り方については、他の人が詳しく書いているのでここでは、Error対応策のみ記載したいと思います。
また、詳しく書かれているURLを次に示します。
https://qiita.com/srs/items/7ac023c549e585caeed0
https://kazuyamashi.github.io/ros_lecture/ros_study_py.html
Msgを新しく作って、ImportError出すまで
新しくmsgを作って、catkin_make
catkin_make時にも、cmakeは問題なく進み、msgを生成することは確認できました。
puts 'code with syntax'
rosmsg listで新しいmsgが出来ているか確認
catkin_makeが通ったのですが、一応使う前に確認しようと思い、rosmsg listで確認しました。
$rosmsg list | grep new_msg
新しく作ったものがあることが確認できます。
上記までの確認手順で、Errorや想定していない結果が出力されていた場合には、msg作成手順において抜けていることがあるか、もしくは手順を間違えている可能性が大きいので、上記で示したURLで確認してみて下さい。
スクリプトで新しいmsgをImport
上記の確認事項が想定したものであった為、次に新しいmsgを使用するスクリプトで新しいmsgをimport文に追加しました。
from "pakage名".msg import "新しいメッセージ名"
追加後、実行してみると、次のようなErrorが出力されてました。
ImportError: No module named msg
ImportErrorが出力される原因
調べてみると、自身が分かった範囲ではImportErrorが出力される原因としては、主に次の2つの原因があることが分かりました。
- 作成したMessageファイル名とPackage名が同名である
- source /devel/setup.bashをMessage作成後に実行していない
それぞれの場合の解決方法を示します。
作成したMessageファイル名とPackage名が同名である
新たに作成したmessage名とpackage名が同名であると、ImportErrorとなるようです。このErrorはROS Answersでも取り上げられていました。
解決方法は、Messageファイル名とPackage名を異なる名前にすれば解決できるそうです。
source /devel/setup.bashをMessage作成後に実行していない
Message作成後にSourceコマンドによって、/devel/setup.bashを実行していないと、ImportErrorになります。catkin buildもしくは、catkin_make後には、Sourceコマンドを実行しましょう。
まとめ
msg作成時には、上記の2点を確認すればCustum Messageが実行できると思います。間違っているところや、追加したほうがいいところがありましたら、お教え頂けるととても嬉しいです。