訳あって kinetic でごにょごにょしなければいけなくなったので素振り。 パッケージ作成から実行までを試す。
前提
- OS: Windows 10 Pro
- Docker: Docker version 19.03.8, build afacb8b
開発環境
Docker の公式イメージ ros:kinetic-ros-base
を使う。
空の catkin ワークスペース作成
パッケージ作成
パッケージのひな形生成
パッケージ情報設定
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>
スクリプト作成
スクリプトフォルダ作成
スクリプト作成
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()
ノードビルド
動作確認
roscore 起動
roscore 用ターミナルを開く
roscore 起動
topic_pipe 起動
topic_pipe 用ターミナルを開く
unruffled_shamir
: 先ほど起動した ros コンテナの名前
topic_pipe 起動
topic 送受信確認
受信側
受信用ターミナルを開く。
トピック待ち受け。
送信側
送信用ターミナルを開く。
トピック送信。
送信すると、 topic_pipe
実行ターミナルと受信用ターミナルで、それぞれ以下のような出力がされる。
実行ターミナル
受信用ターミナル
以上。
参考資料
- ja/ROS/Tutorials/WritingPublisherSubscriber(python) - ROS Wiki
- catkin/Tutorials/create_a_workspace - ROS Wiki
- ja/ROS/Tutorials/CreatingPackage - ROS Wiki
- ja/ROS/Tutorials/BuildingPackages - ROS Wiki
- ja/ROS/Tutorials/ExaminingPublisherSubscriber - ROS Wiki
- ros - Docker Hub
- Python でUTF-8, shift_jis, euc_jpなど日本語を使う方法