ROS包抛出std::logic_error终止,Jetson TX2运行失败X86正常如何排查?
问题排查方案
这个报错的根本原因是代码中尝试用空指针初始化std::string,不同架构下的字符串处理、编译逻辑、依赖库实现差异会导致x86平台正常运行的代码在ARM平台触发异常,可按以下步骤逐一排查:
- 检查launch参数配置
所有传入local_planner_node的字符串类型参数必须显式赋值,哪怕是填空字符串""。x86平台下未定义的字符串参数会默认初始化为空字符串,而ARM平台下未定义的字符串参数会返回空指针,直接触发该异常。你可以逐一核对launch文件中所有<param>、<arg>标签的字符串类型参数,确保没有遗漏赋值的项。 - 重新指定编译标准编译工作空间
PX4-Avoidance的部分代码在ARM64架构下需要C++17及以上标准编译,否则字符串处理的底层实现会有兼容问题,可清理工作空间后重新编译:cd ~/catkin_ws rm -rf build devel catkin_make -DCMAKE_CXX_FLAGS="-std=c++17 -O2" - 核对libstdc++版本
该异常和C标准库的字符串实现直接相关,可分别在两台设备上运行如下命令查看libstdc6的版本:
如果Jetson TX2上的版本低于英特尔笔记本上的版本,可执行如下命令升级:dpkg -l | grep libstdc++6sudo apt update sudo apt install --only-upgrade libstdc++6 - 定位具体出错代码行
如果上述操作都无法解决问题,可用gdb运行节点打印崩溃调用栈,直接定位到传入空指针的代码位置:
节点崩溃后在gdb交互界面输入rosrun --prefix 'gdb -ex run --args' local_planner local_planner_nodebt即可打印完整调用栈。
内容的提问来源于stack exchange,提问作者aamir
相关产品推荐
相关产品推荐

