LoginSignup
0
1

More than 1 year has passed since last update.

rospyのモジュールコード分割

Posted at

rospyを使うときに、
普通のやり方ではソースコードを分割できない。

ROSの機能を十分に使うためには役に立つTipsだと思うので、まとめておく。

参考記事

大体以下の通りであるが、
ざっくりしすぎているので、もう少し丁寧にまとめる

手順

フォルダ構成の確認

catkin_makeをした後の構成の確認。

例えば、

+ beuato_monitor_test
  - setup.py                  /// 新しく作る
  - CMakeLists.txt
  - package.xml
  + scripts
    - beuato_server.py
    + common_driver
      - beuato_errorcode.py

と言った構成とし、
beuato_server.pyからデバイスのエラーコードを吐き出すための
共通の処理がcommon_driverのbeuato_errorcode.pyに書かれているものとする。

beuato_errorcode.pyは単なるEnum型で次のように記述した。

beuato_errorcode.py
from enum import Enum

class BeuatoErrorCode(Enum):
    OK = 0
    DEVICE_NOT_FOUND = -100
    DEVICE_ACCESIBILITY_ERROR = -101

beuato_server.pyについては、beuato_errorcode.pyの実装をまだしていないものとする。

setup.py

新しく作る。
ここは正直パターン化されているコードのようだ。

setup.py
from distutils.core import setup
from catkin_pkg.python_setup import generate_distutils_setup
d = generate_distutils_setup(
    packages=['common_driver'],
    package_dir={'': 'scripts'},
    requires=['std_msgs', 'rospy']
)

setup(**d)

packagesのcommon_driverがscripts以下に記述される共通モジュールのパッケージ名、
package_dirのscriptsが格納されているソースファイルの名前、
requiresに必要なパッケージを連ねる形式となる。

CMakeLists.txt

CMakeLists.txt
/**
 省略 
**/

catkin_python_setup()

/** 
省略
**/

基本的には次のようにcatkin_python_setupを入れるだけ。
ただし、入れる位置には注意が必要。

私が確認した限りでは、

  • catkin_install_pythonの前に入れる
  • generate_messagesの前に入れる
  • catkin_packageの前に入れる

と言った内容は守らないといけないようだ。

インポート側のコード

大体こんな感じで書きます

beuato_server.py
### (省略) ###

from common_driver.beuato_errorcode import BeuatoErrorCode

### (省略) ###

ビルド

$ source devel/setup.bash
$ catkin_make

ここで、よく注意書きに「python setup.py」と書いちゃダメ、というのがある。
setuptoolsにインストールするわけではなく、
ROSのwork folderに出来上がるためだ。

この後に

$ rosrun beuato_monitor_test beuato_server.py

を実行すれば動いてくれる。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1