通过如下命令新建一个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