首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ROS: Rviz -发布点-订阅者-获取x,y坐标

ROS: Rviz -发布点-订阅者-获取x,y坐标
EN

Stack Overflow用户
提问于 2020-12-10 21:30:07
回答 2查看 1.3K关注 0票数 0

我试图从rviz获得x,y坐标,并将其订阅到一个主题,因此当我发布点并单击rviz中的任何自由空间时,我将获得主题/clicked_point中的x,y,z坐标,我想订阅这些点并将其打印在终端上。我的代码是主题/clicked_point的一个简单订阅者。

但当我运行代码时,我得到x,y为0.0,而不是我点击的所需坐标。

有没有人可以帮我看看我的代码。我怀疑它与点标记属性有关。

请让我知道

完整代码

代码语言:javascript
复制
 #!/usr/bin/env python
import rospy
from geometry_msgs.msg import PointStamped
import tf
import random
import numpy as np

global x,y,z
x = 0.0
y = 0.0
z = 0.0

def callback(msg): 
    point = PointStamped()
    point.header.stamp = rospy.Time.now()
    point.header.frame_id = "/map"
    point.point.x = x 
    point.point.y = y 
    point.point.z = z
    rospy.loginfo("coordinates:x=%f y=%f" %(x,y))

def listener():
    rospy.init_node('goal_publisher', anonymous=True)
    rospy.point_pub = rospy.Subscriber('/clicked_point', PointStamped, callback)
    rospy.spin()

if __name__ == '__main__':
    listener()

在终端中

代码语言:javascript
复制
varun-flox@varunflox:~/Desktop$ ./ros_localisation_subscriber.py 
[INFO] [1607606216.839750]: coordinates:x=0.000000 y=0.000000
[INFO] [1607606221.911950]: coordinates:x=0.000000 y=0.000000

在具有rostopic echo /clicked_point另一终端中

代码语言:javascript
复制
varun-flox@varunflox:~$ rostopic echo /clicked_point 
header: 
  seq: 31
  stamp: 
    secs: 1607606021
    nsecs: 774185596
  frame_id: "map"
point: 
  x: -4.99073648453
  y: -4.93864154816
  z: -0.00288152694702
---
header: 
  seq: 32
  stamp: 
    secs: 1607606216
    nsecs: 838675541
  frame_id: "map"
point: 
  x: -4.98981332779
  y: -4.96337604523
  z: -0.0113334655762
---

提前感谢

EN

回答 2

Stack Overflow用户

发布于 2020-12-11 16:49:33

您必须更改回调函数中变量的赋值。看见

代码语言:javascript
复制
def callback(msg): 
    x = msg.point.x
    y = msg.point.y
    z = msg.point.z
    rospy.loginfo("coordinates:x=%f y=%f" %(x,y))

PointStamped解释作为回调函数参数的msg变量包装了Fir msg类型,并且可以解包,见上图。

票数 0
EN

Stack Overflow用户

发布于 2020-12-12 02:08:28

这里是你的代码修改和测试,谢谢我稍后。

代码语言:javascript
复制
#!/usr/bin/env python
import rospy
from geometry_msgs.msg import PointStamped

global x,y,z
def callback(msg): 
    rospy.loginfo("coordinates:x=%f y=%f" %(msg.point.x,msg.point.y))

def listener():
    rospy.init_node('goal_publisher', anonymous=True)
    rospy.point_pub = rospy.Subscriber('/clicked_point', PointStamped, callback)
    rospy.spin()

if __name__ == '__main__':
    listener()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65235489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档