项目场景:
环境:Ubuntu22、 ros2、Qt6
问题描述
- 项目要实现ros2的数据可视化,因此需要结合qt,但是ros2通常是单线程的,如果占用主线程则会阻塞ui线程的渲染工作。那么首先想到的是创建子线程。
- 由于我对节点类进行了封装,当然希望在其中封装好子线程,所以问题出现了,在子线程中使用executor的方式执行订阅者节点,但是 控制台中使用ros2 topic info /*** 指令并不能看到有效的订阅者,这意味着订阅不成功,可是程序没有报错和任何提示。
- 同样子线程如果使用detach方式分离主线程就不行但是使用join等待虽然可以,但是那就没有意义了,因为还是阻塞了主线程。
原因分析:
猜测是由于上下文问题导致的,(透露一下)因为将子线程创建工作放到主线程就可以了。
以下是在主线程中的代码片段,在子线程中进行节点创建的运行。
rclcpp::init(0, NULL