Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

ROSBOARDがQoS設定由来のエラーでROS2で使えないときの対処

このエラー対応は、恐らく近い将来本体にマージされます。

実際のところ

ROS2 humble用のプロジェクトでもROSBOARDを使ってみようとしたところ、以下のようなエラーが。

[INFO] [XXX.YYY] [rosboard_node]: Subscribing to /camera/camera/color/camera_info

>>> [rcutils|error_handling.c:108] rcutils_set_error_state()
This error state is being overwritten:

'Unknown QoS history policy, at ./src/qos.cpp:61'

with this new error message:

'create_publisher() failed setting topic QoS, at ./src/subscription.cpp:221'

rcutils_reset_error() should be called after error handling to avoid this.<<<

エラー形式からしQoSの問題のようです。
自前のスクリプトなら兎も角、Realsenseのような複雑なモンのコードなど書き換えるのは無謀です。

というわけで、rosboard本体の方で対応することに。

#...
elif os.environ.get("ROS_VERSION") == "2":
    import rosboard.rospy2 as rospy # ROS2
    # 15行目
    # from rclpy.qos import QoSProfile, QoSReliabilityPolicy, QoSDurabilityPolicy
    # 以下の様にする
    from rclpy.qos import HistoryPolicy, QoSProfile, QoSReliabilityPolicy, QoSDurabilityPolicy

134行目あたり

#...
            if rospy.__name__ == "rospy2":
                topic_info = rospy._node.get_publishers_info_by_topic(topic_name=topic_name)
                if len(topic_info):
                    ## 以下の二行を追加
                    if topic_info[0].qos_profile.history == HistoryPolicy.UNKNOWN:
                        topic_info[0].qos_profile.history = HistoryPolicy.KEEP_LAST
                    return topic_info[0].qos_profile

以上の状態で

$ cd ~/
$ colcon build --packages-select rosboard