外观
踩坑Robotics Stack Exchange2014-06-11
Roby 状态机如何按端口条件切换状态
本文由 AI 根据公开内容整理,可能有误,请以原文为准:How to define conditions for state-machines in roby?(Robotics Stack Exchange #3049)
状态:已解决
问题
提问者想在 AUV 开始 pipeline-tracking 前检查当前航向,确保对准正确管线,并希望对状态机中的 forward pipe_detector.align_auv_event, success_event 增加端口条件。
环境
Linux / ROS 机器人软件与控制通用开发环境
解决办法
- 不建议在状态机里直接对
forward加条件;原文称旧版曾有此能力,但因复杂度高已移除。 - 创建专用
Syskit::Composition,加入PipelineDetector::Task,定义expected_heading参数和heading_within_tolerance?判断。 - 在
task_script中创建相关端口 reader,等待detector.align_auv_event,用read_new读取数据并检查data.yaw是否在容差内。 - 条件满足则
emit :success,否则emit :false_positive;也可在单独 action 中把同样的task_script挂到 detector 任务上。
原问题作者:Matthias Goldhoorn;采纳答案作者:sylvain.joyeux。原内容依 CC BY-SA 4.0 授权,本页摘要同样依 CC BY-SA 4.0 授权。
来源
本页事实对应的公开页面,以原文为准。