cgm@cgm:~/文档/rgbd_benchmark_tools$ /bin/python /home/cgm/文档/rgbd_benchmark_tools/src/rgbd_benchmark_tools/evaluate_ate.py
Traceback (most recent call last):
File "/home/cgm/文档/rgbd_benchmark_tools/src/rgbd_benchmark_tools/evaluate_ate.py", line 43, in <module>
import numpy
File "/home/cgm/anaconda3/envs/yolov8/lib/python3.8/site-packages/numpy/__init__.py", line 130
raise ImportError(msg) from e
^
SyntaxError: invalid syntax
cgm@cgm:~/文档/rgbd_benchmark_tools$ echo $PYTHONPATH
/opt/ros/noetic/lib/python3/dist-packages:/home/cgm/anaconda3/envs/yolov8/lib/python3.8/site-packages
为什么只有两个环境
怎么不使用anaconda3/envs/yolov8这个环境,我是在ubuntu的vscode
我之前一直使用是naconda3/envs/yolov8这个环境,.bashrc文件里:export PYTHONPATH=$PYTHONPATH:/home/cgm/anaconda3/envs/yolov8/lib/python3.8/site-packages
感谢您提供$PYTHONPATH
的信息。问题的原因已经明了了。$PYTHONPATH
环境变量指定了Python模块搜索路径,它包含了两个目录:
/opt/ros/noetic/lib/python3/dist-packages
:这是ROS (Robot Operating System) 的Python库路径。/home/cgm/anaconda3/envs/yolov8/lib/python3.8/site-packages
:这是您之前提到的Anaconda环境的Python 3.8库路径。
由于/home/cgm/anaconda3/envs/yolov8/lib/python3.8/site-packages
在$PYTHONPATH
中,导致Python 2环境无法完全隔离,因为它仍然可以访问Anaconda环境中的Python 3库。
为了解决这个问题,您可以在运行Python 2脚本之前,暂时从$PYTHONPATH
中移除Anaconda环境的路径。您可以使用以下命令来执行这一操作:
方法一:
export PYTHONPATH=/opt/ros/noetic/lib/python3/dist-packages
然后再运行Python 2脚本:
/bin/python /home/cgm/文档/rgbd_benchmark_tools/src/rgbd_benchmark_tools/evaluate_ate.py
这将确保Python 2环境不会受到Anaconda环境的影响,因为它不再搜索Anaconda环境的Python 3库。
请注意,这只是一个临时解决方案,每次在Python 2环境中运行脚本之前都需要手动执行。如果您想要更持久的解决方案,可能需要更深入地检查Anaconda环境和系统设置,以确保它们不会干扰Python 2环境。
方法二:
如果Anaconda环境的路径出现在$PATH中,您可以通过编辑.bashrc文件或.zshrc文件来移除它。找到类似于以下行的内容,并将其删除或注释掉:
export PATH="/home/cgm/anaconda3/envs/yolov8/bin:$PATH"
我的.bashrc文件
export PYTHONPATH=$PYTHONPATH:/home/cgm/anaconda3/envs/yolov8/lib/python3.8/site-packages:
我最后把.bashrc文件里的这行注释了
@cgm:~$ source .bashrc
cgm@cgm:~$ echo $PYTHONPATH
/opt/ros/noetic/lib/python3/dist-packages
现在就没有这个环境了:/home/cgm/anaconda3/envs/yolov8/lib/python3.8/site-packages
注意:
运行evaluate_ate.py时
cgm@cgm:~/文档/rgbd_benchmark_tools$ /bin/python /home/cgm/文档/rgbd_benchmark_tools/src/rgbd_benchmark_tools/evaluate_ate.py
usage: evaluate_ate.py [-h] [--offset OFFSET] [--scale SCALE]
[--max_difference MAX_DIFFERENCE] [--save SAVE]
[--save_associations SAVE_ASSOCIATIONS] [--plot PLOT]
[--verbose]
first_file second_file
evaluate_ate.py: error: too few arguments
完整的运行代码需要first_file真值轨迹和second_file估计值的轨迹
我创建了一个python2的conda环境
conda create -n python2env python=2.7
conda activate python2env
conda info --envs
pip install matplotlib
(python2env) cgm@cgm:~/文档/rgbd_benchmark_tools/src/rgbd_benchmark_tools$ pip install matplotlib
.....................................
(python2env) cgm@cgm:~/文档/rgbd_benchmark_tools/src/rgbd_benchmark_tools$ /bin/python evaluate_ate.py rgbd_dataset_freiburg1_360-groundtruth.txt freiburg1_360-rgbdslam.txt --plot output_image.png
0.070789
Traceback (most recent call last):
File "evaluate_ate.py", line 175, in <module>
import matplotlib
ImportError: No module named matplotlib
(python2env) cgm@cgm:~/文档/rgbd_benchmark_tools/src/rgbd_benchmark_tools$
根据您的输出,您已经成功激活了虚拟环境,并且在虚拟环境中的Python解释器中安装了matplotlib,但在运行脚本时似乎仍然使用了系统中的Python 2.7。这可能是因为在虚拟环境激活时,您直接使用了/bin/python,而它可能仍然指向系统的Python 2.7。
要使用虚拟环境中的Python解释器,您可以使用虚拟环境中的python命令,而不是/bin/python。请尝试以下命令来运行脚本:
python evaluate_ate.py rgbd_dataset_freiburg1_360-groundtruth.txt freiburg1_360-rgbdslam.txt --plot output_image.png
这三个文件(evaluate_ate.py rgbd_dataset_freiburg1_360-groundtruth.txt freiburg1_360-rgbdslam.txt)在一个目录下
通过运行上述命令,您应该能够在虚拟环境中正确使用matplotlib库和Python解释器来生成轨迹图像。如果问题仍然存在,请确保虚拟环境已经正确激活,并且python命令指向虚拟环境中的Python解释器。
(python2env) cgm@cgm:~/文档/rgbd_benchmark_tools/src/rgbd_benchmark_tools$ python evaluate_ate.py rgbd_dataset_freiburg1_360-groundtruth.txt freiburg1_360-rgbdslam.txt --plot output_image.png
0.070789
rgbd_benchmark_tools
这个文件夹里的内容
(python2env) cgm@cgm:~/文档/rgbd_benchmark_tools/src/rgbd_benchmark_tools$ ls
add_pointclouds_to_bagfile.py generate_pointcloud.py
associate.py generate_registered_pointcloud.py
associate.pyc output_image.png
evaluate_ate.py plot_trajectory_into_image.py
evaluate_rpe.py rgbd_dataset_freiburg1_360-groundtruth.txt
freiburg1_360-rgbdslam.txt
简单使用方法:
# python evaluate_ate.py [真实轨迹] [VIO系统估计的估计] --plot [输出图像名称]
python evaluate_ate.py groundtruth.txt pose_output.txt --plot result.png
最后总结:
(python2env) cgm@cgm:~/文档/rgbd_benchmark_tools/src/rgbd_benchmark_tools$ python evaluate_rpe.py rgbd_dataset_freiburg1_360-groundtruth.txt freiburg1_360-rgbdslam.txt --fixed_delta --delta 1.0 --save output_rpe_data.txt --plot output_image.png
0.07933048022129437
1.注释掉.bashrc文件的这一行
export PYTHONPATH=$PYTHONPATH:/home/cgm/anaconda3/envs/yolov8/lib/python3.8/site-packages
2.打开终端运行
cgm@cgm:~$ source .bashrc
cgm@cgm:~$ echo $PYTHONPATH
/opt/ros/noetic/lib/python3/dist-packages
cgm@cgm:~$
3.新建pyhton2的conda环境:
conda create -n python2env python=2.7
conda activate python2env
conda info --envs
pip install matplotlib
4.rgbd_benchmark_tools的根目录新建脚本文件build.sh,内容如下:
# conda activate python2env
# 我之前一直使用是naconda3/envs/yolov8这个环境,.bashrc文件里:export PYTHONPATH=$PYTHONPATH:/home/cgm/anaconda3/envs/yolov8/lib/python3.8/site-packages
# 解决:注释掉export PYTHONPATH=$PYTHONPATH:/home/cgm/anaconda3/envs/yolov8/lib/python3.8/site-packages
# 然后:source .bashrc
cd src/rgbd_benchmark_tools
python evaluate_ate.py rgbd_dataset_freiburg1_360-groundtruth.txt freiburg1_360-rgbdslam.txt --plot output_ate_image.png
python evaluate_rpe.py rgbd_dataset_freiburg1_360-groundtruth.txt freiburg1_360-rgbdslam.txt --fixed_delta --delta 1.0 --save output_rpe_data.txt --plot output_rpe_image.png
5.把真值文件txt和预计轨迹文件txt放入rgbd_benchmark_tools/src/rgbd_benchmark_tools中,保持和py文件在一个目录(目的是运行命令可以变得很短)
6.cgm@cgm:~/文档/rgbd_benchmark_tools$ chmod +X build
7.cgm@cgm:~/文档/rgbd_benchmark_tools$ conda activate python2env
8.(python2env) cgm@cgm:~/文档/rgbd_benchmark_tools$ ./build.sh
0.070789
0.07933048022129437
9.rgbd_benchmark_tools/src/rgbd_benchmark_tools有生成的2个图片(output_ate_image.png;output_rpe_image.png)和output_rpe_data.txt文件