如何解决如何从ROS中的一个节点戳多个节点?
我有一个用于解决常见问题的节点,并且该节点中有一个参数。当此参数更改时,如何戳其他要注意的节点?
例如:我有一项服务可以停止机器人。当我致电此服务时,其他节点应注意一些问题,例如等待,整理订单,取消计划。
首先,我尝试在节点中创建具有相同名称的服务,但是它不起作用。仅最后运行的服务有效。然后,我尝试使用参数服务。此时,其他节点应始终监听参数服务并进行检查。我不想使用此方法执行问题。最后,我尝试使用动态重新配置。不幸的是,动态重新配置仅与特定节点有关。
对于这种情况,我有另一种看法,即信号和插槽机制。但是,我不想使用QT或其他任何第三方框架。
我知道,我太微妙了:)我想学习您的方法。有什么办法吗?
谢谢!
解决方法
我要说的是,对于大多数ros中的信息通信而言,消息和回调是95%的方式。之后,与服务相比,操作具有更有效的用例/更好的集成;动态重新配置通常是设计不当的可怕选择。
ros参数服务器仅在您在节点中请求参数时才获取参数,因此,如果您在参数服务器中更改值,则默认情况下它不会获取新值。最好在启动文件中使用参数服务器,以在执行前更改运行时条件,但不强制重新编译。
最简单,最清晰的解决方案是使用主题发送任何更改,并为此在所有其他节点中使用回调。这个事件驱动的回调系统正是您所要求的:当事件发生时,执行一些操作;这就是ros设计的目的。
如果这是代码重复,则可以将冗余的回调/代码提取到单独的文件中以进行包含/导入。如果发现自己有多个同时更改的值,则可以发送自己的消息(类型)以发送捆绑的值,也可以使用多个主题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。