You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决ROS环境下运行Adafruit GPS时的PyInit__tf2报错

报错原因

这个错误本质是Python版本不匹配导致的:你使用的ROS Melodic版本默认适配Python2,官方源安装的tf2相关依赖都是基于Python2编译的动态库,你当前运行ROS节点时默认调用了Python3解释器,Python3无法识别Python2编译的动态链接库,因此抛出了ImportError: dynamic module does not define module export function (PyInit__tf2)的错误。

解决方案

方案一:临时指定Python2运行节点

直接运行如下命令即可启动节点:

python2 /home/bot/catkin_ws/src/nmea_navsat_driver/scripts/nmea_serial_driver _port:=/dev/ttyUSB0 _baud:=115200

方案二:永久修改脚本默认解释器

修改nmea_serial_driver脚本的首行shebang配置:

  1. 打开脚本文件:nano /home/bot/catkin_ws/src/nmea_navsat_driver/scripts/nmea_serial_driver
  2. 将第一行的#!/usr/bin/env python修改为#!/usr/bin/env python2
  3. 保存退出后,即可正常用rosrun命令启动节点:
rosrun nmea_navsat_driver nmea_serial_driver _port:=/dev/ttyUSB0 _baud:=115200

方案三:编译Python3版本的tf2依赖

如果你确实需要使用Python3运行该节点,可手动编译适配Python3的tf2相关功能包:

  • 先安装Python3依赖:
sudo apt install python3-catkin-pkg-modules python3-rospkg-modules python3-empy
  • 进入工作空间根目录,指定Python3参数重新编译:
catkin_make -DPYTHON_EXECUTABLE=/usr/bin/python3 -DPYTHON_INCLUDE_DIR=/usr/include/python3.6m -DPYTHON_LIBRARY=/usr/lib/aarch64-linux-gnu/libpython3.6m.so
  • 编译完成后重新source工作空间配置:source devel/setup.bash
补充注意事项

如果运行节点时出现串口权限报错,可执行如下命令将当前用户加入串口权限组,重启后生效:

sudo usermod -aG dialout $USER

内容的提问来源于stack exchange,提问作者BlueSky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 12:39:02