Jetson AGX Xavier避坑指南(三)——环境搭建1.(python3、pip、virtualenv、ros)

1.安装python3.7

Jetson AGX Xavier自带python版本为2.7和3.6。
安装python3.7指令:

sudo apt-get update  # 更新(可跳过)
sudo apt-get install python3.7
python3.7 -V  #查看是否安装成功

创建软连接,使python3默认指向python3.7

# 首先把之前的软连接删除:
sudo rm -rf /usr/bin/python3
which python3.7  # 查看python3.7 安装路径.

# 创建新的软连接:
sudo ln -s /usr/bin/python3.7 /usr/bin/python3  # 添加python3的软链接。 /usr/bin/python3.7 即 which python3.7输出的安装路径
python3 -V  # 测试是否安装成功

这种方法也可以修改Python默认指向的版本。
参考:ubuntu16.04升级Python3.5到Python3.7

附:arm64版vscode链接,下载 code-oss_1.28.0-1537780154_arm64.deb,双击在software里安装即可。

2.创建虚拟环境

在使用 Python 开发的过程中,工程一多,难免会碰到不同的工程依赖不同版本的库的问题;亦或者是在开发过程中不想让物理环境里充斥各种各样的库,引发未来的依赖灾难。此时,我们需要对于不同的工程使用不同的虚拟环境来保持开发环境以及宿主环境的清洁。

本来打算在Xavier上安装Anaconda创建虚拟环境的,然而折腾半天没有装上。原因是Anaconda没有aarch64架构的package。不得不说架构不同步步有坑。后来在知乎发现了这篇文章在Jetson Nano (TX1/TX2)上使用Anaconda与PyTorch 1.1.0,文中说github上有一个将conda移植到aarch64平台上的“Archiconda”的项目,然而,我尝试了好多次,安装包根本下载不了,遂放弃

上一段纯属吐嘈,下面进入正题。

随手附赠更换清华源教程:TX2 ubuntu18.04更换软件源
以及更多源:NVIDIA Jetson TX2 or AGX Xavier apt切换国内的源

2.1 jetson AGX Xavier安装pip

2.2节要用pip进行安装,所以要先安装pip。
a. 安装工具 setuptools ,pip依赖于此工具包。
下载安装包.zip文件,解压,cd进目录, 执行 :

sudo python3 setup.py install

b.安装 pip3

下载安装包.tar.gz文件
,解压,cd进目录, 执行 :

sudo python3 setup.py install
pip3 -V  # 查看pip3版本

pip3安装完毕。

参考:从TX2 到 配置pip、cmake、OpenCV、tensorflow、Tensorflow Object Detection API
当然也可以顺便安装cmake.附赠陈皓大神的makefile教程

2.2 安装 virtualenv和virtualenvwrapper

官网上的第一句话很好的概括了这两个库是做什么的:
virtualenv is a tool to create isolated Python environments.
virtualenvwrapper is a set of extensions to Ian Bicking’s virtualenv tool.

virtualenvwrapper的安装依赖virtualenv库,因此要先安装virtualenv。

a. 安装virtualenv和virtualenvwrapper

sudo apt-get install python3-dev  # 安装环境依赖  
# 报错 E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
# 好像并没有影响,继续安装virtualenv,仍然成功
pip3 install virtualenv --user
pip3 install virtualenvwrapper --user  # 安装virtualenvwrapper用于管理虚拟环境

若安装 virtualenvwrapper 报错,
ERROR: Could not find a version that satisfies the requirement pbr (from versions: none) ERROR: No matching distribution found for pbr
请尝试:
sudo pip install pbr
b. 配置virtualenvwrapper的工作目录

which virtualenvwrapper.sh  # 查看virtualenvwrapper.sh路径
mkdir $HOME/.virtualenvs  # 在$HOME下创建一个隐藏文件夹,作为自定义的虚拟环境管理目录
gedit ~/.bashrc  # 打开.bashrc文件

将下面的代码添加到~/.bashrc 尾部,保存,

export WORKON_HOME=$HOME/.virtualenvs
VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3  # 默认启动版本为python2,而virtualenv是用pip3安装的,所以需要增加此环境变量
source /home/ur/.local/bin/virtualenvwrapper.sh  # virtualenvwrapper.sh的路径

然后输入终端命令: source ~/.bashrc配置完成。

c. 创建虚拟环境

mkvirtualenv -p /usr/bin/python3 rosRL  # -p 指定python解释器 rosRL是环境名

其他命令

workon [虚拟环境名称] # 切换/进入虚拟环境
deactivate # 退出虚拟环境
lsvirtualenv -b # 列出虚拟环境
lssitepackages # 查看环境里安装了哪些包
cdvirtualenv [子目录名] # 进入当前环境的目录
cpvirtualenv [source] [dest] # 复制虚拟环境
rmvirtualenv [虚拟环境名称] # 删除虚拟环境

如果不想要这个环境了,可以直接找到/.virtualenvs/…把env目录删除。

参考:
TX2入门教程软件篇-安装virtualenv和virtualenvwrapper
What is a virtualenv and how to install it?
virtualenvwrapper配置报错

3. 在python3虚拟环境中安装ROS

当前(2019-12-11)最新的ros版本ros melodic仍然只支持Python2.7。传说中要在2019年推出的支持python3的ros noetic版本至今毫无消息,没办法只能折腾一下了。
使用Python3和Python2.7的混合环境
原理:使用virtualenv创建一个Python3的环境,然后在这个环境中编译安装自己需要的软件包。在引用软件包的时候,如果没有对应的Python3的软件包,会自动的去Python2.7的环境里面找。这样很多软件包都是可以通用的。当然对于没有做好Python3支持的软件包也是没法用的。

不推荐使用把系统默认Python替换成Python3然后源码编译安装ros的方式,这样一旦使用了Python3就没办法使用Pyhon2.7了。有些软件包并没有做好Pyhon3的支持,在使用中会产生不少问题。

workon rosRL  # 进入虚拟环境

Jetson AGX Xavier部署ROS Melodic跟Ubuntu下稍微有些不同,可以通过installROSXavier脚本安装,参考:Robot Operating System (ROS) on NVIDIA Jetson AGX Xavier Developer Kit.

git clone https://github.com/jetsonhacks/installROSXavier.git  # 一定要下最新版的,若下载出错可直接去github下载、解压,不要忘记把文件名改为installROSXavier
cd installROSXavier
./installROS.sh -p ros-melodic-desktop  # 或 ros-melodic-ros-base 或 ros-melodic-desktop-full
                                 

可能会报错,根据提示修复:

sudo rosdep fix-permissions

打开小乌龟,检测是否安装成功:

roscore
rosrun turtlesim turtlesim_node  # 在新终端打开turtle
rosrun turtlesim turtle_teleop_key  # 新终端运行,通过键盘控制turtle运动

用ROSXavier脚本新建工作空间:

./setupCatkinWorkspace.sh [工作空间名]  # 注意删掉中括号,否则它会出现在工作空间名中(大雾)

打开新终端会报错,bash: export: `192.168.43.202’: not a valid identifier

gedit ~/.bashrc

打开.bashrc本件查看,发现export ROS_IP=192.168.55.1 192.168.43.202,有两个ip,不懂什么原因。把后面一个ip注释掉,报错消失,目前也没有发现有什么不良影响。

至此ros安装成功。

Note

需要注意的是,即使使用的virtualenv中,python指向的是python3,但是只要不在.py文件中添加python3的shebang( #!/usr/bin/env python3 ),rosrun还是会调用python2的。这样可以很方便地兼容原来Python2的Package。

参考:在ROS中使用Python3
Robot Operating System (ROS) on NVIDIA Jetson AGX Xavier Developer Kit
NVIDIA Jetson Xavier melodic-ros安装

关于在ros中使用python3,两个可能有用的连接:
How to setup ROS with Python 3
Building ROS Melodic with Python3 support,如果有老铁成功了,麻烦通知我一下。

坑 1.

最近(2020/08)没有用 ros,再打开突然 找不到 /opt/ros/melodic/setup.bash 文件了。各种重装,换源,翻墙折腾一番毫无成效。
最后

sudo apt update
sudo apt install ros-melodic-desktop-full

竟然神奇的恢复了。

坑 2 .

sudo rosdep init 命令raw.githubusercontent.com无法连接问题。报错:

ERROR: cannot download default sources list from:
https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list
Website may be down.

大多数情况下,这是网络的问题。请依次尝试如下解决方法:

  1. 改用手机热点,强烈建议用网络稳定的国产安卓手机,苹果手机很有可能不行。
  2. 修改 ip 地址。gedit /etc/hosts 命令,在文本中添加一行: 151.101.84.133 raw.githubusercontent.com 。
  3. 点击连接,查询 raw.githubusercontent.com 的 ip,采用第二步的方法依次尝试。

版权声明:本文为zxxxiazai原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。