ROS2参数声明与回调执行顺序解析
Question:

- 为什么创建参数declare_parameter ,在self.timer_callback 之后?
- 回调函数是不是要对这个创建的参数进行读取?
- 回调参数在创建参数之前,还能读到创建的参数的默认值吗?
Answer(DS):
1. 执行顺序分析
def __init__(self, name):
super().__init__(name)
self.timer = self.create_timer(2, self.timer_callback) # 1. 创建定时器
self.declare_parameter('robot_name', 'mbot') # 2. 声明参数
- 定时器创建:
create_timer()只注册了回调函数,不会立即执行。第一次回调将在2秒后触发。 - 参数声明:
declare_parameter()是同步操作,会立即在ROS2参数服务器中注册参数。
2. 回调函数能否读取参数?
可以正常读取。原因:
- 时间差:定时器首次回调发生在声明参数操作完成2秒后。
- 参数生命周期:参数在
declare_parameter()执行后已立即可用。
3. 参数读写流程
结论
- 能读到默认值:回调触发时参数早已存在,可正常读取
robot_name的默认值'mbot'。 - 定时器机制:
create_timer()仅调度未来执行,不阻塞当前初始化流程。
关键原则:ROS2中
declare_parameter()是同步立即执行的操作,而定时器回调是异步延迟执行的,只要声明在回调触发前完成(本例中必然满足),就能安全访问参数。
ROS2参数声明与回调执行顺序解析
1590

被折叠的 条评论
为什么被折叠?



