ROS2学习笔记:C++最小支持Parameters的节点

通过如下命令新建一个package框架:

ros2 pkg create --build-type ament_cmake --license Apache-2.0 cpp_parameters --dependencies rclcpp

支持Parameters的最小节点源代码:

#include <chrono>
#include <functional>
#include <string>

#include <rclcpp/rclcpp.hpp>

using namespace std::chrono_literals;
class MinimalParam : public rclcpp::Node
{
public:
  MinimalParam()
  : Node("minimal_param_node")
  {
    auto param_desc = rcl_interfaces::msg::ParameterDescriptor{};
    param_desc.description = "This parameter is mine!";

    this->declare_parameter("my_parameter", "world", param_desc);

    timer_ = this->create_wall_timer(
      1000ms, std::bind(&MinimalParam::timer_callback, this));
  }
void timer_callback() { std::string my_param = this->get_parameter("my_parameter").as_string(); RCLCPP_INFO(this->get_logger(), "Hello %s!", my_param.c_str()); std::vector<rclcpp::Parameter> all_new_parameters{rclcpp::Parameter("my_parameter", "world")}; this->set_parameters(all_new_parameters); } private: rclcpp::TimerBase::SharedPtr timer_; }; int main(int argc, char ** argv) { rclcpp::init(argc, argv); rclcpp::spin(std::make_shared<MinimalParam>()); rclcpp::shutdown(); return 0; }

 

在CMakeList.txt需要加入相应的编译参数:

add_executable(minimal_param_node src/cpp_parameters_node.cpp)
ament_target_dependencies(minimal_param_node rclcpp)

install(TARGETS
    minimal_param_node
  DESTINATION lib/${PROJECT_NAME}
)

然后,查找依赖是否满足、编译,运行:

rosdep install -i --from-path src --rosdistro humble -y
colcon build --packages-select cpp_parameters
source install/setup.bash

最后,一个窗口运行,一个窗口通过外部改个参数试下:

ros2 run cpp_parameters minimal_param_node
ros2 param set /minimal_param_node my_parameter earth

当然参数用的最多的时候不是在线改,而是通过配置文件。下边脚本是launch改参数的示例,在ros2_ws/src/cpp_parameters/ 创建一个文件夹叫做launch,然后创建一个文件叫做cpp_parameters_launch.py:

from launch import LaunchDescription
from launch_ros.actions import Node


def generate_launch_description():
    return LaunchDescription([
        Node(
            package='cpp_parameters',
            executable='minimal_param_node',
            name='custom_minimal_param_node',
            output='screen',
            emulate_tty=True,
            parameters=[
                {'my_parameter': 'earth'}
            ]
        )
    ])

编译,运行,即可看到效果:

colcon build --packages-select cpp_parameters
source install/setup.bash

 

Leave a Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.