https://github.com/ros2/rclpy/issues/585
`MultiThreadedExecutor:spin_until_future_complete` can block when the future is ready · Issue #585 · ros2/rclpy
Bug report Required Info: Operating System: Ubuntu 20.04 Installation type: From source Version or commit hash: Foxy DDS implementation: Fast-RTPS Client library (if applicable): rclpy Steps to rep...
github.com
참고
callback 함수를 future 객체 ( 비동기 ) 로 사용하는 예제
import rclpy
from rclpy.executors import MultiThreadedExecutor, SingleThreadedExecutor
from rclpy.node import Node
from std_msgs.msg import String
from rclpy.qos import QoSProfile, QoSDurabilityPolicy
from rclpy.task import Future
import os
latching_qos = QoSProfile(depth=1,
durability=QoSDurabilityPolicy.RMW_QOS_POLICY_DURABILITY_TRANSIENT_LOCAL)
def main():
rclpy.init()
# Set up publisher
pubnode = Node('pubnode_' + str(os.getpid()))
pub1 = pubnode.create_publisher(String, 'topic1', latching_qos)
msg1 = String()
msg1.data = "hello1"
pubnode.get_logger().info("Publishing hello1")
pub1.publish(msg1)
# Set up listener
future_msgs = Future()
subnode = Node('subnode_' + str(os.getpid()))
subnode.create_subscription(String, 'topic1', lambda msg: ([
subnode.get_logger().info("Received message on topic1"),
future_msgs.set_result(msg)
]), latching_qos)
# Start nodes
exe = MultiThreadedExecutor()
exe.add_node(pubnode)
exe.add_node(subnode)
future_msgs.add_done_callback(lambda fut: print("Future is done"))
exe.spin_until_future_complete(future_msgs)
if __name__ == '__main__':
main()
'ros2_python > Ros2 msg,srv,action,parm' 카테고리의 다른 글
Service 비교 ROS1 vs ROS2 (spin돌려야되나?) (0) | 2023.07.01 |
---|---|
Ros2 비동기적으로 spin( ) (0) | 2022.09.15 |
Ros2 Node 클래스 설명 // 노드랑 sub or pub config 값 바인딩 할때 (0) | 2022.09.07 |
python MultiThread( publisher 2개, suscriber 2개 ) (0) | 2022.09.01 |
ROS2_msg_pub_sub_multithread_python (0) | 2022.07.21 |
댓글