ROS2的action和subscribe怎么并行?
-
问题概述:
- 如题,或者在需要基于反馈计算控制点的时候,如何实现使用action连续执行多段控制任务?
情况描述:
- 我需要使用ros2控制ur5e机器人,用的是ros2的action,我希望能够让机器人依次到达几个目标点,但是直接写的话,由于async_send_goal函数是异步的,所以会在很快的时间内把目标点都发给服务端,就会只执行最后一个目标。
尝试1:
- 我尝试修改的方法是将目标点串成一串控制序列(就会在最开始就生成控制轨迹)并且在程序里设置一个flag表示机器人是否在移动,然后定时触发控制函数,如果机器人没动了就给他发控制序列中的下一个元素,这样的方式对于写死的轨迹是没问题的。但是如果机器人的目标位置需要在读取当前位置的基础上计算的话又会有问题,因为目标位置的生成远早于移动。
尝试2:
- 同样的,我还试过单独在这个节点里放subscriber读取机器人状态实时更新,然后尝试在async_send_goal之后就先sleep_for相应的控制时间,意图是让后续的计算总是能够基于当前的状态进行,但是sleep_for会阻塞住所有的程序(包括subscriber),这样子在移动的时候就完全不更新位置。
请问我应该怎么解决这个问题?