ImportError: dynamic module does not define module export function (PyInit__tf2)
这是我做的内容:
1、创建一个四轮小车URDF模型,后轮驱动,前轮转向。
2、在小车顶部添加摄像头。
3、基于ArbotiX和rviz控制小车。
4、Gazebo仿真小车运动
到第3步的时候,虽然启动launch文件可以进入rviz,但用rosnode list
查看节点信息,发现节点列表里面并没有与arbotix相关的节点。查看报错信息,显示为:
ImportError: dynamic module does not define module export function (PyInit__tf2)
然后他下面就是红色的:arbotix has died…
我的系统是ubuntu18.04,ros版本是melodic,之前安装过python3.6,系统自带python2.7。错误原因可能是由于Ros目前只支持Python2,一些主要的功能包如tf2等都是在Python2的环境下报错运行的,在Python2中导入相关包不会出现问题,但在Python3中会出错。而目前大部分用户Ubuntu习惯配置和优先使用Python3,所以会导致这类问题出现。
我的解决步骤:
1.更新源,不更新也没问题,不过下载新东西的时候最好更新一下
sudo apt update
2.安装ROS python3 依赖
sudo apt install python3-catkin-pkg-modules python3-rospkg-modules python3-empy
3.进入你的工作空间,删除原来编译生成的devel和build等文件夹,只留下src文件夹就好了,如果你之前用了其他方式解决,可能还残留有其他文件之类的,有的是用.开头的隐藏文件,用ctrl H
可以看到他们。反正我是重新建了一个workspace,只把我的package拿过来了。
catkin_make source devel/setup.bash wstool init wstool set -y src/geometry2 --git https://github.com/ros/geometry2 -v 0.6.5 wstool up rosdep install --from-paths src --ignore-src -y -r
4.完成python3配置
catkin_make --cmake-args -DCMAKE_BUILD_TYPE=Release -DPYTHON_EXECUTABLE=/usr/bin/python3 -DPYTHON_INCLUDE_DIR=/usr/include/python3.6m -DPYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.6m.so
5.source .bashrc刷新环境
现在启动launch文件:
没有报错!
arbotix节点跑起来了!