ubuntu16 配置ROS使用Python3.7完整过程 + 踩坑记录

因为想用python3 + ros,
所以按照此处介绍的方法,得知cv_bridge是python2.7才支持的,
所以要用python3编译cv_bridge.

python版本选择

之前选了python3.8后踩坑
什么坑呢
注意到cakin配置时要用到python3.xm, 但是在网上查的说python3.8已经没有m了。。(就没有试下去)

catkin config -DPYTHON_EXECUTABLE=/usr/bin/python3 -DPYTHON_INCLUDE_DIR=/usr/include/python3.6m 
-DPYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.6m.socatkin config -DPYTHON_EXECUTABLE=/usr/bin/python3 -DPYTHON_INCLUDE_DIR=/usr/include/python3.6m 
-DPYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.6m.so

然后换成3.7,从源码安装

sudo apt update
sudo apt install build-essential zlib1g-dev libbz2-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget

wget https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tgz
tar -xzvf Python-3.7.4.tgz

cd Python-3.7.4
./configure --prefix=/usr/local/python3.7  # 此处有坑,看第6条
sudo make
sudo make install

sudo ln -s /usr/local/python3.7/bin/python3.7 /usr/bin/python3
sudo ln -s /usr/local/python3.7/bin/pip3.7 /usr/bin/pip3
sudo ln -s /usr/local/src/python37/bin/python3.7m /usr/bin/python3.7m

第2坑,没有python3.7-dev
这个直接跳过了

接着踩,编译

这几步都还好的

pip3 install rospkg
pip3 install catkin-tools
mkdir py3_ros_ws && cd py3_ros_ws
mkdir src && cd src
## 下载vision_opencv 库
git clone https://github.com/ros-perception/vision_opencv
git checkout kinetic  #选择自己的ros版本

开始编译

cd py3_ros_ws
source /opt/ros/kinetic/setup.bash
catkin config -DPYTHON_EXECUTABLE=/usr/bin/python3 -DPYTHON_INCLUDE_DIR=/usr/local/python3.7/include/python3.7m 
-DPYTHON_LIBRARY=/usr/local/python3.7/lib/libpython3.7m.a #此处有坑,后面会变成.so,看第6条
# 注意选择对应的python3版本
catkin config --install  #此处有坑,看第8条
# 编译
catkin build cv_bridge

然后就开始报错,以下是曾经遇到的坑(不分先后)

ImportError: No module named ‘_ctypes’ when using Value from module multiprocessing
解决方法:

sudo apt-get install libffi-dev

2.找不到libboost_python.so

# locate libboost_python
/usr/lib/x86_64-linux-gnu/libboost_python-py27.a
/usr/lib/x86_64-linux-gnu/libboost_python-py27.so
/usr/lib/x86_64-linux-gnu/libboost_python-py27.so.1.58.0
/usr/lib/x86_64-linux-gnu/libboost_python-py35.a
/usr/lib/x86_64-linux-gnu/libboost_python-py35.so
/usr/lib/x86_64-linux-gnu/libboost_python-py35.so.1.58.0

确实是没有叫libboost_python.so的,所以要自己做一个link
但是发现没有,这个只有python3.5的libboost_python, python3.7的去哪了?

解决方法:
安装boost,下载地址
我这里下载的是1.76的版本

注意了!ubuntu16的gcc版本是5.4,默认是不用c++11编译的,
所以需要打开 c++11 的支持, gcc5.4 下, 只打开 --std=c++11 是不能编译fiber的, 使用 --std=c++14 或者 --std=c++17 可以成功
cxxflags一定要写c++14或c++17, 不然后面用的时候会报错,很多函数都没有
参考链接

tar -xzf boost_1_76_0.tar.gz
cd boost_1_76_0
./bootstrap.sh --with-python=/usr/bin/python3 --with-python-version=3.7 --with-python-root=/usr/local/python3.7
./b2 cflags='-fPIC' cxxflags='--std-c++14' --with-python include="/usr/local/python3.7/include/python3.7m"
./b2 install

这样就安装好了,在/usr/local/lib下,
不要copy到/usr/lib/x86_64-linux-gnu下,不然用的时候会报warning还是error

cd /usr/lib/x86_64-linux-gnu
ln -s /usr/local/lib/libboost_python-py37.so libboost_python.so
ln -s /usr/local/lib/libboost_python-py37.a libboost_python.a

3.Command ‘(‘lsb_release’, ‘-a’)’ returned non-zero exit status 1.
解决方法

sudo mv /usr/bin/lsb_release /usr/bin/lsb_release_bak

4.CMake Error at /usr/local/lib/cmake/Boost-1.76.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)
CMakeLists.txt:9 (find_package)

解决方法:
参考链接

5./usr/include/c++/5/bits/c++0x_warning.h:32:2: error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support must be enabled with the -std=c++11 or -std=gnu++11 compiler options.
解决方法:
修改vision_opencv下的CmakeLists.txt,添加c++11的支持

cd vision_opencv/
find ./ -name CMakeList*

在每一个(除了python)的CmakeLists.txt里添加SET(CMAKE_CXX_FLAGS "-std=c++0x")

6.`_Py_NotImplementedStruct’ can not be used when making a shared object; recompile with -fPIC

这个很坑
为什么,因为要重新编译python3.7!
刚刚编译python时,仅用了./configure --prefix=/usr/local/python3.7,并没有fPIC模式
重新编译吧

 ./configure --prefix=/usr/local/python3 --enable-shared CFLAGS=-fPIC --enable-optimizations
 make
 make install

make完之后你会发现/usr/local/python3.7/lib下多了libpython3.7m.so(之前只有.a)
重新配置

cd py3_ros_ws
source /opt/ros/kinetic/setup.bash
catkin config -DPYTHON_EXECUTABLE=/usr/bin/python3 -DPYTHON_INCLUDE_DIR=/usr/local/python3.7/include/python3.7m 
-DPYTHON_LIBRARY=/usr/local/python3.7/lib/libpython3.7m.so 

7./usr/bin/python3: error while loading shared libraries: libpython3.7m.so.1.0: cannot open shared object file: No such file or directory

此坑是上一坑的延续版,
上一坑python重新编译后,再build就出现此问题
解决方法:
添加环境变量

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/python3.7/lib

8.error: option --install-layout not recognized

上一坑的延续
需要把catkin config --install改为

catkin config --install -DCMAKE_BUILD_TYPE=Release -DSETUPTOOLS_DEB_LAYOUT=OFF
catkin build cv_bridge

在这里插入图片描述
build成功。

使用

为避免还用之前python2.7的cv_bridge, 移除之前的(也可以不移除,这里为了测试python3的能不能用)

cd /opt/ros/kinetic/lib/python2.7/dist-packages
mv cv_bridge cv_bridge_BK

python3的cv_bridge库安装在py3_ros_ws的install文件夹,需要使用的时候将这个环境变量导入即可

source devel/setup.bash --extend

roslaunch以后提示No module named ‘cv_bridge’
找到使用cv_bridge的python文件,
第一行改为

!/usr/bin/env python3

指明使用python3

记住要添加环境变量,不然又找不到libpython3.7m.so.1.0

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/python3.7/lib

然后ros就可以使用python3啦(之前python2.7下安装的要在python3下重新安装)

参考链接:
https://medium.com/@beta_b0t/how-to-setup-ros-with-python-3-44a69ca36674
https://www.jianshu.com/p/2f86607c98d1

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 要在ROS Melodic中使用Python 3,需要安装Python 3的相关库和工具。可以按照以下步骤进行操作: 1. 安装Python 3 在Ubuntu 18.04中,Python 3已经预装。如果没有安装,可以使用以下命令安装: ``` sudo apt-get install python3 ``` 2. 安装Python 3的ROS依赖库 在ROS Melodic中,需要安装Python 3的ROS依赖库。可以使用以下命令安装: ``` sudo apt-get install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential ``` 3. 创建Python 3的ROS工作空间 可以使用以下命令创建Python 3的ROS工作空间: ``` mkdir -p ~/catkin_ws_py3/src cd ~/catkin_ws_py3/ catkin_make -DPYTHON_EXECUTABLE=/usr/bin/python3 ``` 4. 设置Python 3的ROS环境变量 可以使用以下命令设置Python 3的ROS环境变量: ``` echo "source ~/catkin_ws_py3/devel/setup.bash" >> ~/.bashrc source ~/.bashrc ``` 5. 编写Python 3的ROS程序 现在可以使用Python 3编写ROS程序了。在Python文件的开头,需要添加以下代码: ``` #!/usr/bin/env python3 ``` 这样可以确保使用Python 3来运行程序。 6. 运行Python 3的ROS程序 可以使用以下命令运行Python 3的ROS程序: ``` rosrun package_name node_name.py ``` 其中,package_name是ROS包的名称,node_name.py是Python 3的ROS节点文件名。 ### 回答2: ROS是一个机器人操作系统,已经成为许多机器人和自动化领域的标准。ROS的版本很多,其中ROS Melodic是针对Ubuntu 18.04操作系统的最新版本。与较老的ROS版本相比,ROS Melodic具有更大的兼容性和更多的功能。值得一提的是,ROS Melodic所使用Python版本已经从Python2转移到了Python3。 PythonROS中最常用的编程语言之一。在ROS Melodic中,Python3被用作默认Python解释器。这意味着你应该使用Python3来编写ROS Melodic中的程序,而不是使用Python2。使用Python3编写的ROS程序具有更好的性能和更长的生命周期,因为Python2的支持已经于2020年1月停止。 一些ROS中的常用Python库也已经升级到Python3版本,例如rospy,其中的一些API与Python2相比略有变化。所以,如果你的代码是用Python2编写的,若想迁移到ROS Melodic中,则需要相应地更改它。 总的来说,ROS Melodic的Python3支持使得编写ROS应用程序更容易、更深入,并且更适合在现代计算机系统中运行。如果你正在使用ROS Melodic,强烈建议开始使用Python3来编写你的ROS程序。 ### 回答3: ROS(机器人操作系统)是一个开源的、灵活的、分布式的机器人软件框架,用于构建机器人和其他自动化系统。它包含大量工具和库,可以简化机器人应用程序的开发、测试和部署。ROS支持多种编程语言,如C ++、Python等。ROS Melodic是ROS的一个版本,它是ROS的第十个正式版本,于2018年5月23日发行。 在ROS Melodic中,Python 3成为了官方建议的编程语言。这意味着开发者可以使用Python 3编写ROS的节点、消息、服务和其他ROS组件,而无需改变ROS的基本运行原理。在 ROS Melodic中,Python 3已经默认成为ROSPython的解释器。 此外,ROS还提供了与Python 3兼容的库和工具,如rosbag、rviz、roscore等,他们可以使用Python 3脚本通过ROS API进行控制和交互。Python 3的高级功能可以更好地支持ROS的开发和自动化,例如异步编程和并发执行。 需要注意的是,在ROS Melodic中,Python 2仍然可以被使用,但是官方建议使用Python 3以便更好地支持未来的ROS版本。此外,一些ROS社区成员和开发者可能仍然使用Python 2来编写他们的ROS组件和应用程序。 因此,当编写ROS应用程序时,需要考虑Python 2和3之间的兼容性问题。 总结来说,ROS Melodic使用Python 3作为官方建议的编程语言,提供了与Python 3兼容的库和工具,并提供了支持异步编程和并发执行的高级功能,以更好地支持ROS的开发和自动化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值