python中使用ROS的注意点

python2.7和python3的冲突问题

之前在ROS安装和编译等常见问题.md提到了python3.8和python2.7冲突的问题,那次是不同文件可以分别用不同版本的python运行,但是如果同一个文件里用到了python的两个版本,那就不好解决了。

比如一个文件需要用到python3的函数,然后发现import tf报错,没法用tf了,因为tf2_ros是针对python2编译的,为了适应python3 (melodic),进行如下步骤:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
sudo apt update
sudo apt install python3-catkin-pkg-modules python3-rospkg-modules python3-empy
Prepare catkin workspace

mkdir -p ~/catkin_ws/src; cd ~/catkin_ws
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
Finally compile for Python 3

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
source devel/setup.bash

让python支持中文注释

在源文件的初始部分,而且必须放在第一行,添加#coding=utf-8 或者 #coding=gbk# -- coding: gb2312 --

参考:
ImportError: dynamic module does not define module export function (PyInit__tf2)