介绍ROS2节点启动的launch文件
介绍ROS2节点启动的launch文件
当使用ROS 2启动文件(launch文件)时,可以使用Python或C++编写。下面是一个示例,展示如何编写一个使用C++的ROS 2启动文件。
假设我们有一个名为my_node的节点,它是用C++编写的。我们将创建一个名为my_launch.cpp的文件来定义启动文件。
1 | |
上述代码片段演示了一个简单的ROS 2 C++节点。要将其作为一个启动文件运行,我们需要创建一个额外的启动文件(通常使用XML格式)来调用C++节点。
例如,我们可以创建一个名为my_launch.launch.py的Python启动文件,该文件将调用上述C++节点。1
2
3
4
5
6
7
8
9
10
11
12
13
14import launch
import launch.actions
import launch_ros.actions
def generate_launch_description():
return launch.LaunchDescription([
# 启动C++节点
launch_ros.actions.Node(
package='my_package',
executable='my_node',
name='my_node'
),
])
在上述Python启动文件中,我们使用launch_ros.actions.Node类来指定要启动的C++节点的信息。在这个例子中,我们指定了节点的包名(my_package),可执行文件名(my_node),以及节点的名称(my_node)。
使用以上两个文件,你可以通过运行以下命令来启动ROS 2 C++节点:1
2ros2 launch my_package my_launch.launch.py
请确保将my_package替换为你的包名,并确保启动文件和C++节点文件位于正确的位置。
启动时加载参数
要在ROS 2启动文件中加载参数,你可以使用launch_ros.actions.Node类的parameters参数。该参数允许你指定要在启动节点时加载的参数。
以下是一个示例,展示如何在C++节点启动时加载参数:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20#include <rclcpp/rclcpp.hpp>
int main(int argc, char** argv)
{
rclcpp::init(argc, argv);
auto node = rclcpp::Node::make_shared("my_node");
// 读取参数值
int my_param;
node->get_parameter("my_param", my_param);
// 执行节点逻辑,使用加载的参数
// ...
rclcpp::spin(node);
rclcpp::shutdown();
return 0;
}
在上述示例中,我们在节点启动时使用node->get_parameter()函数读取了名为my_param的参数值。
接下来,我们将修改启动文件my_launch.launch.py,以便在启动节点时加载参数。我们将使用launch.substitutions.LaunchConfiguration类来获取启动文件中定义的参数值,并将其传递给节点。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18import launch
import launch.actions
import launch.substitutions
import launch_ros.actions
def generate_launch_description():
return launch.LaunchDescription([
launch_ros.actions.Node(
package='my_package',
executable='my_node',
name='my_node',
# 加载参数
parameters=[{
'my_param': launch.substitutions.LaunchConfiguration('my_param_value')
}]
),
])
在上述示例中,我们将my_param参数设置为launch.substitutions.LaunchConfiguration(‘my_param_value’)。这将获取名为my_param_value的启动文件参数的值,并将其作为my_param参数的值传递给C++节点。
最后,你可以在运行启动文件时传递参数值。例如,使用以下命令启动节点并传递参数值:1
2ros2 launch my_package my_launch.launch.py my_param_value:=42
在上述命令中,我们将参数my_param_value设置为42。这个值将被加载到节点的my_param参数中。
参数从yaml文件中加载
如果你希望将参数存储在YAML文件中,并在ROS 2启动文件中加载这些参数,可以使用ros2param工具来实现。
以下是一个示例,演示如何使用YAML文件加载参数:
- 创建一个名为params.yaml的YAML文件,例如
1
2
3my_param: 42
another_param: "hello" - 修改启动文件my_launch.launch.py,使用ros2param工具加载YAML文件中的参数:
1 | |
在上述示例中,我们首先使用DeclareLaunchArgument声明了一个名为params_file的启动参数,用于指定参数文件的路径。默认情况下,参数文件路径被设置为params.yaml。
然后,我们使用launch.actions.ExecuteProcess来执行ros2 param load命令,将参数从YAML文件加载到节点。LaunchConfiguration(‘params_file’)用于获取启动参数中指定的参数文件路径。
最后,我们使用launch_ros.actions.Node启动C++节点。
现在,你可以在启动时通过命令行参数传递参数文件的路径,如下所示:1
2ros2 launch my_package my_launch.launch.py params_file:=/path/to/params.yaml
这样,启动文件将使用指定的参数文件加载参数,并将其传递给节点。
请确保将my_package替换为你的包名,并将/path/to/params.yaml替换为实际的参数文件路径。