sensor_msgs
是 ROS 中用于处理各种传感器数据的标准消息类型集合。它包括用于不同类型传感器的消息定义,如图像、激光雷达、IMU(惯性测量单元)等。下面将分别介绍这些常用传感器的 sensor_msgs
用法。
sensor_msgs/Image
发布摄像头数据import rospy
from sensor_msgs.msg import Image
import cv2
from cv_bridge import CvBridge
def camera_publisher():
rospy.init_node('camera_publisher', anonymous=True)
image_pub = rospy.Publisher('/camera/image_raw', Image, queue_size=10)
bridge = CvBridge()
rate = rospy.Rate(10) # 10 Hz
while not rospy.is_shutdown():
# 读取摄像头数据
frame = cv2.imread("path_to_image.jpg", cv2.IMREAD_COLOR)
image_message = bridge.cv2_to_imgmsg(frame, encoding="bgr8")
# 发布图像消息
image_pub.publish(image_message)
rate.sleep()
sensor_msgs/LaserScan
发布激光雷达数据import rospy
from sensor_msgs.msg import LaserScan
def laser_publisher():
rospy.init_node('laser_publisher', anonymous=True)
laser_pub = rospy.Publisher('/scan', LaserScan, queue_size=50)
rate = rospy.Rate(1) # 1 Hz
while not rospy.is_shutdown():
# 创建 LaserScan 消息
scan = LaserScan()
scan.header.stamp = rospy.Time.now()
scan.header.frame_id = "laser_frame"
scan.angle_min = -1.57
scan.angle_max = 1.57
scan.angle_increment = 3.14 / 360
scan.time_increment = (1 / 40) / 360
scan.range_min = 0.0
scan.range_max = 100.0
# 假设的激光雷达数据
scan.ranges = [1.0] * 360 # 360个测量值
# 发布激光雷达消息
laser_pub.publish(scan)
rate.sleep()
sensor_msgs/Imu
发布IMU数据import rospy
from sensor_msgs.msg import Imu
def imu_publisher():
rospy.init_node('imu_publisher', anonymous=True)
imu_pub = rospy.Publisher('/imu/data', Imu, queue_size=10)
rate = rospy.Rate(10) # 10 Hz
while not rospy.is_shutdown():
# 创建 Imu 消息
imu = Imu()
imu.header.stamp = rospy.Time.now()
imu.header.frame_id = "imu_frame"
# 假设的IMU数据
imu.angular_velocity.x = 0.1
imu.angular_velocity.y = 0.1
imu.angular_velocity.z = 0.1
imu.linear_acceleration.x = 0.1
imu.linear_acceleration.y = 0.1
imu.linear_acceleration.z = 0.1
# 发布IMU消息
imu_pub.publish(imu)
rate.sleep()
将上述代码保存为不同的 Python 脚本,并将其放在你的 ROS 包中。确保脚本可执行,然后使用 rosrun
运行它们。
rosrun your_package_name your_script.py
这些脚本分别演示了如何使用 sensor_msgs
发布不同类型的传感器数据。在实际应用中,这些数据通常来自真实的传感器而不是静态值。例如,你可能需要从摄像头硬件接口获取实时图像数据,或者从激光雷达硬件读取距离数据。
#include <sensor_msgs/PointCloud.h> #include <sensor_msgs/PointCloud2.h>
#include <sensor_msgs/Imu.h>这个ROS头文件包含的功能有哪些?
【OpenCV ROS】接收压缩图像话题并显示
遍历激光雷达数据