我试图从rviz获得x,y坐标,并将其订阅到一个主题,因此当我发布点并单击rviz中的任何自由空间时,我将获得主题/clicked_point中的x,y,z坐标,我想订阅这些点并将其打印在终端上。我的代码是主题/clicked_point的一个简单订阅者。
但当我运行代码时,我得到x,y为0.0,而不是我点击的所需坐标。
有没有人可以帮我看看我的代码。我怀疑它与点标记属性有关。
请让我知道
完整代码
#!/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()在终端中
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另一终端中
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
---提前感谢
发布于 2020-12-11 16:49:33
您必须更改回调函数中变量的赋值。看见
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类型,并且可以解包,见上图。
发布于 2020-12-12 02:08:28
这里是你的代码修改和测试,谢谢我稍后。
#!/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()https://stackoverflow.com/questions/65235489
复制相似问题