動機
Ubuntu22.04でROS2 Humbleの勉強中に
「TypeError: Node.create_publisher() missing 1 required positional argument: 'qos_profile'
」と言われ,解決に手間取ったから.
QoSファイルとは
QoSプロファイルの実践と課題
上記で言われている通り,ROS2は通信品質を制御するためのオプション(QoSポリシー)を持っているらしい.
そのためpublishとsubscribeの時はqosプロファイルが必要となる.qosプロファイルはdepth等を指定する.(以下の例なら10)
depthはすぐに通信できなかった時、キューに溜めておける数だそう.多いほど通信が安定する?
self.pub = self.create_publisher(String, "chatter",10)
self.create_subscription(String, "chatter", self.callback,10)
QoSファイルの種類
ROS2における独自QoSプロファイルの設定方法の「ROS2で用意されているQoSプロファイル一覧」を参考にする.
使い方の例(Laser_scan)
from rclpy.qos import qos_profile_sensor_data
...
self.subscription = node.create_subscription(
LaserScan,
'scan',
self.subscription_callback,
qos_profile=qos_profile_sensor_data)
self.subscription # prevent unused variable warning