0. 前言
-
为了将深度学习模型部署到ROS系统中,接下去一段时间会学习很多ROS相关的内容,希望通过一段时间的学习,能达到侯捷老师说的“心中自有丘壑”。
-
本文内容:
- ROS 的安装
- ROS 项目的构建与 hello world 项目的运行
1. ROS 安装
-
参考资料
-
ROS 的版本
-
根据操作系统选择LTS(长期稳定、支持版)即可
- Ubuntu 16.04 对应 Kinetic,18.04 对应 Melodic,20.04 对应 Neotic
-
每个 LTS 可分为
- 桌面完整版,如
ros-melodic-desktop-full
,推荐版本,包含所有内容 - 桌面版,如
ros-melodic-desktop
,包含 ROS/rqt/rviz和机器人通用库,不包括2D/3D模拟与感知、导航等。 - 基础包,如
ros-melodic-ros-base
,包含ROS包,构建和通信库,没有图形界面工具。 - 单独的包,如
ros-melodic-PACKAGE
,单独指定某个软件包。
- 桌面完整版,如
-
-
安装流程
# 设置 ROS 源(清华源)
# 所有可永远可查看 http://wiki.ros.org/ROS/Installation/UbuntuMirrors
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'
# 设置密钥
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
# 安装
sudo apt update
# sudo apt install ros-kinetic-desktop-full
sudo apt install ros-melodic-desktop-full
# sudo apt install ros-noetic-desktop-full
# rosdep 配置(这一步需要翻墙)
sudo rosdep init
rosdep update
# 设置环境(请注意,如果是在自己的服务器上,谨慎执行下一步,这有可能会影响python环境)
# echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
# echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
- 注意:
- rosdep 安装需要翻墙,但我目前用不到,不安装也关系不大。
- 往
~/.bashrc
中添加环境配置时需要谨慎,因为添加配置后可能会影响系统的 Python 环境。- 碰到过这个问题,但没探究过原因
2. Hello World 程序
- 为了成功运行一个ROS程序,要做哪些工作:
- 创建工作区(workspace)
- 在工作区内创建 pakcage,并编译
- 运行编译好的 package
2.1 创建工作区
- 创建工作区文件夹,可以随意取名,取名一般都类似
catkin_ws
- 在工作区文件夹中创建package源码文件夹
src
,必须是这个名字 - 在
catkin_ws/src
目录下运行catkin_init_workspace
- 如果
catkin_init_workspace
命令不存在,意味着ros环境没有搭建好,需要运行source /opt/ros/melodic/setup.bash
,其中melodic
需要改为当前安装的ros版本
- 如果
- 安装成功后会自动在
src
目录下生成CMakeLists.txt
2.2 创建 package
-
参考资料:中文官方文档-创建ROS软件包
-
流程:在
catkin_ws/src
目录下执行catkin_create_pkg <package_name> [depend1] [depend2] [depend3]
package_name
就是新建的包名称- 后面的
depend
代表各种依赖,如roscpp
,std_msgs
等
-
构建成功后,会在
catkin_ws/src
目录下创建一个名为<package_name>
的文件夹,文件夹中包含CMakeLists.txt
和package.xml
两个文件。、
pkg_name/
CMakeLists.txt
package.xml
- 如果在
catkin_ws/src
下创建多个 package,则目录结构类似于
catkin_ws/ -- WORKSPACE
src/ -- SOURCE SPACE
CMakeLists.txt -- 'Toplevel' CMake file, provided by catkin
package_1/
CMakeLists.txt -- CMakeLists.txt file for package_1
package.xml -- Package manifest for package_1
...
package_n/
CMakeLists.txt -- CMakeLists.txt file for package_n
package.xml -- Package manifest for package_n
package.xml
详解(官方文档)- 在
<package>
节点下有许多常用节点,如<name>
:package名称,注意,别修改<version>
:package版本<description>
:简单文字描述<maintainer>
:维护者名称与邮箱<license>
:许可证
- 最主要的节点就是依赖项相关标签,可分为:
buildtool_depend
:构建工具依赖项,即指定构建功能包的工具,默认使用 catkin,一般也不用修改。build_depend
:构建项目(compile time)依赖项exec_depend
:运行时(runtime)依赖项depend
:构建与运行时依赖项,等价于同时指定build_depend
和exec_depend
test_depend
:测试doc_depend
:文档build_export_depend
:导出
- 在
catkin_create_pkg <package_name> [depend1] [depend2] [depend3]
中指定的 depend1/depend2/depend3 会自动添加到build_depend
和exec_depend
中
- 在
2.3 编译 package
- 参考资料:
- 准备工作
- 已经创建好 package
- package中的源码已经完成
- 源码可以参考这里
- 编译流程:在
catkin_ws
目录下执行catkin_make [make_targets] [-DCMAKE_VARIABLES=...]
- 可通过
catkin_make install
要执行类似make install
- 执行完成后会生成
catkin_ws/build
和catkin_ws/devel
两个文件夹
- 可通过
- 注意事项:
- 如果
catkin_make
命令不存在,记得先source /opt/ros/melodic/setup.bash
- 必须在
catkin_ws
目录下执行上述命令 - 上述命令要求源码路径在
catkin_ws/src
目录下 - 如果有多个包且存在依赖关系,那直接运行
catkin_make
可能会出错。即,catkin_make
不会自动解析pakcage间的依赖
- 如果
2.4 运行 package
- 参考资料:
- ROS中图的概念
- ROS进程组成了一个点对点网络 ,也可以看成是一个计算图,计算图中有节点、消息、话题、主节点、rosout、roscore等组成部分。
- 节点(nodes),是可执行文件
- 由ros功能包(package)创建。即功能包CMakeLists.txt中定义的
add_executable
。 - 使用ROS客户端(即C++或Python API)实现。
- 可与其他节点通信。
- 节点可以发布或订阅话题,也可以提供或使用服务。
- 由ros功能包(package)创建。即功能包CMakeLists.txt中定义的
- 消息(Messages),订阅或发布话题时使用的ROS数据结构。
- 可使用一些内置数据结构,如 String、Image。
- 可以自己定义结构。
- 话题(Topics),节点发布、订阅消息的位置
- 典型的生产者、消费者模式实现
- 主节点(Master),ROS命名服务,如帮助节点发现彼此
- roscout:类似于ROS中的stdout/stderr
- roscore:主节点+rosout+参数服务器
- 通过rosrun运行节点
- 准备:
roscore
必须启动 - 命令
rosrun [package_name] [node_name]
node_name
就是可执行文件的的名字
- 准备: