Python中的geometry_msgs.msg:发送和接收几何消息
geometry_msgs.msg是ROS中的一个包,它提供了用于传递和处理几何信息的消息类型。这个包中包含了一些非常常用的消息类型,比如Point、Quaternion、Pose等。
在Python中,我们可以使用geometry_msgs.msg来发布和订阅这些几何消息。下面是一个简单的例子,展示了如何使用geometry_msgs.msg来发送和接收几何消息。
首先,我们需要确保已经安装了ROS和相应的Python库。然后,在新建一个工作空间后,我们可以创建一个新的Python脚本来运行我们的示例代码。
import rospy
from geometry_msgs.msg import Point
def callback(data):
rospy.loginfo("Received point: x={}, y={}, z={}".format(data.x, data.y, data.z))
def listener():
rospy.init_node('listener', anonymous=True)
rospy.Subscriber("point_topic", Point, callback)
rospy.spin()
if __name__ == '__main__':
listener()
上面的代码创建了一个“listener”节点,它通过使用rospy.Subscriber函数来订阅名为"point_topic"的消息主题。这个消息主题的类型是Point,这意味着我们可以接收到一个Point类型的消息。
在回调函数中,我们通过data.x、data.y和data.z来访问收到的点的坐标,并使用rospy.loginfo函数打印出来。
接下来,我们可以创建一个新的Python脚本来发布一个Point类型的消息。
import rospy
from geometry_msgs.msg import Point
def talker():
rospy.init_node('talker', anonymous=True)
pub = rospy.Publisher('point_topic', Point, queue_size=10)
rate = rospy.Rate(10) # 10hz
while not rospy.is_shutdown():
point = Point()
point.x = 1.0
point.y = 2.0
point.z = 3.0
pub.publish(point)
rate.sleep()
if __name__ == '__main__':
try:
talker()
except rospy.ROSInterruptException:
pass
上面的代码创建了一个“talker”节点,它通过使用rospy.Publisher函数来发布一个名为"point_topic"的消息主题。这个消息主题的类型也是Point。
在主循环中,我们创建了一个Point类型的对象,并将其x、y和z坐标设置为1.0、2.0和3.0。然后,使用pub.publish函数将这个点发布到"point_topic"的消息主题上。
最后,我们需要在终端上运行这两个脚本。首先,在一个终端上运行listener.py脚本:
$ python listener.py
然后,在另一个终端上运行talker.py脚本:
$ python talker.py
你会看到在listener.py的终端上输出了接收到的点的坐标:
[INFO] [1604301364.255061]: Received point: x=1.0, y=2.0, z=3.0 [INFO] [1604301364.355123]: Received point: x=1.0, y=2.0, z=3.0 ...
这就是一个简单的使用geometry_msgs.msg来发送和接收几何消息的例子。在实际应用中,你可以根据自己的需要来定义和使用更复杂的几何消息类型。通过使用这些消息类型,你可以很方便地在ROS系统中传递和处理各种几何信息。
