欢迎访问宙启技术站
智能推送

Python中的geometry_msgs.msg:发送和接收几何消息

发布时间:2024-01-05 10:46:23

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系统中传递和处理各种几何信息。