2020年7月10日金曜日

ROS kinetic のパッケージを作る

訳あって kinetic でごにょごにょしなければいけなくなったので素振り。 パッケージ作成から実行までを試す。

前提

  • OS: Windows 10 Pro
  • Docker: Docker version 19.03.8, build afacb8b

開発環境

Docker の公式イメージ ros:kinetic-ros-base を使う。

docker run -it --rm -v "$(pwd):/work" --workdir="/work" --name topic_pipe ros:kinetic-ros-base bash

空の catkin ワークスペース作成

WORKDIR=/work
mkdir -p $WORKDIR/catkin_ws/src
cd $WORKDIR/catkin_ws/
catkin_make

パッケージ作成

パッケージのひな形生成

cd $WORKDIR/catkin_ws/src
catkin_create_pkg topic_pipe std_msgs rospy

パッケージ情報設定

vim $WORKDIR/catkin_ws/src/topic_pipe/package.xml

package.xml

<?xml version="1.0"?>
<package format="2">
  <name>topic_pipe</name>
  <version>0.0.0</version>
  <description>The topic_pipe package</description>

  <maintainer email="mikoto2000@gmail.com">mikoto2000</maintainer>

  <license>BSD</license>

  <!-- <url type="website">http://github.com/mikoto2000/topic_pipe</url> -->

  <author email="mikoto2000@gmail.com">mikoto2000</author>

  <buildtool_depend>catkin</buildtool_depend>
  <build_depend>rospy</build_depend>
  <build_depend>std_msgs</build_depend>
  <build_export_depend>rospy</build_export_depend>
  <build_export_depend>std_msgs</build_export_depend>
  <exec_depend>rospy</exec_depend>
  <exec_depend>std_msgs</exec_depend>

</package>

スクリプト作成

スクリプトフォルダ作成

mkdir $WORKDIR/catkin_ws/src/topic_pipe/scripts

スクリプト作成

vim $WORKDIR/catkin_ws/src/topic_pipe/scripts/topic_pipe.py

topic_pipe.py

#!/usr/bin/python
# -*- coding: utf-8 -*-

# topic_pipe
#
# pipe_test_sub std_msgs/String を購読し、トピックを受信したら
# pipe_test_pub std_msgs/String に出版する。
import rospy
from std_msgs.msg import String

# 出版トピック定義
pub = rospy.Publisher('pipe_test_pub', String, queue_size=10)


def callback(data):
    rospy.loginfo(rospy.get_caller_id() + 'I heard %s', data.data)
    pub.publish(data.data)


def pipe():
    rospy.Subscriber('pipe_test_sub', String, callback)
    rospy.spin()


if __name__ == '__main__':
    # ノード初期化
    rospy.init_node('topic_pipe', anonymous=True)

    pipe()

ノードビルド

cd $WORKDIR/catkin_ws
catkin_make

動作確認

roscore 起動

roscore 用ターミナルを開く

docker exec -it topic_pipe bash

roscore 起動

. /opt/ros/kinetic/setup.bash
roscore

topic_pipe 起動

topic_pipe 用ターミナルを開く

docker exec -it topic_pipe bash
  • unruffled_shamir: 先ほど起動した ros コンテナの名前

topic_pipe 起動

cd ./catkin_ws/
. ./devel/setup.bash
rosrun topic_pipe topic_pipe.py

topic 送受信確認

受信側

受信用ターミナルを開く。

docker exec -it topic_pipe bash

トピック待ち受け。

. /opt/ros/kinetic/setup.bash
rostopic echo pipe_test_pub

送信側

送信用ターミナルを開く。

docker exec -it topic_pipe bash

トピック送信。

. /opt/ros/kinetic/setup.bash
rostopic pub -1 pipe_test_sub std_msgs/String "test"

送信すると、 topic_pipe 実行ターミナルと受信用ターミナルで、それぞれ以下のような出力がされる。

実行ターミナル

[INFO] [1594333739.225527]: /topic_pipe_799_1594333666178I heard test

受信用ターミナル

data: "test"
---

以上。

参考資料

0 件のコメント:

コメントを投稿