一、参考资料
在Ubuntu中安装ROS Kinetic
ROS安装ubuntu16.04 无需科学上网解决sudo rosdep init初始化问题
二、安装ROS关键步骤
1. 选择ROS版本
ROS安装选择
- Ubuntu版本不同,对应安装的ROS版本也不同,务必版本对齐;
- Kinetic版本的ROS对应python2.7,修改python版本可能导致ros无法使用;
~/.bashrc
文件里不能同时存在anaconda与ros的环境变量设置,两个环境变量一次只能使用一个;- 一个终端下,ROS的环境变量和anaconda的环境变量只能开一个。开anaconda的python3的环境运行ROS,很多ROS包无法正常调用;
kinetic 作为ROS较老的版本默认基于python2.7运行,适用于Ubuntu16.04。本文以Ubuntu16.04LTS系统为例,安装 Kinetic版本的ROS。
ROS版本 | Ubuntu版本 | python版本 |
---|---|---|
ROS Kinetic | Ubuntu16.04LTS | python2.7 |
ROS Melodic | Ubuntu18.04LTS | |
ROS Noetic | Ubuntu20.04LTS |
2. 配置Ubuntu软件仓库
配置Ubuntu软件仓库(repositories),勾选“restricted”,“universe”和“multiverse”。
3. 设置 sources.list
# 设置安装源
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'
4. 设置密钥
# 设置key密钥
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
5. 安装ROS
# 更新源
sudo apt update
# 安装ROS
sudo apt-get install ros-kinetic-desktop-full
6. 初始化 rosdep
在开始使用ROS之前需要初始化rosdep。rosdep可以在编译某些源码的时为其安装一些系统依赖,同时也是某些ROS核心功能组件所必需用到的工具。
# 初始化 rosdep
sudo rosdep init
rosdep update
(demo) yoyo@yoyo:/usr/lib/python2.7/dist-packages/rosdistro$ sudo rosdep init
Wrote /etc/ros/rosdep/sources.list.d/20-default.list
Recommended: please run
rosdep update
(demo) yoyo@yoyo:/usr/lib/python2.7/dist-packages/rosdistro$ rosdep update
reading in sources list data from /etc/ros/rosdep/sources.list.d
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/releases/fuerte.yaml
Query rosdistro index file:///home/yoyo/Downloads/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/yoyo/.ros/rosdep/sources.cache
7. 配置环境变量
# 配置环境变量
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
三、测试ROS turtlesim小海龟样例
如何在 Ubuntu 18.04.1 LTS 上安装 ROS Melodic 的详细过程
在ROS中运行小海龟,执行步骤如下:
1. 启动roscore
# 打开新终端,启动roscore
roscore
yoyo@yoyo:/usr/lib/python2.7/dist-packages/rosdistro$ roscore
... logging to /home/yoyo/.ros/log/d3752a5e-2ac3-11ee-9ef5-18c04d9e91e3/roslaunch-yoyo-32650.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.
started roslaunch server http://yoyo:36853/
ros_comm version 1.12.17
SUMMARY
========
PARAMETERS
* /rosdistro: kinetic
* /rosversion: 1.12.17
NODES
auto-starting new master
process[master]: started with pid [32661]
ROS_MASTER_URI=http://yoyo:11311/
setting /run_id to d3752a5e-2ac3-11ee-9ef5-18c04d9e91e3
process[rosout-1]: started with pid [32674]
started core service [/rosout]
2. 启动小海龟节点
# 打开新终端,启动小海龟节点
rosrun turtlesim turtlesim_node
(demo) yoyo@yoyo:~$ rosrun turtlesim turtlesim_node
[ INFO] [1690273390.857742853]: Starting turtlesim with node name /turtlesim
[ INFO] [1690273390.860713835]: Spawning turtle [turtle1] at x=[5.544445], y=[5.544445], theta=[0.000000]
3. 启动小海龟运动控制节点
# 打开新终端,启动小海龟运动控制节点
rosrun turtlesim turtle_teleop_key
yoyo@yoyo:~$ rosrun turtlesim turtle_teleop_key
Reading from keyboard
---------------------------
Use arrow keys to move the turtle.
4. 解析说明
rosrun
:在ROS包中运行节点;turtlesim
:这是ROS中一个用于演示机器人控制的软件包;turtlesim_node
:这是turtlesim软件包中的一个节点,用于在屏幕上绘制小海龟;turtle_teleop_key
:这是turtlesim软件包中另一个节点,它可以通过键盘上的方向键来控制小海龟的运动。
执行 rosrun turtlesim turtlesim_node
时,计算机会启动一个节点,用于在屏幕上绘制小海龟。当执行 rosrun turtlesim turtle_teleop_key
时,计算机会启动另一个节点,该节点将通过键盘控制小海龟的运动。
四、FAQ
Q:E:无法定位软件包 ros-noetic-desktop-full
错误原因:
ROS版本与Ubuntu版本不匹配
解决办法:
安装合适的ROS版本
Q:设置密钥不成功
(demo) yoyo@yoyo:~$ sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
Executing: /tmp/tmp.N32dAXh9fh/gpg.1.sh --keyserver
hkp://keyserver.ubuntu.com:80
--recv-key
C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
gpg: 下载密钥‘AB17C654’,从 hkp 服务器 keyserver.ubuntu.com
gpg: 密钥 AB17C654:“Open Robotics <info@osrfoundation.org>”未改变
gpg: 合计被处理的数量:1
gpg: 未改变:1
(demo) yoyo@yoyo:~$ curl -sSL 'http://keyserver.ubuntu.com/pks/lookup?op=get&search=0xC1CF6E31E6BADE8868B172B4F42ED6FBAB17C654' | sudo apt-key add -
程序“curl”尚未安装。 您可以使用以下命令安装:
sudo apt install curl
gpg: 找不到有效的 OpenPGP 数据。
(demo) yoyo@yoyo:~$ sudo apt-key adv --keyserver 'hkp://pgp.mit.edu:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
Executing: /tmp/tmp.LQAFHhtZPo/gpg.1.sh --keyserver
hkp://pgp.mit.edu:80
--recv-key
C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
gpg: 下载密钥‘AB17C654’,从 hkp 服务器 pgp.mit.edu
gpg: 密钥 AB17C654:“Open Robotics <info@osrfoundation.org>”未改变
gpg: 合计被处理的数量:1
gpg: 未改变:1
错误原因:
无法连接到密钥服务器
解决办法:
wget http://packages.ros.org/ros.key
sudo apt-key add ros.key
Q:ERROR: cannot download default sources list from:
(demo) yoyo@yoyo:~$ sudo rosdep init
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.
错误原因:
无法连接到国外服务器,导致初始化 rosdep失败
解决办法
-
下载rosdistro功能包;
git clone https://github.com/ros/rosdistro.git
-
修改文件
20-default.list
;修改
rosdistro/rosdep/sources.list.d/20-default.list
文件,将url改为本地文件地址。# os-specific listings first yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml osx # generic yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml gbpdistro https://raw.githubusercontent.com/ros/rosdistro/master/releases/fuerte.yaml fuerte # newer distributions (Groovy, Hydro, ...) must not be listed anymore, they are being fetched from the rosdistro index.yaml instead
修改为
# os-specific listings first yaml file:///home/yoyo/Downloads/rosdistro/rosdep/osx-homebrew.yaml osx # generic yaml file:///home/yoyo/Downloads/rosdistro/rosdep/base.yaml yaml file:///home/yoyo/Downloads/rosdistro/rosdep/python.yaml yaml file:///home/yoyo/Downloads/rosdistro/rosdep/ruby.yaml gbpdistro file:///home/yoyo/Downloads/rosdistro/releases/fuerte.yaml fuerte # newer distributions (Groovy, Hydro, ...) must not be listed anymore, they are being fetched from the rosdistro index.yaml instead
-
修改文件
sources_list.py
;修改
/usr/lib/python2.7/dist-packages/rosdep2/sources_list.py
文件,将url改为本地文件地址。DEFAULT_SOURCES_LIST_URL = 'https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list'
修改为
DEFAULT_SOURCES_LIST_URL = 'file:///home/yoyo/Downloads/rosdistro/rosdep/sources.list.d/20-default.list'
-
修改文件
rep3.py
;修改
/usr/lib/python2.7/dist-packages/rosdep2/rep3.py
文件,将url改为本地文件地址。REP3_TARGETS_URL = 'https://raw.githubusercontent.com/ros/rosdistro/master/releases/targets.yaml'
修改为
REP3_TARGETS_URL = 'file:///home/yoyo/Downloads/rosdistro/releases/targets.yaml'
-
修改文件
__init__.py
;修改
/usr/lib/python2.7/dist-packages/rosdistro/__init__.py
文件,将url改为本地文件地址。DEFAULT_INDEX_URL = 'https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml'
修改为
DEFAULT_INDEX_URL = 'file:///home/yoyo/Downloads/rosdistro/index-v4.yaml'
Q:ERROR: default sources list file already exists:
ERROR: default sources list file already exists:
/etc/ros/rosdep/sources.list.d/20-default.list
Please delete if you wish to re-initialize
错误原因:
重复初始化,导致初始化 rosdep失败
解决办法:
删除20-default.list文件,重新初始化
sudo rm -r /etc/ros/rosdep/sources.list.d/20-default.list
sudo rosdep init
rosdep update
Q:程序“rosrun”尚未安装。 您可以使用以下命令安装:
(demo) yoyo@yoyo:/media/yoyo/U$ rosrun turtlesim turtlesim_node
程序“rosrun”尚未安装。 您可以使用以下命令安装:
sudo apt install rosbash
错误原因:
环境变量未生效
解决办法:
配置环境变量,重新打开终端
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc