ROS入门 — 1、ROS安装与配置
一、 ros安装(Ubuntu-Noetic)
1.1 安装
1.1.1 配置软件仓库
在配置软件仓库过程中需要知道Ubuntu存储库的概念。
- 存储库: 可以理解为Ubuntu内用来存放不同软件的地方
- 四个主要的存储库:
- Main: 规范支持的免费和开源软件。
- Universe: 社区维护的免费和开源软件
- Restricted: 设备的专有驱动程序。
- Multiverse 受版权或法律问题限制的软件
安装ROS过程中要使用“restricted”“universe”和“multiverse”存储库,配置该三个存储库要进入Ubuntu的Software&Update中进行配置。如下如所示,在Software&Update勾选用到的三个存储库。
1.1.2 配置镜像源
ROS的官方下载源在国外,下载比较慢。推荐用国内的一些镜像源
官方源:
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.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'
1.1.3 设置密钥
配置密钥时是为了确认源代码是正确的,并且没有人在未经所有者授权的情况下,修改任何程序代码。并将其添加到操作系统的可信任列表中。
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
1.1.4 安装
更新源列表
sudo apt update
ROS安装,这里安装的ROS是完整的版的ROS,包含ROS所有组件。
sudo apt install ros-noetic-desktop-full
如果不需要使用这些组件的,只需要安装部分组件的ROS版本可以参考下面几种方式:
- 桌面版(Desktop):包括了ROS-Base的全部组件,还有一些工具,比如rqt和rviz。
sudo apt install ros-noetic-desktop
- ROS-Base(仅含骨架):ROS packaging,build,和communication库。没有图形界面(GUI)工具。
sudo apt install ros-noetic-ros-base
- 安装一个特定的软件包
sudo apt install ros-noetic-PACKAGE
- 查看或搜索所有可用的软件包
apt search ros-noetic
1.1.5 初始化 rosdep
该步骤用于melodic和Kinetic,这里写是为了记录当中的一些坑
sudo rosdep init
rosdep update
在执行这两步时,通常会出现异常,相关解决办法参考连接:
1.1.6 设置环境
需要使用时配置
source /opt/ros/noetic/setup.bash
一次性解决
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
注:
- 如果同时安装了好几个ROS,~/.bashrc只会生效你当前使用的这个版本的setup.bash
- 如果是用软件包管理器(例如“apt”)来安装ROS的,这些软件包,没有写入权限。当涉及到ROS软件包源码层面的操作或创建新ROS软件包时,要在具备读写权限的目录下工作,例如主目录(Home)
二、ROS文件系统
2.1 文件系统概念
软件包(Packages): 包是ROS代码的软件组织单元,每个软件包都可以包含程序库、可执行文件、脚本或其他构件。
Manifests(package.xml): 清单(Manifest)是对软件包的描述。它用于定义软件包之间的依赖关系,并记录有关软件包的元信息,如版本、维护者、许可证等。清单详细情况参考:package详细用法
ROS文件系统学习参考资料:ROS文件系统
2.2 文件系统工具
2.2.1 rospack
- 作用: 获取软件包的有关信息
- 用法:
rospack options [package_name]
- 常用:
rospack find [package_name]
,该选项可以返回软件包的所在路径
2.2.2 roscd
- 作用: 切换目录到某个软件包或者软件包集当中,也可以切换到一个软件包或软件包集的子目录中。
- 用法:
roscd [locationname[/subdir]]
,[locationname[/subdir]]=[包名[/包名更下一级目录]] - 特殊用法:
roscd log
,进入存储ROS日志文件的目录,如果你没有执行过任何ROS程序, 系统会报错说该目录不存在。 - 注意: 就像ROS中的其它工具一样,roscd只能切换到那些路径已经包含在ROS_PACKAGE_PATH环境变量中的软件包。
2.2.3 rosls
- 作用: 直接按软件包的名称执行 ls 命令(而不必输入绝对路径)
- 用法:
rosls [locationname[/subdir]]
2.3 创建ROS工作空间
2.3.1 ROS工作空间的组成
src
- 作用: 放置源码
- 包含:
- package:功能包(ROS基本单元)包含多个节点、库与配置文件,包含所有字母小写,只能由字母、数字与下划线组成。
- CMakeLists.txt:编译的基本配置
build
- 作用: 编译空间,用于存放CMake和catkin的缓存信息、配置信息和其他中间文件。
devel
- 作用: 开发空间,用于存放编译后生成的目标文件,包括头文件、动态&静态链接库、可执行文件等。
ROS工作空间学习参考: ROS 的工作空间
2.3.2 创建ROS工作空间
在home目录下,创建工作空间使用目录
mkdir -p ~/catkin_ws/src
进入创建的目录
cd ~/catkin_ws/
使用catkin_make创建工作空间
catkin_make
2.4 ROS软件包
2.4.1 软件包的组成
- CMakeList.txt: 配置编译规则,比如源文件、依赖项、目标文件
- package.xml: 包信息,包括:包名、版本、依赖项
- msg: 消息通信格式文件
- srv: 服务通信格式文件
- include: 源文件
- launch: 可一次性运行多个节点
- scripts: 储存python文件,.py、.sh
- src: 储存C++源文件
2.4.2 创建软件包
2.4.2.1 创建软件包
- 进入创建的工作空间
cd ~/catkin_ws/src
- 创建软件包
catkin_create_pkg <package_name> [depend1] [depend2] [depend3]
例如:catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
- 构建软件包
构建软件包也就是编译创建好的软件包
cd ~/catkin_ws
catkin_make
catkin_make首先输出它所使用到的每个空间所在的路径。
工作空间构建完成后,在devel子目录下创建了一个与你通常在/opt/ros/$ROSDISTRO_NAME下看到的目录结构类似的结构。
- 工作空间添加到ROS环境中
. ~/catkin_ws/devel/setup.bash
2.4.2.2 查看包依赖
- 一级依赖
可以使用rospack命令工具来查看这些一级依赖包。
rospack depends1 beginner_tutorials/包名
rospack列出了在运行catkin_create_pkg命令时作为参数的依赖包,这些依赖关系存储在package.xml文件中。
roscd beginner_tutorials
cat package.xml
输出
<package>
...
<buildtool_depend>catkin</buildtool_depend>
<build_depend>roscpp</build_depend>
<build_depend>rospy</build_depend>
<build_depend>std_msgs</build_depend>
...
</package>
- 间接依赖
在很多情况下,一个依赖包还会有它自己的依赖关系
rospack depends1 rospy
输出
genpy
roscpp
rosgraph
rosgraph_msgs
roslib
std_msgs