版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
机器人操作系统(ROS)机器人操作系统(ROS)多传感器数据同步7.3机器人操作系统(ROS)7.3.1message_filters程序库介绍message_filters是一个用于roscpp和rospy的实用程序库,类似于一个消息缓存器,当消息到达消息过滤器时,可能并不会立即输出,而是在稍后的时间点里满足一定条件下输出。message_filters库中包含有TimeSynchronizer时间同步器,它接收来自多个源的不同类型的消息,并且仅当它们在具有相同时间戳的每个源上接收到消息时才输出它们,也就是起到了一个消息同步输出的效果。
对齐传感器数据时间戳有两种策略:
①时间戳完全对齐策略(ExactTimePolicy)
②时间戳相近策略(ApproximateTimePolicy)机器人操作系统(ROS)7.3.2多传感器数据同步实验
本实验使用相机和IMU,时间同步示意图如图所示,分别定义IMU、相机两个传感器节点,分别发布/imu/angle,/usb_cam/image_raw话题,对应的发布频率分别为100Hz和30Hz。
通过TimeSynchronizer统一接收这两个话题,当两个话题的时间戳对齐时,进入callback回调函数。采用时间戳相近的对齐方式可通过设定一个时间参数,如0.1s,如果两个话题的时间戳相差在0.1s之内则认为已经对齐。
数据同步的频率以频率最低的话题为准,即/usb_cam/image_raw的30Hz频率。基于TimeSynchronizer的时间同步示意图机器人操作系统(ROS)7.3.2多传感器数据同步实验#!/usr/bin/envpython#-*-coding:utf-8-*-importrospyfromgeometry_msgs.msgimportPoseStampeddata_z=0.0defangle_publisher(): #ROS节点初始化
rospy.init_node('angle_publisher',anonymous=True) #发布话题,话题名为/imu/angle,类型为PoseStamped,队列长度为10 angle_pub=rospy.Publisher('/imu/angle',PoseStamped,queue_size=10) #设置循环的频率 rate=rospy.Rate(100) whilenotrospy.is_shutdown(): globaldata_z angle=PoseStamped() angle.header.frame_id="angle" angle.header.stamp=rospy.Time.now() data_z+=0.01 angle.pose.position.z=data_z #发布消息
angle_pub.publish(angle) rospy.loginfo("Publshangle%0.2fdeg",angle.pose.position.z) #按照循环频率延时
rate.sleep()if__name__=='__main__': try: angle_publisher() exceptrospy.ROSInterruptException: pass建立IMU发布节点(angle_pub.py):angle_pub.py的功能是模拟IMU不停地发布角度信息。它发布/imu/angle话题消息,类型为geometry_msgs/PoseStamped。机器人操作系统(ROS)7.3.2多传感器数据同步实验#!/usr/bin/envpython#-*-coding:utf-8-*-importrospyimportcv2importnumpyasnpimportmessage_filtersimportosfromos.pathimportjoinfromsensor_msgs.msgimportImagefromgeometry_msgs.msgimportPoseStampedfromcv_bridgeimportCvBridge,CvBridgeError#初始化参数frame_id=0gps_id=0#设置保存路径,nuaa-frl为本机用户名,读者需自行修改path="/home/nuaa-frl/Dataset/"img_path="/home/nuaa-frl/Dataset/imgs"bridge=CvBridge()flag=Trueglobalpath_filepath_file='/home/nuaa-frl/temp'建立数据同步节点(CAM_IMU_test.py):CAM_IMU_test.py的功能是将相机和IMU的数据进行同步采集并保存。它订阅/imu/angle话题和/usb_cam/image_raw话题,并通过时间同步器TimeSynchronizer进行数据同步采集,最终保存到本地文件中。机器人操作系统(ROS)7.3.2多传感器数据同步实验defcallback(angle,image): ifflag==True: rospy.loginfo("datarecieved!") globalframe_id globalbridge imu_yaw=angle.pose.position.z #创建data.txt,保存imu角度数据
data="{}{}\n".format(frame_id,imu_yaw) pose_file=open(join(path,'data.txt'),'a') pose_file.writelines(data) pose_file.close() #保存图片
down_img=bridge.imgmsg_to_cv2(image) image_name=join(img_path,str(frame_id)+".jpg") cv2.imwrite(image_name,down_img) frame_id+=1 rospy.loginfo("datarecorded!")deflistener(): #初始化节点
rospy.init_node('listener',anonymous=True) time=rospy.Time().now() #订阅/imu/angle话题
angle_sub=message_filters.Subscriber('/imu/angle',PoseStamped) #订阅/usb_cam/image_raw话题
image_sub=message_filters.Subscriber('/usb_cam/image_raw',Image) #如果两个话题的时间戳相差在0.1s之内则认为时间戳已经对齐
ts=message_filters.ApproximateTimeSynchronizer([angle_sub,image_sub],1000,0.1) ts.registerCallback(callback) rospy.loginfo("successfullyinitialized!") rospy.spin()if__name__=='__main__': #清空存放图片的文件夹
foriinos.listdir(img_path):#os.listdir()返回一个列表,包含有指定路径下的目录和文件的名称
path_file=os.path.join(img_path,i)#os.path.join()用于路径拼接文件路径
ifos.path.isfile(path_file):#os.path.isfile()判断某一对象(需提供绝对路径)是否为文件
os.remove(path_file)#os.remove()删除指定路径的文件
else: forfinos.listdir(path_file): path_file2=os.path.join(path_file,f) ifos.path.isfile(path_file2): os.remove(path_file2)#清空(创建)txt withopen(join(path,'data.txt'),'a')asf:#打开data.txt,如果该文件已存在,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入
f.seek(0)#从文件开头读取文件
f.truncate()#截断文件
listener() rospy.loginfo("datasuccessfullysaved!")机器人操作系统(ROS)7.3.2多传感器数据同步实验运行以下命令下载相机驱动程序(具体版本视安装的ros版本决定):$sudoapt-getinstallros-melodic-usb-cam接入相机,运行以下命令启动相机节点:$roslaunchusb_camusb_cam-test.launch安装相机驱动启动相机节点机器人操作系统(ROS)7.3.2多传感器数据同步实验运行以下命令启动IMU节点:$rosrunCAM_IMU_SYNCangle_pub.py运行如下命令查看相机和IMU节点发布频率:$rostopichz/usb_cam/image_raw$rostopichz/imu/angle启动IMU节点相机话题发布频率IMU话题发布频率机器人操作系统(ROS)7.3.2多传感器数据同步实验运行以下命令启动数据同步节点:$rosrunCAM_IMU_SYNCCAM_IMU_test.py
运行数据同步节点数据实现同步采集,图片数据保存在Dataset/imgs
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年高职太极运动实践(太极实践)试题及答案
- 2025年高职(市场营销)品牌推广综合测试卷及解析
- 2025年大学第三学年(管理学)人力资源管理实训试题及答案
- 2026年注册土木工程师岩土(专业知识考试上)试题及答案
- 高职第二学年(电气自动化技术)电气控制系统设计2026年阶段测试题及答案
- 深度解析(2026)《GBT 18426-2021橡胶或塑料涂覆织物 低温弯曲试验》
- 深度解析(2026)《GBT 17980.145-2004农药 田间药效试验准则(二) 第145部分植物生长调节剂促进果树成花与坐果试验》
- 深度解析(2026)《GBT 17980.34-2000农药 田间药效试验准则(一) 杀菌剂防治马铃薯晚疫病》
- 深度解析(2026)《GBT 17680.12-2025核电厂应急准备与响应准则 第12部分:核应急演习的策划、准备、实施与评估》
- 深度解析(2026)《GBT 6679-2003固体化工产品采样通则》
- 2024-2025学年云南省昆明市盘龙区五年级(上)期末数学试卷(含答案)
- 《中医治未病实践指南 穴位敷贴干预小儿反复呼吸道感染(编制说明)》
- 化肥生产企业应急响应预案
- 山东省济南市历下区2024-2025学年九年级上学期期中考试化学试题(含答案)
- JBT 9212-2010 无损检测 常压钢质储罐焊缝超声检测方法
- 《食品标准与法律法规》课件-第二章 我国食品标准体系
- 消毒隔离制度课件
- 改革开放简史智慧树知到课后章节答案2023年下北方工业大学
- 木薯变性淀粉生产应用课件
- 校门安全管理“十条”
- 超全QC管理流程图
评论
0/150
提交评论