目标:创建一个工作空间,学习如何设置开发和测试覆盖层(overlay)。
背景
工作空间是一个包含了ROS2的包的路径,在使用ros2之前首先需要source相应的ROS2工作空间来使用对应的包。
overlay是一个可以添加新的包而不影响现有ROS2工作区,即underlay的工作空间;
underlay中包含着overlay的依赖包;overlay中的包会覆盖underlay中的包;
也可以存在多层的overlay和underlay,其中每个overlay会使用其父underlay的包。
任务
1、source ROS2环境
你的主ros2安装会是本课程中的underlay。(注意一个underlay不一定是ros2的主安装);
source /opt/ros/humble/setup.bash
2、创建一个新的目录
mkdir -p ~/ros2_ws/src cd ~/ros2_ws/src
3、克隆一个样本包进来
git clone https://github.com/ros/ros_tutorials.git -b humble
4、解析依赖
# cd if you're still in the ``src`` directory with the ``ros_tutorials`` clone cd .. rosdep install -i --from-path src --rosdistro humble -y
如果有了所有依赖,则会出现
在package.xml文件中声明了他们的依赖。
5、使用colcon来编译工作空间
colcon build
返回 Starting >>> turtlesim Finished <<< turtlesim [5.49s] Summary: 1 package finished [5.58s]
colcon build其他有用的参数
--packages-up-to 构建所需的包及其所有依赖项,但不是整个工作区(节省时间) --symlink-install 避免每次调整python脚本时都需要重新构建 --event-handlers console_direct+ 显示生成时的控制台输出(否则可以在日志目录中找到)
编译完成,工作空间下,有如下的目录
build install log src
install里面存放了你工作空间的安装文件,
6、source overlay
在source overlay之前,打开一个新的终端,与构建工作区的终端分开,这一点非常重要。在与编译相同的终端中source一个overlay,或者同样,编译在一个overlay的地方source,可能会产生复杂的问题。
在新的终端,source你主要的ros2环境作为underlay,因此你可以在underlay上构建overlay。
source /opt/ros/humble/setup.bash
然后再source
source install/local_setup.bash
注意:
source overlay的local_setup只会将overlay中可用的包添加到你的环境。source overlay里面的setup,允许你使用两个工作空间。
先source主目录的setup,再source具体工作空间的local_setup,跟直接source具体工作空间的setup是一样的。
在具体的工作空间中运行如下:
ros2 run turtlesim turtlesim_node
但是怎么知道这是overlay中运行的turtlesim还是underlay中的turtlesim呢?
更改overlay中的turtlesim,可以看到效果:
你可以更改和重新编译overlay中的包与underlay分开;
overlay的优先级高于underlay;
7、更改overlay
可以通过编辑turtlesim窗口中的标题bar来更改overlay中的turtlesim;编辑文件~/ros2_ws/src/ros_tutorials/turtlesim/src/turtle_frame.cpp
在52行,可以看到函数setWindowTitle("TurtleSim");将Turtlesim更改为MyTurtlesim,然后保存文件
重新编译,运行
colcon build ros2 run turtlesim turtlesim_node
总结
本教程,你source了你主要的ros2作为你的underlay,然后在一个新的工作空间中创建一个overlay。overlay被预先设置到path,优先级由于underlay。
标签:Beginner,overlay,setup,libraries,source,Client,turtlesim,underlay,ros2 From: https://www.cnblogs.com/gary-guo/p/17451093.html