当我们自己编写节点功能时,总有一些配置需要在启动过程中通过外部参数来配置,这一篇我们就来一起学习如何在C++的类和Launch文件中使用ROS2的参数功能。
1. 创建功能包
ros2 pkg create --build-type ament_cmake cpp_parameters --dependencies rclcpp

<description>C++ parameter tutorial</description>
<maintainer email="huchunxu@guyuehome.com">Hu Chunxu</maintainer>
<license>Apache License 2.0</license>
2. 编写C++代码
#include <rclcpp/rclcpp.hpp>
#include <chrono>
#include <string>
#include <functional>
using namespace std::chrono_literals;
class ParametersClass: public rclcpp::Node
{
public:
ParametersClass()
: Node("parameter_node")
{
this->declare_parameter<std::string>("my_parameter", "world");
timer_ = this->create_wall_timer(
1000ms, std::bind(&ParametersClass::respond, this));
}
void respond()
{
this->get_parameter("my_parameter", parameter_string_);
RCLCPP_INFO(this->get_logger(), "Hello %s", parameter_string_.c_str());
}
private:
std::string parameter_string_;
rclcpp::TimerBase::SharedPtr timer_;
};
int main(int argc, char** argv)
{
rclcpp::init(argc, argv);
rclcpp::spin(std::make_shared<ParametersClass>());
rclcpp::shutdown();
return 0;
}
2.1 代码解析
ParametersClass()
: Node("parameter_node")
{
this->declare_parameter<std::string>("my_parameter", "world");
timer_ = this->create_wall_timer(
1000ms, std::bind(&ParametersClass::respond, this));
}
void respond()
{
this->get_parameter("my_parameter", parameter_string_);
RCLCPP_INFO(this->get_logger(), "Hello %s", parameter_string_.c_str());
}
int main(int argc, char** argv)
{
rclcpp::init(argc, argv);
rclcpp::spin(std::make_shared<ParametersClass>());
rclcpp::shutdown();
return 0;
}
2.2 添加编译配置
add_executable(parameter_node src/cpp_parameters_node.cpp)
ament_target_dependencies(parameter_node rclcpp)
install(TARGETS
parameter_node
DESTINATION lib/${PROJECT_NAME}
)
3.编译运行
rosdep install -i --from-path src --rosdistro foxy -y
colcon build --packages-select cpp_parameters

. install/setup.bash
ros2 run cpp_parameters parameter_node

3.1 通过终端修改参数值
ros2 param list

ros2 param set /parameter_node my_parameter earth

3.2 通过Launch文件修改参数值
from launch import LaunchDescription
from launch_ros.actions import Node
def generate_launch_description():
return LaunchDescription([
Node(
package="cpp_parameters",
executable="parameter_node",
name="custom_parameter_node",
output="screen",
emulate_tty=True,
parameters=[
{"my_parameter": "earth"}
]
)
])
install(
DIRECTORY launch
DESTINATION share/${PROJECT_NAME}
)
colcon build --packages-select cpp_parameters
. install/setup.bash
ros2 launch cpp_parameters cpp_parameters_launch.py

评论(0)
您还未登录,请登录后发表或查看评论