1、简述
Qt的事件循环和ROS订阅回调函数都可能在阻塞函数中运行,
例如:Qt的QApplication::exec()
和 ROS的rclcpp::spin()
两个阻塞函数不能在同一个线程中使用,如果使用不当,会造成Qt不处理事件或者ROS2不处理订阅的回调函数。
2、多线程
一般 QApplication::exec()
运行在主线中;
继承 QThread 后,在重载的QThread::run()函数中调用rclcpp::spin()
来避免阻塞函数的相互干扰。
ROS2节点可以同时继承 QObject 和 rclcpp::Node(public QObject, public rclcpp::Node),这样可以在节点中使用信号和槽等依赖Qt事件循环的便利方法。
示例如下:
2.1 多继承实现ROS2节点
using std::placeholders
标签:函数,rclcpp,阻塞,注意事项,节点,ROS2,Qt
From: https://blog.csdn.net/u010168781/article/details/145015509