为什么加“通信方式”引号,因为我觉得他就不算通信,最多最多就是一个动态加载参数方式
所以ros通信方式就三种,topic service action 别犟,犟就是你对!
常用的 param参数方法如下:
# declare_parameter 声明和初始化一个参数
# describe_parameter(name) 通过参数名字获取参数的描述
# get_parameter 通过参数名字获取一个参数
# set_parameter 设置参数的值
1、代码创建
paramter_test.cpp
#include <chrono>
#include "rclcpp/rclcpp.hpp"class ParametersNode : public rclcpp::Node
{
public:// 构造函数,有一个参数为节点名称explicit ParametersNode(std::string name) : Node(name){RCLCPP_INFO(this->get_logger(), "node start:%s.", name.c_str());this->declare_parameter("rcl_log_level", 0); /*声明参数*/this->get_parameter("rcl_log_level", log_level); /*获取参数*//*设置日志级别*/this->get_logger().set_level((rclcpp::Logger::Level)log_level);using namespace std::literals::chrono_literals;timer_ = this->create_wall_timer(500ms, std::bind(&ParametersNode::timer_callback, this));}private:int log_level;rclcpp::TimerBase::SharedPtr timer_;void timer_callback(){this->get_parameter("rcl_log_level", log_level); /*获取参数*//*设置日志级别*/this->get_logger().set_level((rclcpp::Logger::Level)log_level);std::cout << "*****************" << std::endl;RCLCPP_DEBUG(this->get_logger(), "DEBUG LOG!");RCLCPP_INFO(this->get_logger(), "INFO LOG!");RCLCPP_WARN(this->get_logger(), "WARN LOG!");RCLCPP_ERROR(this->get_logger(), "ERROR LOG!");RCLCPP_FATAL(this->get_logger(), "FATAL LOG!");}
};int main(int argc, char** argv)
{rclcpp::init(argc, argv);/*创建对应节点的共享指针对象*/auto node = std::make_shared<ParametersNode>("parameter_node");/* 运行节点,并检测退出信号*/rclcpp::spin(node);rclcpp::shutdown();return 0;
}
2、测试
正常启动:
ros2 run param_moudle paramter_node
启动前更新参数:
ros2 run param_moudle paramter_node --ros-args -p rcl_log_level:=10
运行中更改参数:
ros2 param set /parameter_node rcl_log_level 50