LIFE LOG(ここにはあなたのブログ名)

あつあつ備忘録

ソフトやハード、時にはメカの備忘録をまとめていきます

【ROS】pythonライブラリの作成

f:id:AtsuyaKoike:20190421152613p:plain
画像元

ライブラリを置くための準備

  • ROSではpythonのライブラリを「パッケージ名/src/パッケージ名」におく

前回の記事で作ったbumper_action.pyを移動する

$ mkdir -p src/ros_start
$ cp scripts/bumper_action.py src/ros_start/

ディレクトリをライブラリと認識させるために、__init__.pyを配置する。

$ touch src/ros_start/__init__.py

ROSのパッケージシステムでこのライブラリを認識させるための設定をする。

~/catkin_ws$ vi src/ros_start/setup.py 
from distutils.core import setup
from catkin_pkg.python_setup import generate_distutils_setup

setup_args = generate_distutils_setup(
    packages = [ 'ros_start' ],
    package_dir = { '': 'src' },
)

setup (**setup_args )

CMakeLists.txtの編集

catkin_python_setup()

コメントアウトを解除

$ cd ~/catkin_ws/
$ catkin_make

ライブラリを使う

~/catkin_ws/src/ros_start/scripts$ vi bumper_action_use_lib.py
#!/usr/bin/env python
import rospy
from ros_start.bumper_action import BumperAction

if __name__ == '__main__':
    rospy.init_node( 'bumper_action_use_lib' )
    bumper_action = BumperAction()
    rospy.spin()
$ chmod 755 bumper_action_use_lib.py
$ roscd ros_start/
$ cp scripts/bumper_client.py src/ros_start/
$ vi scripts/bumper_client_use_lib.py
#!/usr/bin/env python
import rospy
from ros_start.bumper_client import go_until_bumper
rospy.init_node( 'bumper_client_use_lib')
go_until_bumper()
$ chmod 755 scripts/bumper_client_use_lib.py

確認

$ rosrun ros_start bumper_action_use_lib.py 
$ rosrun ros_start bumper_client_use_lib.py 
[INFO] [1557815823.296143, 10.460000]: bumper hit!

結果はライブラリを使わないものと同様



ちなみに、今現在のディレクトリ構成は以下のようになっているはず

ros_start
├── CMakeLists.txt
├── action
│   └── GoUntilBumper.action
├── include
│   └── ros_start
├── launch
│   ├── chat.launch
│   └── param.launch
├── package.xml
├── scripts
│   ├── bumper_action.py
│   ├── bumper_action_use_lib.py
│   ├── bumper_client.py
│   ├── bumper_client_use_lib.py
│   ├── listener.py
│   ├── service_client.py
│   ├── service_server.py
│   ├── talker.py
│   ├── vel_bumper.py
│   ├── vel_publisher.py
│   ├── velocity_client.py
│   └── velocity_server.py
├── setup.py
├── src
│   └── ros_start
│       ├── __init__.py
│       ├── bumper_action.py
│       ├── bumper_action.pyc
│       ├── bumper_client.py
│       └── bumper_client.pyc
└── srv
    └── SetVelocity.srv