问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

ROS入门教程:安装配置与文件系统详解

创作时间:
作者:
@小白创作中心

ROS入门教程:安装配置与文件系统详解

引用
CSDN
1.
https://blog.csdn.net/A1127409282/article/details/139675229

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  

在执行这两步时,通常会出现异常,相关解决办法参考连接:

  • 解决sudo rosdep init和rosdep
    update各种疑难杂症
  • rosdep init ROS安装问题解决方案

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  
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号