ros 的安装

前言

希望把一些自己学到的东西串联起来,所以学这个工具,可能要学习很长的时间,但是并不畏惧。很多内容源自于维基百科以及相关的书籍,比如《ROS机器人编程》等。

docker上安装ROS

在macOs系统上,建议在docker上学习以及使用ros, 类似的,可以在docker中学习linux内核,可以节省系统的运行开销以及储存空间。下面简单的说明下docker的安装。命令行下输入

brew cask install docker

下载成功后会出现

Moving App 'Docker.app' to '/Applications/Docker.app'.

打开docker可以使用

cd /Applications/Docker.app;open Docker.app;

输入密码即可,可以检测docker是否安装成功,可以输入

docker --version

安装ros的方法使用了知乎用户JK 触发器提供的策略,在登入账号的前提下,在命令行下输入 :

docker pull yz16/my_ros

生成Container:

cd ~;mkdir ros_workspaces;
docker run --name ros_env \
--mount type=bind,source=/Users/yourName/ros_workspaces,\
target=/root/ros_workspaces \
-itd -p 6080:80 yz16/my_ros

浏览器打开 http://127.0.0.1:6080 就可以强行操作一波了。

确认容器有在运行,可以通过 docker ps 来查看,

cd ~;cd ros_env;docker ps

输出详情介绍:
1,CONTAINER ID: 容器 ID。
2,IMAGE: 使用的镜像。
3,COMMAND: 启动容器时运行的命令。
4,CREATED: 容器的创建时间。
5,STATUS: 容器状态。
6,PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。
7,NAMES: 自动分配的容器名称。

在宿主主机内使用 docker logs 命令,查看容器内的标准输出(先使用ps指令,查看文件夹中一连串的字母,再docker logs asdfadfs。

以后启动和关闭就可以直接使用如下指令来解决:

docker start/stop ros_env

Ubuntu 上安装ROS2

下面主要是通过源码编译的方式实现的,踩了些坑,记录了一下;

1, 确保有一个支持UTF-8的locale设置。locale设置例子如下:

sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8

2, 设置源:

sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

3, 安装相关的工具包和依赖

sudo apt update
sudo apt-get install build-essential
sudo apt-get install cmake
sudo apt-get install git
sudo apt-get install python3-colcon-common-extensions
sudo apt-get install python3-lark-parser
sudo apt-get install python3-pip
sudo apt-get install python3-rosdep2
sudo apt-get python3-vcstool
sudo apt-get wget
python3 -m pip install -U \
argcomplete \
flake8 \
flake8-blind-except \
flake8-builtins \
flake8-class-newline \
flake8-comprehensions \
flake8-deprecated \
flake8-docstrings \
flake8-import-order \
flake8-quotes \
pytest-repeat \
pytest-rerunfailures \
pytest \
pytest-cov \
pytest-runner \
setuptools

# install Fast-RTPS dependencies
sudo apt install --no-install-recommends -y \
libasio-dev \
libtinyxml2-dev

4, 创建工作空间并进行下载源码

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
wget https://raw.githubusercontent.com/ros2/ros2/dashing/ros2.repos
vcs import src < ros2.repos

一、遇到的问题:
根据ROS2的官方编译教程步骤下载ROS包时,到vcs import src < ros2.repos 或 vcs import --input ros2.repos src这一步报错或者下载速度极慢

搜索到了以下三个网址,尝试了都不行,会显示 Could not resolve host等错误

https://github.com.cnpmjs.org/
https://hub.fastgit.org/
https://hub.fastgit.xyz/

替换成https://kgithub.com/,这个目前是可以的(2023年6月3号测试没问题)

5, 用rosdep安装依赖项

sudo rosdep init
rosdep update

在rosdep update 的过程中可能会因为网络的问题而报错, 自己这边连续试了两次才正常的update成功, 如下图所示

然后再

rosdep install --from-paths src --ignore-src --rosdistro dashing -y --skip-keys "console_bridge fastcdr fastrtps libopensplice67 libopensplice69 rti-connext-dds-5.3.1 urdfdom_headers"

6, 编译所有包

cd ~/ros2_ws/
colcon build --symlink-install

编译过程如下

编译时间那叫做一个相当长。。。。。问题是还出错了。。。

排查了一圈后,结果发现是虚拟机里内存不够了,欲哭无泪啊。。。。解决起来稍微有点麻烦。。。。日了, 如果同样遇到了这个问题,可以按照如下步骤来重置虚拟机, 现在开启虚拟机就会在启动的时候显示[FAILED]Failed to start Login Service, 需要进行如下几步

1, 进入Recovery模式,自己又从网上查了两种方式,一个是长按Shift另一种是长按e, 亲测无效,且大无语,搞了好几次, 按住Esc的方式结果闪了1秒不到,就又到开机界面了,后面尝试了几次才知道,按1下就行了,不要长按;

2, 进入到root模式

3, 输入如下命令后大概就有几百兆的存储空间了,然后再去扩充下磁盘

sudo apt-get autoclean
sudo apt-get clean

在拓展磁盘的过程中还发现了Ubuntu里面自带分析内存的旭日图。。。真神奇。。。

主要是用如下方法去进行

1, 使用命令安装分区管理工具gparted

sudo apt-get install gparted

2, 使用命令启动分区管理工具

sudo gparted

然后把想拓展的磁盘拉满就可以了。。。

拉满后点击确认,最后分配成功的时候看一下detail就行了

然后通过命令df -h查看下当前磁盘的空间,让心里有个底;然后再回到编译的过程,又是漫长的等待。。。。。

Connection refused

使用vim /etc/hosts命令打开不能访问的机器的hosts文件,添加如下内容:(如果不能修改这个文件的情况下,采用sudu -i进入管理员模式对这个文件进行修改即可)

199.232.68.133 raw.githubusercontent.com
199.232.68.133 user-images.githubusercontent.com
199.232.68.133 avatars2.githubusercontent.com
199.232.68.133 avatars1.githubusercontent.com

Install ROS1

鉴于很多视频介绍或者是书籍,都是基于较老的版本的ROS,也就是ROS1 版本了,其实安装起来非常简单,不过建议添加清华大学的镜像,这样快一些

sudo vim /etc/apt/sources.list.d/ros-latest.list

然后添加或替换成如下内容

deb https://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ focal main

然后再输入如下命令,信任 ROS 的 GPG Key,并更新索引:

sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
sudo apt update

我看的书籍是基于ros-kinetic的,但是感觉都差不多,于是就直接安装了ros-noetic这个版本的了,估计等我完全熟悉的时候,这个版本依旧不会过时;

sudo apt install ros-noetic-desktop-full

还好个人网速给力,安装起来比上面用ROS2的用源码编译快得多了;后续的操作直接去看官网吧,就不一一复制下来了 http://wiki.ros.org/noetic/Installation/Ubuntu

初始化rosdep

在使用ROS之前,必须初始化rosdep。rosdep是一个通过在使用或编译ros的核心组 件时轻松安装依赖包来增强用户便利的功能。

sudo rosdep init
rosdep update

创建并初始化工作目录

ROS使用一个名为catkin的ROS专用构建系统。为了使用它,用户需要创建并初始化 catkin工作目录,如下所示。除非用户创建新的工作目录,否则此设置只需设置一次。

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace

命令 ifconfig没有找到的问题

输入如下指令安装即可

sudo apt-get install net-tools

这个主要是为了一些配置所用;

ROS rosdep update更新失败(简单解决)

sudo pip install rosdepc

MAC M2芯片上安装ROS

有的时候发现自己的虚拟机网络被墙,导致很多仿真无法进行下去,于是乎,就想办法不用虚拟机,因为自己虚拟机是ARM 64系统下的,翻墙实在不易,干脆就直接在自己电脑里面安装ROS了,运气好的是,在CSDN上就有人实现了这点,我就直接抄了,原文可见macOS在miniconda下配置安装ROS1, 下面就属于搬运内容了

1, 安装miniconda, 如果自己安装了anaconda的话,在bashrc或者zshrc中给注释掉相关内容即可,没必要卸载掉, 找到如图所示的内容,安装即可

2, 创建新的环境

conda create -n ROS  #如果下载的环境为3.8版本conda,则不写指定python版本

3, 配置虚拟环境

#激活境ROS
conda activate ROS
#配置当前环境
conda config --add channels conda-forge
conda config --add channels robostack
conda config --set channel_priority strict

4, 安装ROS noetic

#安装noetic版本
conda install ros-noetic-desktop-full

5, 安装附加工具

conda install compilers cmake pkg-config make ninja catkin_tools

6, 重新加载ROS环境

conda deactivate
conda activate ROS

7, ROS 初始化

rosdep init
rosdep update

接下来就可以创建工作空间来验证安装是否OK了

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
cd ~/catkin_ws/
catkin_make

得到的结果如图所示

这就已经表明安装成功了

知识共享许可协议