将启动文件集成到 ROS 2 包中
目标:将启动文件添加到 ROS 2 包
教程级别:中级
时间:10 分钟
先决条件
您应该已经阅读了有关如何 创建 ROS 2 包 的教程。
与往常一样,不要忘记在 每次打开新终端 中获取 ROS 2。
背景
在 上一个教程 中,我们了解了如何编写独立启动文件。
本教程将展示如何将启动文件添加到现有包,以及通常使用的约定。
任务
1 创建包
为包创建一个工作区:
mkdir -p launch_ws/src
cd launch_ws/src
mkdir -p launch_ws/src
cd launch_ws/src
md launch_ws\src
cd launch_ws\src
ros2 pkg create --build-type ament_python --license Apache-2.0 py_launch_example
ros2 pkg create --build-type ament_cmake --license Apache-2.0 cpp_launch_example
2 创建用于保存启动文件的结构
按照惯例,软件包的所有启动文件都存储在软件包内的“launch”目录中。 确保在上面创建的软件包的顶层创建一个“launch”目录。
For Python packages, the directory containing your package should look like this:
src/
py_launch_example/
launch/
package.xml
py_launch_example/
resource/
setup.cfg
setup.py
test/
为了使 colcon 能够找到并使用我们的启动文件,我们需要告知 Python 的安装工具它们的存在。
为此,打开“setup.py”文件,在顶部添加必要的“import”语句,并将启动文件包含到“setup”的“data_files”参数中:
import os
from glob import glob
# Other imports ...
package_name = 'py_launch_example'
setup(
# Other parameters ...
data_files=[
# ... Other data files
# Include all launch files.
(os.path.join('share', package_name, 'launch'), glob(os.path.join('launch', '*launch.[pxy][yma]*')))
]
)
对于 C++ 包,我们只需通过添加以下内容来调整“CMakeLists.txt”文件:
# Install launch files.
install(DIRECTORY
launch
DESTINATION share/${PROJECT_NAME}/
)
to the end of the file (but before ament_package()
).
3 编写启动文件
在您的“launch”目录中,创建一个名为“my_script_launch.py”的新启动文件。 建议使用“_launch.py”作为 Python 启动文件的文件后缀,但这不是必需的。 但是,启动文件名需要以“launch.py”结尾,才能被“ros2 launch”识别和自动完成。
您的启动文件应该定义“generate_launch_description()”函数,该函数返回“ros2 launch”动词使用的“launch.LaunchDescription()”。
import launch
import launch_ros.actions
def generate_launch_description():
return launch.LaunchDescription([
launch_ros.actions.Node(
package='demo_nodes_cpp',
executable='talker',
name='talker'),
])
在您的“launch”目录中,创建一个名为“my_script_launch.xml”的新启动文件。 建议使用“_launch.xml”作为 XML 启动文件的文件后缀,但这不是必需的。
<launch>
<node pkg="demo_nodes_cpp" exec="talker" name="talker"/>
</launch>
在您的“launch”目录中,创建一个名为“my_script_launch.yaml”的新启动文件。 建议使用“_launch.yaml”作为 YAML 启动文件的文件后缀,但这不是必需的。
launch:
- node:
pkg: "demo_nodes_cpp"
exec: "talker"
name: "talker"
4 构建并运行启动文件
转到工作区的顶层,然后构建它:
colcon build
在“colcon build”成功并且您获取了工作区之后,您应该能够按如下方式运行启动文件:
ros2 launch py_launch_example my_script_launch.py
ros2 launch py_launch_example my_script_launch.xml
ros2 launch py_launch_example my_script_launch.yaml
ros2 launch cpp_launch_example my_script_launch.py
ros2 launch cpp_launch_example my_script_launch.xml
ros2 launch cpp_launch_example my_script_launch.yaml
文档
启动文档 提供了有关 launch_ros
中也使用的概念的更多详细信息。
即将提供启动功能的更多文档/示例。 同时查看源代码(https://github.com/ros2/launch 和 https://github.com/ros2/launch_ros)。