[Jetson TX2 NX - 3]Jetson TX2 NX 中的ROS安装

@[Jetson TX2 NX - 3](Jetson TX2 NX 中的ROS安装)

前言

在Jetson TX2 NX上安装好了基本的AI环境后,为了打造一辆属于自己的小车,我又继续开始了ROS学习之旅。网上有很多教学安装ROS的教程,但是实践下来每一篇都不完整,我针对安装中遇到的问题,将安装流程和解决方案整合到了一起,希望可以对初学者有所帮助。闲言少叙,直接开始。

开始

这部分主要参考了如下
https://blog.csdn.net/weixin_45947476/article/details/123024205
https://zhuanlan.zhihu.com/p/428043975
中的内容,但是上述内容并不能完全食用,中间会遇到其他问题,因此将整合的安装过程单独列出,方便参考。

  1. 设置软件源
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
  1. 设置密钥
    采用下面的方法不会出现因为墙的问题,导致密钥设置失败的问题。
wget http://packages.ros.org/ros.key
sudo apt-key add ros.key
sudo apt-get update --fix-missing
  1. 更新源地址
sudo apt update
  1. 安装
sudo apt-get install ros-melodic-desktop-full

这里需要注意:Ubuntu 18.04 安装 ros-melodic-desktop-full
Ubuntu 20.04 安装 ros-noetic-desktop-full
记得选择匹配自己系统的版本

问题重灾区1. sudo rosdep init

安装后将进入到ros安装问题最多的部分就是rosdepc init。下面将详细介绍并解决过程中可能遇到的每一个问题(请叫我踩坑大王~)

  1. 常规rosdep init 指令安装
sudo rosdep init

问题1 提示没有rosdep 这个指令

解决方法: 直接安装rosdep

sudo pip install rosdep

如果pip安装失败,那么就请尝试pip3

sudo pip3 install rosdep

问题2 ERROR:cannot download default sources list from https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list Websitemay be down.

这里主要参考了CSDN博主「haigujiujian」的文章
原文链接:https://blog.csdn.net/haigujiujian/article/details/114700419
其实这里我试过其他方法,实测下来,只有他的方法轻松简单的解决了问题。

解决方案:(1)打开根目录下的etc目录下的hosts文件进行一个编辑

cd /etc
sudo chmod 777 hosts

然后在浏览器中输入找寻可用服务器的一个网站:https://site.ip138.com 查询内容:raw.githubusercontent.com
[Jetson TX2 NX - 3]Jetson TX2 NX 中的ROS安装_第1张图片
这里经过实测,可以使用的域名为185.199.110.133. 如果该域名无法使用,可以换一个。
这时候就把正确的网址"185.199.111.133 raw.githubusercontent.com"输入到到hosts文件里面,不要放错位置,放在下面是不行的!

sudo vi hosts

如图:
[Jetson TX2 NX - 3]Jetson TX2 NX 中的ROS安装_第2张图片
:wq保存退出

sudo  rosdep  init  

[Jetson TX2 NX - 3]Jetson TX2 NX 中的ROS安装_第3张图片

问题重灾区2. rosdep update

因为墙的问题,即使已经rosdep init成功了 也会在rosdep update这里失败。我已经尝试了网上可以找的几乎所有方法,有效的有两种,但是你可能和我一样,单独用一种方法无法成功,需要结合使用。

我会把有效的两种方法都放在下面,如果你只采用其中一种方法就可以解决问题,那很好,如果不能请灵活将两种方法结合使用。这里主要参考了博客
ROS学习——rosdep update 超时解决方法
https://blog.csdn.net/senlijiu/article/details/124203913

因他将成功的两种方法写的很详细,我就不赘述了,我重点提下其中可能会遇到的问题。

修改本地文件的时候,有个很好用的查找相关文件的命令如下:

find . -type f | xargs grep "raw.githubusercontent"

问题1 ERROR: unable to process source [file:///home/jetson/rosdistro/releases/fuerte.yaml]:Failed to download target platform data for gbpdistro:

如果你选择了方法3,git clone 文件到本地的方法,在update的时候就可能会遇到这个问题。这时请选用方法2. 同时方法3的文件也请保留,因为后续解决问题还会用到。

问题2 Query rosdistro index https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml

该问题的解决方法参考了博客:
https://blog.csdn.net/weixin_40489988/article/details/121686062

你可以会发现不论怎么修改 index-v4. yaml文件就是始终检索的不是我们设定的路径,这说明实际调用的是另一个文件,需要我们把它找出来并改掉。

sudo grep -R index-v4.yaml /usr/* | more

我的机器找的内容如下,具体请以你的实际环境为准

usr/lib/python2.7/dist-packages/rosdistro/__init__.py:DEFAULT_INDEX_URL = 'https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml'
usr/local/python3.6/dist-packages/rosdistro/__init__.py:DEFAULT_INDEX_URL = 'https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml'

然后将local中的__init__.py 改掉。
这里你可能会考虑采用前面的方法2 加https://ghproxy.com/, 但是我这样加了也没有成功,我不知道为什么。但是因为我之前有按照方法3下载代码到本地,因此这里的链接我才用的是本地的路径

file:///home/xxx/rosdistro/index-v4.yaml

经过上面的修改后,rosdep update 成功。

jetson@ubuntu:~$ rosdep update
reading in sources list data from /etc/ros/rosdep/sources.list.d
Hit https://ghproxy.com/https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml
Hit https://ghproxy.com/https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml
Hit https://ghproxy.com/https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml
Hit https://ghproxy.com/https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml
Hit https://ghproxy.com/https://raw.githubusercontent.com/ros/rosdistro/master/releases/fuerte.yaml
Query rosdistro index file:///home/jetson/rosdistro/index-v4.yaml
Skip end-of-life distro "ardent"
Skip end-of-life distro "bouncy"
Skip end-of-life distro "crystal"
Skip end-of-life distro "dashing"
Skip end-of-life distro "eloquent"
Skip end-of-life distro "foxy"
Skip end-of-life distro "galactic"
Skip end-of-life distro "groovy"
Add distro "humble"
Skip end-of-life distro "hydro"
Skip end-of-life distro "indigo"
Add distro "iron"
Skip end-of-life distro "jade"
Skip end-of-life distro "kinetic"
Skip end-of-life distro "lunar"
Skip end-of-life distro "melodic"
Add distro "noetic"
Add distro "rolling"
updated cache in /home/jetson/.ros/rosdep/sources.cache
  1. 设置环境变量
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc

验证

启动三个终端(ctrl + alt + T)

终端1键入:roscore
终端2键入:rosrun turtlesim turtlesim_node(此时会弹出图形化界面)
终端3键入:rosrun turtlesim turtle_teleop_key(在3中可以通过上下左右控制2中乌龟的运动)
[Jetson TX2 NX - 3]Jetson TX2 NX 中的ROS安装_第4张图片
如图所示,则安装成功。

其他可供学习的网站:
http://wiki.ros.org/noetic/Installation/Ubuntu

你可能感兴趣的:(Jetson,TX2,NX,学习,人工智能)