python - geometry_msgs/Pose - 数据访问
问题描述
我是 ROS 新手,遇到了一个非常简单的问题。我有一个关于 rostopic 的数据被发布为 geometry_msgs/Pose。假设我想将位置数据(比如 x)作为一个数字并将其存储到一个变量中。我正在使用python。有人可以建议正确的语法来准确访问这些特定数据吗?任何其他信息也值得赞赏,尤其是在我可以找到访问所有这些不同类型的消息格式的语法的地方。
更新:我遇到的问题是,如果我将整个数据保存为变量,我可以使用“。”访问它。符号。考虑到数据是geometry_msgs/Pos,我一开始写的回调函数是
def getcallback(self,data):
var = data.position
self.var = data
后来,我尝试使用
self.var.x
它超出了索引,说 Point 没有属性 x。
但是在挣扎了一段时间后,我编辑了回调函数
def getcallback(self,data):
var = data
self.var = data
现在,我可以使用访问变量
self.var.position.x
我不确定为什么一个工作而不是另一个工作,并且想知道是否有人可以解释。
编辑:匆忙中,我认为这里的问题完全不清楚。我知道发布和订阅节点和 rostopics。我已经用一些更新重写了这个问题,以帮助澄清。
解决方案
将数据存储在 somevariable_x
中的一种简单方法如下:
- 创建文件
listener.py
- 使其可执行:
chmod 770 listener.py
- 将此代码粘贴到其中:
#!/usr/bin/env python 导入 rospy 从 geometry_msgs.msg 导入姿势 def 回调(数据): variable_x = data.position.x rospy.loginfo(rospy.get_caller_id() + '我听说 %f', variable_x) 定义监听器(): rospy.init_node('listener', 匿名=True) rospy.Subscriber('chatter', 姿势, 回调) # spin() 只是阻止 python 退出,直到该节点停止 rospy.spin() 如果 __name__ == '__main__': 监听器()
- 运行应用程序:
./listener.py
- 通过输入 bash 来测试它:
rostopic pub /chatter geometry_msgs/Pose “位置: x: 3.1415 y: 0.0 z: 0.0 方向: x: 0.0 y: 0.0 z: 0.0 w: 0.0"
要回答您的其他问题:您可以从docs.ros.org获取有关消息定义的信息。由于您的问题非常基础,请先浏览 ROS 的整个教程部分。在您的情况下,我刚刚调整了侦听器示例。
推荐阅读
- sql - 在sql中使用union all时如何在最后显示空值
- java - 具有最大值的参数的java构造函数
- python - 通过脚本从 GitLab 克隆一组 repos
- google-apps-script - 在 Google Apps 脚本中获取并创建新的命名版本的 Google 电子表格
- c - 使用堆栈从数组中删除最后输入的偶数
- ios - 如何在 iPhone X 及更新版本的 IOS Safari 上隐藏 URL 栏?
- python-3.x - 打印语句语音标记导致语法错误
- c# - 使用 async void 返回串行通信
- javascript - 获取大数的一致性 javascript RSA 算法
- amazon-web-services - 禁止:ecs-task 到 apigateway websocket 连接