文章基于python3.6和ros-kinetic 因为代码中需要在python3环境下使用geometry库,所以想办法解决ros的python3支持问题
在python3环境下,直接使用tf会有如下报错(rospy可正常使用):
>>> import tf
Traceback (most recent call last):
File "" , line 1, in <module>
File "/opt/ros/kinetic/lib/python2.7/dist-packages/tf/__init__.py", line 28, in <module>
from tf2_ros import TransformException as Exception, ConnectivityException, LookupException, ExtrapolationException
File "/opt/ros/kinetic/lib/python2.7/dist-packages/tf2_ros/__init__.py", line 38, in <module>
from tf2_py import *
File "/opt/ros/kinetic/lib/python2.7/dist-packages/tf2_py/__init__.py", line 38, in <module>
from ._tf2 import *
ImportError: dynamic module does not define module export function (PyInit__tf2)
冲突的原因是
当前ROS是只支持Python2.7的。Python3的支持在ROS的计划中,详细的可以看[这里](https://github.com/ros-infrastructure/rep/blob/rep151/rep-0151.rst)。简单说来就是要到2020年ROS的N版本才能完全支持Python3。
首先要了解为什么ROS不能支持Python3.对于纯的Python代码同时支持Python3和Python2.7是比较容易的,基本上ROS的代码也都是支持的。问题在于包含了C++或者C的那部分Python代码。Python2.7和Python3的c module代码相差很大。一次只能编译其中的一种版本。而且很多module没有做好Python3的支持。在Python3环境下也无法编译。这就是ROS无法支持Python3的原因。目前ROS的核心包都是支持用Python3从源码编译的。但是官方并没有发布Python3的软件包。所以想要使用的话要自己编译。
https://blog.csdn.net/liam_dapaitou/article/details/107656486 ros python3 tf 配置
https://community.bwbot.org/topic/499/%E5%9C%A8ros%E4%B8%AD%E4%BD%BF%E7%94%A8python3 在ROS中使用Python3
https://www.miguelalonsojr.com/blog/robotics/ros/python3/2019/08/20/ros-melodic-python-3-build.html Building ROS Melodic with Python3 support
https://www.pythonheidong.com/blog/article/371387/13de9a6b720aebcceabb/ ros使用python3编译cv_bridge、tf等packages
https://www.cnblogs.com/shepherd2015/p/11257356.html [源码安装ROS Melodic Python3 指南 (转) + 安装记录]
http://wiki.ros.org/cn/ROS/Tutorials/InstallingandConfiguringROSEnvironment ros官方安装教程
1使用python3编译所需要的软件包,在引用软件包时从python3包中引用
2 利用python3源码编译(比较坑,我在其中下载的地方被卡住了,一直没有成功,如果有大佬能告诉原因最好了)
创建虚拟环境
conda create --name gndnet -y
conda activate gndnet
其中gndnet为自己虚拟环境的名字
安装需要使用的包
conda install python=3.6 pip -y
conda install -c anaconda make
pip install numpy
pip install empy
pip install pyyaml
sudo apt-get install python-catkin-tools python3-dev python3-catkin-pkg-modules python3-numpy
新建一个工作空间(随便取名,这里取名为tf),用来编译geometry
、geometry2
两个包。
mkdir -p tf/src`
cd tf/src`
git clone https://github.com/ros/geometry
git clone https://github.com/ros/geometry2#下载两个包
export ROS_PYTHON_VERSION=3`#注意这里,如果安装的ros不是利用python3编译的,加入这句话
cd ..`
catkin_make`
成功后,每次需要使用tf包时
在终端输入
source ···/tf/devel/setup.bash
(···为你的文件夹的位置)
为了方便使用,你同样可以把这句话加入到bashrc文件中
问题1
/opt/ros/kinetic/include/ros/time.h:58:50: fatal error: boost/math/special_functions/round.hpp: 没有那个文件或目录
compilation terminated.
原因 boost崩了 考虑重装下boost
问题二 编译catkin_make的时候报错
`CMake Error at /usr/local/lib/cmake/Boost-1.77.0/BoostConfig.cmake:240 (if):
if given arguments:
`CMake Error at /usr/local/lib/cmake/Boost-1.77.0/BoostConfig.cmake:240 (if):
if given arguments:
"ALL" "IN_LIST" "Boost_FIND_COMPONENTS"
Unknown arguments specified
Call Stack (most recent call first):
/usr/share/cmake-3.5/Modules/FindBoost.cmake:245 (find_package)
geometry2/tf2_msgs/CMakeLists.txt:5 (find_package)`
1、这个错误的主要原因是:CMakeLists.txt里cmake_minimum_required指定的cmake版本过低造成的
2、解决办法是:把cmake_minimum_required修改成当前系统安装的cmake版本号就可以了
问题三
`CMake Error at geometry2/tf2/CMakeLists.txt:4 (find_package):
By not providing "Findconsole_bridge.cmake" in CMAKE_MODULE_PATH this
project has asked CMake to find a package configuration file provided by
"console_bridge", but CMake did not find one.
Could not find a package configuration file provided by "console_bridge"
with any of the following names:
console_bridgeConfig.cmake
console_bridge-config.cmake`
解决办法:
安装console_bridge,命令如下:
git clone https://github.com/ros/console_bridge
mkdir build
cd build
cmake ..
sudo make install
修改CMakeLists.txt文件
删除第四行:find_package(catkin REQUIRED COMPONENTS rosconsole sensor_msgs),添加语句:
set(console_bridge_DIR /home/ouc/install/console_bridge)
1
后面是你安装的console_bridge所在路径。
————————————————
版权声明:本文为CSDN博主「いしょ」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_40224537/article/details/107184509
问题四
`C`Make Error at /usr/share/cmake-3.5/Modules/FindPackageHandleStandardArgs.cmake:148 (message):`
`Could NOT find PythonLibs (missing: PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS)`
`(Required is at least version "2")`
`Call Stack (most recent call first):`
`/usr/share/cmake-3.5/Modules/FindPackageHandleStandardArgs.cmake:388 (_FPHSA_FAILURE_MESSAGE)`
`/usr/share/cmake-3.5/Modules/FindPythonLibs.cmake:265 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)`
geometry2/tf2_py/CMakeLists.txt:13 (find_package)`
看内容 改一下python版本为3就好
在终端输入
export ROS_PYTHON_VERSION=3