ワークスペースを新規に作成し、その中にパッケージを作り、Pythonで簡単なプログラムを作る。
ワークスペースを作る
mkdir -p ~/<ワークスペース名>/src # 記述方法
mkdir -p ~/my_ros2_ws/src
パッケージを作る
●パッケージを作成する
–node-nameパラメータで指定したpythonスクリプトの雛形が自動で作られる。
cd ~/my_ros2_ws/src
ros2 pkg create --build-type ament_python --node-name <ノード名> <パッケージ名> # 記述方法
ros2 pkg create --build-type ament_python --node-name basic_publisher_node pub_sub

プログラムを作る
●プログラムを格納するディレクトリに移動し、そこにソースコードをコピーする。
cd ~/my_ros2_ws/src/pub_sub/pub_sub
publisher_basic_node.py
"""
パブリッシャーの基本
「ROS2とPythonで作って学ぶAIロボット入門」p55
"""
import rclpy # ROS2のPythonモジュール
from rclpy.node import Node # rclpy.nodeモジュールからNodeクラスをインポート
from std_msgs.msg import String # std_msgs.msgモジュールからStringクラスをインポート
class HappyPublisher(Node): # "Happy World"とパブリッシュ並びに表示するクラス
def init(self): # コンストラクタ
super().init('happy_publisher_node')
self.pub = self.create_publisher(String, 'topic', 10) # パブリッシャの生成
self.timer = self.create_timer(1, self.timer_callback) # タイマーの生成
self.i = 10
def timer_callback(self): # コールバック関数
msg = String()
if self.i > 0:
msg.data = f'ハッピーワールド{self.i}'
else:
msg.data = f"終わり"
self.destroy_timer(self.timer)
self.pub.publish(msg)
self.get_logger().info(f'パブリッシュ: {msg.data}')
self.i -= 1
def main(args=None): # main関数
rclpy.init()
node = HappyPublisher()
try:
rclpy.spin(node)
except KeyboardInterrupt:
print('Ctrl+Cが押されました.')
finally:
node.destroy_node()
rclpy.shutdown()
subscriber_basic_node.py
サブスクライバーの基本
「ROS2とPythonで作って学ぶAIロボット入門」p57
"""
import rclpy
from rclpy.node import Node
from std_msgs.msg import String
Sring型メッセージをサブスクライブして端末に表示するだけの簡単なクラス
class HappySubscriber(Node):
def init(self): # コンストラクタ
super().init('happy_subscriber_node')
# サブスクライバの生成
self.sub = self.create_subscription(String, 'topic', self.callback, 10)
def callback(self, msg): # コールバック関数
self.get_logger().info(f'サブスクライブ: {msg.data}')
def main(args=None): # main¢p
rclpy.init()
node = HappySubscriber()
try:
rclpy.spin(node)
except KeyboardInterrupt:
print('Ctrl+Cが押されました.')
finally:
rclpy.shutdown()
●setup.pyを修正する。
パッケージを新規に作成後、追加したPythonスクリプトをsetup.pyにも追加する、最後の行の’,’を忘れないようにする。

●パッケージをビルドする
cd ~/my_ros2_ws
colcon build --symlink-install --packages-select pub_sub
–symlink-install を指定すると、ソース コードを変更しても再度コンパイルする必要はない (Python のみ、C++ にはない)。
●オーバーレイ設定ファイルを反映する —- (パッケージ作成後に一度だけ)
オーバーレイ設定ファイルの反映を~/.bashrcに設定する。
echo "source ~/<ワークスペース名>/install/setup.bash" >> ~/.bashrc # 記述方法
echo "source ~/my_ros2_ws/install/setup.bash" >> ~/.bashrc
.bashrcを反映するためにターミナルを閉じて、新規にターミナルを開く。
プログラムを実行する
●ターミナルを2つ開き、それぞれ次のコマンドを入力する。
ros2 run pub_sub basic_subscriber_node
ros2 run pub_sub basic_publisher_node
サブスクライブされない場合は、別のターミナルからコマンドを入力する
ros2 topic list