ROS 2官方文档(基于humble版本)学习笔记(四)
- 2.客户端库
- 使用colcon构建包(package)
- 创建工作空间(workspace)
- 构建工作空间
- 执行测试(tests)
- 导入环境(source the environment)
- 试一下演示程序
- 创建自己的包(package)
- 设置colcon_cd
- 小贴士
- 创建一个工作空间(workspace)
- 设置叠加层(overlay)
- 修改覆盖层
- 创建软件包
- 什么是ROS2软件包(package)
- 一个ROS 2软件包包含什么
- 工作空间中的软件包
不好意思,停更了好久,官方文档是看了,只是没有时间整理,最近在外地出差,周末都在瞎忙,今天刚好有时间把接下来的部分总结一下,下面才是使用ROS库进行开发的开始。
2.客户端库
使用colcon构建包(package)
该章介绍如何使用colcon创建和构建一个ROS 2的工作空间(workspace)。colcon是 ROS构建工具catkin_make, catkin_make_isolated, catkin_tools and ament_tools的迭代.
使用如下命令安装colcon。
sudo apt install python3-colcon-common-extensions
一个ROS 工作空间有其特殊的目录结构。通常在工作空间中有一个空的src目录,这个目录下存放的是ROS包的源代码。colcon会在src同级的目录下创建build、install、log三个目录(比catkin构建的目录缺少了devel)。顾名思义,build目录是存放构建过程中产生的中间文件的,其中会为每一个包创建一个独立的目录。install目录存放的是每个包的安装文件,同样的每个包一个独立的目录。log目录中存放的是colcon构建时产生的日志文件。
创建工作空间(workspace)
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
可以将example仓库的源码放到src目录下
git clone https://github.com/ros2/examples src/examples -b humble
就像我们在学习笔记(一)中安装完ROS 2之后写到.bashrc中的那句
source /opt/ros/humble/setup.bash
通过这句命令我们创建了ROS 2的底层环境,这个底层环境将为我们的工作空间提供必要的构建依赖。我们的工作空间ros2_ws将成为ROS 2环境之上的覆盖层环境。当你打算迭代少量软件包时,建议使用一个覆盖层,通常,建议当您打算迭代少量软件包时使用覆盖层,而不是将所有软件包放入相同的工作区中。
构建工作空间
在工作空间的根目录(ros2_ws)执行colcon build
命令,同时还可以使用如下参数。
--packages-up-to'
构建所需的包及其所有依赖项,而不是整个工作空间(节省时间)
--symlink-install
在您调整Python脚本时,无需每次重新构建
--event-handlers console_direct+
在构建时显示控制台输出(否则可在log
目录中找到)
--executor sequential
一个包一个包的处理而不是并行处理。
构建完成就会看到工作空间目录下有src,build,install,log四个目录。
执行测试(tests)
通过如下命令执行我们刚刚构建的包中的测试。
colcon test
导入环境(source the environment)
当colcon构建成功后,输出都放在install目录下,在你使用安装好的可执行程序和库之前,需要把他们加到你的path和库path中。幸运的是colcon会在install目录下产生bash/bat文件,来帮助你建立环境。这些文件将会把所有需要的元素添加到你的path和库path中,同时提供包导出的任何bash或者shell命令。
source install/setup.bash
试一下演示程序
通过执行如下命令分别启动订阅者和发布者演示程序:
ros2 run examples_rclcpp_minimal_subscriber subscriber_member_function
ros2 run examples_rclcpp_minimal_publisher publisher_member_function
创建自己的包(package)
colcon使用的包文件是package.xml,遵循REP149定义的规范。
colcon支持多种构建类型。建议的构建类型是ament_cmake
和ament_python
,也支持纯cmake包。
方便起见,我们可以使用ros pkg create
工具基于模板创建一个新包。
设置colcon_cd
这个命令可以快速的从当前目录切换到包目录,例如执行colcon_cd some_ros_package
就会切换到~/ros2_ws/src/some_ros_package
目录,只需进行如下配置:
echo "source /usr/share/colcon_cd/function/colcon_cd.sh" >> ~/.bashrc
echo "export _colcon_cd_root=/opt/ros/humble/" >> ~/.bashrc
小贴士
如果您不想构建特定的软件包,将一个名为colcon_ignore的空文件放在目录中,则不会索引。
如果要避免在CMAKE软件包中配置和建造测试(tests),则可以通过:-CMAKE -ARGS -DBUILD_TESTING = 0。
如果你想要从一个包单独运行一个特定的测试程序,可以执行下面的命令:
colcon test --packages-select YOUR_PKG_NAME --ctest-args -R YOUR_TEST_IN_PKG
创建一个工作空间(workspace)
#导入环境
source /opt/ros/humble/setup.bash
#创建工作空间目录
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
#clone一份示例代码
git clone https://github.com/ros/ros_tutorials.git -b humble
#解决依赖,每次clone一份代码之后,检查一下依赖,这是一个好习惯
# cd if you're still in the ``src`` directory with the ``ros_tutorials`` clone
cd ..
rosdep install -i --from-path src --rosdistro humble -y
#如果您已经具备了所有的依赖项,控制台会返回:
#All required rosdeps installed successfully
colcon build
执行结果如下图:
设置叠加层(overlay)
在设置叠加层之前,非常重要的一点是要打开一个新的终端,与构建工作空间的终端分开。在同一个终端中设置叠加层或在设置叠加层的终端中进行构建可能会导致复杂的问题。
在新的终端中,将你的主要ROS 2环境作为“underlay”来源化,这样你就可以在其“之上”构建叠加层(overlay):
source /opt/ros/humble/setup.bash
进入你的工作空间的根目录:
cd ~/ros2_ws
在根目录中,将你的叠加层源化:
source install/local_setup.bash
将
local_setup
的叠加层源化,只是把叠加层可用的软件包添加到您的环境中。setup
源同时包含覆盖层和创建它的底层,使您能够同时利用两个工作区。
修改覆盖层
你可以在覆盖层中单独修改和重建软件包,而不影响底层。
覆盖层优先于底层。
建议在处理少量包时使用覆盖层,这样您就不必将所有内容放在同一个工作空间中,并且不必在每次迭代中重新构建一个庞大的工作空间。
创建软件包
什么是ROS2软件包(package)
软件包(package)是ROS 2代码的组织单元。如果您希望能够安装代码或与他人共享代码,那么您需要将其组织成一个包。通过包,您可以发布ROS 2工作并允许其他人轻松构建和使用它。
ROS 2中的包创建使用ament作为构建系统和colcon作为构建工具。您可以使用CMake或Python创建一个包,这两种方式得到官方支持,尽管还存在其他构建类型。
一个ROS 2软件包包含什么
CMake
CMakeLists.txt
文件,描述了如何构建软件包内的代码- 包含该包的公共头文件的 include/<package_name> 目录
- 包含有关该包的元信息的 package.xml 文件
- 包含该包源代码的 src 目录
Python
- 包含有关该包的元信息的
package.xml
文件- 用于标记该包的
resource/<package_name>
文件- 当一个软件包包含可执行文件时,需要使用
setup.cfg
,以便ros2 run
能够找到它们setup.py
包含了安装该软件包的指令<package_name>
是与软件包同名的目录,被ROS 2工具用于查找软件包,包含__init__.py
工作空间中的软件包
一个工作空间可以包含任意多个软件包,每个软件包位于自己的文件夹中。您还可以在一个工作空间中拥有不同构建类型的软件包(如CMake、Python等)。但不能嵌套软件包。
最佳实践是在工作空间中创建一个src
文件夹,并在其中创建您的软件包。这样可以保持工作空间的顶层“清洁”。
在ROS 2中创建新包的命令语法如下:
CMake:
ros2 pkg create --build-type ament_python <package_name>
Python:
ros2 pkg create --build-type ament_python <package_name>