在Ubuntu中安装ROS Kinetic
ROS安装ubuntu16.04 无需科学上网解决sudo rosdep init初始化问题
Getting started with ROS and Docker
ROS安装选择
Kinetic Kame 版本
的ROS对应python2.7,修改python版本可能导致ros无法使用;~/.bashrc
文件里不能同时存在anaconda与ros的环境变量设置,两个环境变量一次只能使用一个;ROS版本 | Ubuntu版本 | python版本 |
---|---|---|
ROS Kinetic Kame | Ubuntu16.04LTS | python2.7 |
ROS Melodic Morenia | Ubuntu18.04LTS | |
ROS Noetic Ninjemys | Ubuntu20.04LTS |
Kinetic Kame 版本
作为ROS较老的版本,默认基于python2.7运行,适用于Ubuntu16.04。本文以Ubuntu16.04LTS系统为例,安装 Kinetic Kame 版本
的ROS。
配置Ubuntu软件仓库(repositories),勾选“restricted”,“universe”和“multiverse”。
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'
# 设置key密钥
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
# 更新源
sudo apt update
# 安装ROS
sudo apt-get install ros-kinetic-desktop-full
在开始使用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
# 配置环境变量
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
如何在 Ubuntu 18.04.1 LTS 上安装 ROS Melodic 的详细过程
在ROS中运行小海龟,执行步骤如下:
# 打开新终端,启动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]
# 打开新终端,启动小海龟节点
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]
# 打开新终端,启动小海龟运动控制节点
rosrun turtlesim turtle_teleop_key
yoyo@yoyo:~$ rosrun turtlesim turtle_teleop_key
Reading from keyboard
---------------------------
Use arrow keys to move the turtle.
rosrun
:在ROS包中运行节点;turtlesim
:这是ROS中一个用于演示机器人控制的软件包;turtlesim_node
:这是turtlesim软件包中的一个节点,用于在屏幕上绘制小海龟;turtle_teleop_key
:这是turtlesim软件包中另一个节点,它可以通过键盘上的方向键来控制小海龟的运动。执行 rosrun turtlesim turtlesim_node
时,计算机会启动一个节点,用于在屏幕上绘制小海龟。当执行 rosrun turtlesim turtle_teleop_key
时,计算机会启动另一个节点,该节点将通过键盘控制小海龟的运动。
E:无法定位软件包 ros-noetic-desktop-full
错误原因:
ROS版本与Ubuntu版本不匹配
解决办法:
安装合适的ROS版本
(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 <[email protected]>”未改变
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 <[email protected]>”未改变
gpg: 合计被处理的数量:1
gpg: 未改变:1
错误原因:
无法连接到密钥服务器
解决办法:
wget http://packages.ros.org/ros.key
sudo apt-key add ros.key
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'
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
程序“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
ImportError: /opt/ros/kinetic/lib/python2.7/dist-packages/cv2.so: undefined symbol: PyCObject_Type
ImportError: /opt/ros/kinetic/lib/python2.7/dist-packages/cv2.so: undefined symbol: PyCObject_Type
解决python3.5无法导入cv2.so的问题
(demo) yoyo@yoyo:~$ python
Python 3.9.6 (default, Aug 18 2021, 19:38:01)
[GCC 7.5.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pykitti
Traceback (most recent call last):
File "" , line 1, in <module>
File "/home/yoyo/miniconda3/envs/demo/lib/python3.9/site-packages/pykitti/__init__.py", line 5, in <module>
from pykitti.tracking import tracking
File "/home/yoyo/miniconda3/envs/demo/lib/python3.9/site-packages/pykitti/tracking.py", line 12, in <module>
import cv2
ImportError: /opt/ros/kinetic/lib/python2.7/dist-packages/cv2.so: undefined symbol: PyCObject_Type
>>>
KeyboardInterrupt
错误原因:
安装ROS时,ROS的环境变量覆盖了Anaconda的环境变量
ROS默认的PYTHONPATH为python2.7
具体参见 /opt/ros/kinetic/_setup_util.py文件中的PYTHONPATH
默认使用 /opt/ros/kinetic/lib/python2.7/dist-packages/cv2.so
方法一(亲测有效)
退出Anaconda虚拟环境,在python2.7环境中安装kitti2bag
方法二
在python文件中,清除ROS的环境变量。
import sys
sys.path.remove('/opt/ros/kinetic/lib/python2.7/dist-packages')
(demo) yoyo@yoyo:~$ python
Python 3.9.6 (default, Aug 18 2021, 19:38:01)
[GCC 7.5.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path.remove('/opt/ros/kinetic/lib/python2.7/dist-packages')
>>> import cv2
>>>