ROS開発にPyCharmやCLionを使う際のTips
この記事では ROS の開発に Jetbrains 製の IDE である PyCharm や CLion を使う際に、便利に開発を進めるための設定を紹介しています。
環境
- Ubuntu 16.04 (14.04)
- ROS Kinetic (Indigo)
- PyCharm 2016.X
- CLion 2016.X
環境変数を設定
Ubuntu にインストールした PyCharm や CLion をランチャーから起動すると、ROS の環境変数が読み込まれておらず、ROSの関数やメッセージを import / include すると not found とワーニングが表示されます。
そこで、ROSの環境変数を読み込んだターミナルから IDE を起動してあげることで、メッセージや関数が正しく補完されるようになります。
$ source /opt/ros/kinetic/setup.bash # ROS Kinetic の場合 $ source /opt/ros/indigo/setup.bash # ROS Indigo の場合 $ source ~/catkin_ws/devel/setup.bash $ clion & # CLion をバックグラウンドで起動 $ charm & # PyCharm をバックグラウンドで起動
追記(2016/10/27)
以下のように Unity の launcher ファイルを書き換えることで、シェルから IDE を立ち上げる必要がなくなります。
PyCharmの場合 ~/.local/share/applications/jetbrains-pycharm.desktop
CLionの場合 ~/.local/share/applications/jetbrains-clion.desktop
[Desktop Entry] Version=1.0 Type=Application ... # 以下の行を削除 Exec=bash -c "/path/to/your/clion/bin/pycharm.sh %f" # PyCharm Exec=bash -c "/path/to/your/clion/bin/clion.sh %f" # CLion # 以下の行を追記する(PyCharm, ROS Kinetic の場合) Exec=bash -c "source /opt/ros/kinetic/setup.bash; source /path/to/your/catkin_ws/devel/setup.bash; /path/to/your/pycharm/bin/pycharm.sh" %f # 以下の行を追記する(CLion, ROS Kinetic の場合) Exec=bash -c "source /opt/ros/kinetic/setup.bash; source /path/to/your/catkin_ws/devel/setup.bash; /path/to/your/clion/bin/clion.sh" %f ...
型ヒントを利用 (PyCharm)
Python の docstring に変数や戻り値の型を記述すると、PyCharm がメンバ変数の補完や型の誤りの指摘をしてくれます。
例えば、PoseStamped 型のトピックのコールバック関数を例に取るとこんな感じです。
import math import rospy from geometry_msgs.msg import PoseStamped def callback_pose(pose): u""" PoseStamped のトピックのコールバック :param geometry_msgs.msg.PoseStamped pose: 変数 pose に関する説明 :rtype: float # 関数の戻り値の型 :return: pose の原点からの距離 # 関数の戻り値の説明 """ # pose. と打つと pose を補完、 pose.pose と打つと position や orientation を補完してくれる position = pose.pose.position distance = math.sqrt(position.x ** 2 + position.y ** 2 + position.z ** 2) return distance rospy.Subscriber("/some/topic", PoseStamped, callback_pose)
ROS の Pose 型と PoseStamped 型などは間違いやすいうえ、Python だと実行するまで気づけなかったりするので、PyCharm の type hinting を活用するとミスが減って効率アップできます。