rosbag2_cpp::Writer无法析构,有偿求助!
-
各位好:
我在尝试保存点云到本地rosbag2文件中时,出现了Writer无法析构的问题,代码逻辑如下:std::unique_ptr<rosbag2_cpp::Writer> writer_ = std::make_unique<rosbag2_cpp::Writer>(); writer_->open(rosbag_dir);
.... //数据处理 writer_->writer(msg, topic, time)//写入点云数据
writer_.reset() // 此时出现 “段错误,核心已转储”
甚至是在打开文件之后立即writer_.reset()也会出现 “段错误”,即:
auto writer_ = std::make_unique<rosbag2_cpp::Writer>(); writer_->open(rosbag_dir); writer_.reset() // “段错误,核心已转储”
这可能是什么原因呢? 点云数据写入应该是正常的,本地出现了.db3文件,并且可以用rviz2可视化,但是没有出现metadata.yaml文件。
请问各位有什么排查的建议和方向吗,谢谢~ -
@2934098567 在 rosbag2_cpp::Writer无法析构,有偿求助! 中说:
metadata.yaml
这个文件可以通过命令修复db3产生,具体我忘记,之前发过文章,自行查查,至于write还没用过,暂时无法提供帮助
-
@小鱼 大佬您好,除了上述问题,又出现了一个新的问题。
我是在C++工程中调用ROS2中的一些库来实现 将点云数据保存成rosbag2文件。ROS2的安装是您提供的一键安装的方式,目前如果直接执行程序,是可以保存rosbag2文件的(但是metadata.yaml文件未生成且writer无法析构);如果用sudo 执行程序,会出现报错 [rosbag2_storage]: Unable to create class load instance: Environment variable 'AMENT_PREFIX_PATH' is not set or empty. 但是我用env命令和export命令都能查到这个环境变量。这是什么原因呢?请大佬指点~
-
@2934098567 在 rosbag2_cpp::Writer无法析构,有偿求助! 中说:
AMENT_PREFIX_PATH
因为sudo 下你要先source,这个环境变量是用于查找功能包使用的