Ubuntu16.04LTS安装ROS测试小海龟样例

一、参考资料

在Ubuntu中安装ROS Kinetic
ROS安装ubuntu16.04 无需科学上网解决sudo rosdep init初始化问题
Getting started with ROS and Docker

二、安装ROS关键步骤

1. 选择ROS版本

ROS安装选择

  • Ubuntu版本不同,对应安装的ROS版本也不同,务必版本对齐
  • Kinetic Kame 版本的ROS对应python2.7,修改python版本可能导致ros无法使用;
  • ~/.bashrc文件里不能同时存在anaconda与ros的环境变量设置,两个环境变量一次只能使用一个;
  • 一个终端下,ROS的环境变量和anaconda的环境变量只能开一个。开anaconda的python3的环境运行ROS,很多ROS包无法正常调用;
ROS版本 Ubuntu版本 python版本
ROS Kinetic Kame Ubuntu16.04LTS python2.7
ROS Melodic Morenia Ubuntu18.04LTS
ROS Noetic Ninjemys Ubuntu20.04LTS

Ubuntu16.04LTS安装ROS测试小海龟样例_第1张图片
Kinetic Kame 版本 作为ROS较老的版本,默认基于python2.7运行,适用于Ubuntu16.04。本文以Ubuntu16.04LTS系统为例,安装 Kinetic Kame 版本的ROS

2. 配置Ubuntu软件仓库

配置Ubuntu软件仓库(repositories),勾选“restricted”,“universe”和“multiverse”。

Ubuntu16.04LTS安装ROS测试小海龟样例_第2张图片

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.

Ubuntu16.04LTS安装ROS测试小海龟样例_第3张图片

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 <[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

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失败

解决办法

  1. 下载rosdistro功能包;

    git clone https://github.com/ros/rosdistro.git
    
  2. 修改文件 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
    
  3. 修改文件 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'
    
  4. 修改文件 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'
    
  5. 修改文件 __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

Q: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
>>>

你可能感兴趣的:(运维,ROS)