使用record_msg保存binary点云出错解决办法

news/2024/10/28 20:30:16/

1. 问题现象

使用python的record_msg包解析record包时,会出现无法保存的报错。

Traceback (most recent call last):
File “scripts/parse_record.py”, line 35, in
main(sys.argv)
File “scripts/parse_record.py”, line 32, in main
cloud_parser.parse(message,mode=“binary”)
File “/usr/local/lib/python3.8/dist-packages/record_msg/parser.py”, line 198, in parse
self.save_pointcloud_meta_to_file(pc_meta=self._parsed_data,
File “/usr/local/lib/python3.8/dist-packages/record_msg/parser.py”, line 180, in save_pointcloud_meta_to_file
pypcd.save_point_cloud_bin(pc_meta, pcd_file)
File “/usr/local/lib/python3.8/dist-packages/record_msg/pypcd.py”, line 385, in save_point_cloud_bin
point_cloud_to_fileobj(pc, f, ‘binary’)
File “/usr/local/lib/python3.8/dist-packages/record_msg/pypcd.py”, line 333, in point_cloud_to_fileobj
fileobj.write(pc.pc_data.tostring(‘C’))
TypeError: write() argument must be str, not bytes

2. 主要原因

record_msg包中的pcd保存代码,在保存binary格式时,打开文件的方式是open(fname, ‘w’),默认的写入模式是asci,但是在随后保存的时候直接写入二进制格式的点云数据,导致写入报错。

3. 解决办法

修改文件/usr/local/lib/python3.8/dist-packages/record_msg/pypcd.py

  1. 修改第384行:with open(fname, 'w') as f: —> with open(fname, 'wb') as f
  2. 注释第328行# fileobj.write(header)
  3. 在第329行和332行后分别添加一行代码:fileobj.write(header)fileobj.write(bytes(header,encoding='utf-8'))
  • 修改前:
...
327	    header = write_header(metadata)
328	    fileobj.write(header)
329	    if metadata['data'].lower() == 'ascii':
330	        fmtstr = build_ascii_fmtstr(pc)
331	        np.savetxt(fileobj, pc.pc_data, fmt=fmtstr)
332	    elif metadata['data'].lower() == 'binary':
333	        fileobj.write(pc.pc_data.tostring('C'))
...
381	def save_point_cloud_bin(pc, fname):
382	    """ Save pointcloud to fname in binary format.
383	    """
384	    with open(fname, 'w') as f:
385	        point_cloud_to_fileobj(pc, f, 'binary')
...
  • 修改后:
...
327	    header = write_header(metadata)
328	    # fileobj.write(header)
329	    if metadata['data'].lower() == 'ascii':
330	        fileobj.write(header)
331	        fmtstr = build_ascii_fmtstr(pc)
332	        np.savetxt(fileobj, pc.pc_data, fmt=fmtstr)
333	    elif metadata['data'].lower() == 'binary':
334	        fileobj.write(bytes(header,encoding='utf-8'))
335	        fileobj.write(pc.pc_data.tostring('C'))
...
383	    """
384	    with open(fname, 'wb') as f:
385	        point_cloud_to_fileobj(pc, f, 'binary')
...

REF
[1]. record_msg


http://www.ppmy.cn/news/206817.html

相关文章

家用投影仪品牌推荐,如何选择家用投影仪?

挑选高性价比投影仪,需要对比投影仪的硬件参数,再从硬件参数、价格这两个指标中挑出其中最高性价比的产品。目前市场上投影仪的需求很高,导致现在的投影仪商家品牌众多,各品牌又有各种机型的投影仪。 在这里我就先挑出三款&#x…

投影仪与计算机连接方式,电脑与接投影仪、显示器的连接和设置方法

如何通过VGA(或:HDMI、DisplayPort)接口,将电脑屏幕输出到投影仪或外接显示器上? 以下分别介绍了不同品牌显卡、不同版本的Windows系统下,如何设置外接显示设备为“复制模式”的操作方法。实际操作过程中,因为显卡驱动版本的差异,操作界面可能稍有不同。 一、Windows XP系…

投影仪哪个牌子好点?投影仪什么牌子性价比高

现在看电影不一定非要去电影院,在家里装一台投影仪也能有沉浸式体验的感觉。问题是现在投影仪牌子多,同样的价位搜出来好几款,而且属于不同的牌子,根本不知道投影仪哪个牌子好点。咱们先来看看参数,再去看投影仪牌子的…

投影仪哪家好? 家用什么牌子的投影仪最好

投影仪哪家好?虽说产品越贵,质量某种程度肯定会越高,但是在这个市场环境下,很多品牌要想突出重围,不被行业竞争”内卷”压垮,也容易涌现出很多质量好但是价格却非常“亲民”,性价比非常高的投影…

会议投影仪什么牌子好?会议投影仪什么牌子好

现在的数码市场越来越大,投影仪品牌也越来越多,鱼龙混杂,老品牌加上新兴品牌多如鸿毛,选择起来无疑是难上加难,小的家用物件选择起来倒不困难,但涉及到办公投影还是要慎重选择的,商用投影仪的质…

MATLAB 之 数据统计分析和多项式计算

这里写目录标题 一、数据统计分析1. 最大值和最小值1.1 求向量的最大值和最小值1.2 求矩阵的最大值和最小值1.3 两个向量或矩阵对于元素的比较 2. 求和与求积3. 平均值和中值4. 累加和与累乘积5. 标准差与相关系数5.1 求标准差5.2 相关系数 6. 排序 二、多项式计算1. 多项式的四…

计算机无法外接投影,电脑连不上投影仪怎么办

电脑连不上投影仪怎么办 【导读】电脑和投影仪连不上,首先我们在插上相关的数据线之后可以按快捷键Fn+F4进行连接,一般电脑的F4键是两个屏幕的形式,当然有的则是F3或者F7等其键,如果如果这样连不上那么建议先检查线路中的接口处是否有脱落,如果有则把对应的接口接好后再重…

64位投影机专业测试软件,软件分享 篇十四:利用投影仪提高生活质量 —— 自用软件推荐...

软件分享 篇十四:利用投影仪提高生活质量 —— 自用软件推荐 2019-12-30 21:08:51 8点赞 121收藏 6评论 自从家里购入了投影仪以后,电视就变成摆设了 。。。本篇分享我自己经常用的几个投影软件产品评测 篇七:NAS影片播放神器 —— 新开发版体验测试V19.0KODI这款播放器相信…