我已经为这个问题纠结了一段时间了。我的问题非常具体,所以请不要在ROS教程页面上发布带有“的链接!注意:“一段介绍如何传递可变对象的段落(除非您向我展示我遗漏的内容)。我想知道是否有人能够在SMACH状态下正确地来回传递可变对象,而不会遇到任何错误。在
我写了一个特别简单和无用的程序来解释我要做什么。我可以发布这个例子的代码(不幸的是,对于那些曾经使用过SMACH的人来说,这是一段很长的代码)。所以现在我将尽力解释它,并在示例的图像中包含一个[link]。我创建了两个python脚本。每个脚本包含一个类和该类的对象(使用一些基本方法)。我在每个脚本中创建一个发布者和订阅者,其中一个脚本发送消息(对话),而另一个脚本监听(听到)消息。最后,说话者将两个FSM标记为关闭。如果有人想要完整的代码示例,请让我知道。。。在
下面显示smach状态和转换的代码段:
# begin sm
with sm:
smach.StateMachine.add('LOAD', loadFSM(),
transitions={'LOADED':'SENDMSG'})
smach.StateMachine.add('SENDMSG', startMSG(),
transitions={'SENT':'SENDMSG',
'ENDING':'END'})
smach.StateMachine.add('END', stopFSM(),
transitions={'DONE':'complete',
'ERRED':'incomplete'})
下面显示smach状态(loadFSM)的代码段:
^{pr2}$我收到的错误(使用Ubuntu14.04、RosIndigo和Python2.7,不太确定,但我相信同样的错误也会发生在dynamic中)只发生在状态转换期间,当然内省服务器不工作(不显示状态转换)。错误是:
1线程sm\u中出现异常troViewer:状态\u发布者:“
2无法执行转换回调:Traceback(最近的调用
最后):文件
“/opt/ros/indigo/lib/python2.7/dist-packages/smach/容器.py“,
175号线,呼叫过渡区(self.user数据,
自我激活状态(),*参数)“
我还需要补充的是,我的简单的有限状态机示例实际上可以成功地工作并完成,甚至我的项目的2个更大的fsm也完成了。然而,当有限状态机有许多状态时,就像我的项目一样,有时我的模拟失败了。我想从任何广泛使用SMACH的人那里知道,他们是否认为这些错误是原因,或者他们知道我没有正确地在状态之间传递对象。在
提前谢谢你
提兹
我以前也有过类似的问题。如果我没记错,
userdata
只能处理基本类型(int、string、list、dict,…)而不能处理任意对象。 我通过将对象传递给状态类的构造函数来解决这个问题,而不是使用userdata,例如:然后初始化如下:
^{pr2}$它并不是很好,因为它绕过了userdata的概念,但它是有效的。在
相关问题 更多 >
编程相关推荐