목차
1. 먼저 다음 명령 줄을 통해 dynamic_tutorials 함수 패키지를 만듭니다.
2. 동적 매개 변수 구성을 수행하려면 구성 파일을 작성해야합니다.
코드 구조
구성 파일 만들기
1. 먼저 다음 명령 줄을 통해 dynamic_tutorials 함수 패키지를 만듭니다.
catkin_create_pkg dynamic_tutorials rospy roscpp dynamic_reconfigure
2. 동적 매개 변수 구성을 수행하려면 구성 파일을 작성해야합니다.
기능 패키지에 구성 파일을 배치 할 cfg 디렉토리를 생성 한 다음 그 안에 구성 파일 Tutorials.cfg를 생성합니다.
#!/usr/bin/env python
PACKAGE = "dynamic_tutorials"
from dynamic_reconfigure.parameter_generator_catkin import *
gen = ParameterGenerator()
gen.add("int_param", int_t, 0, "An Integer parameter", 50, 0, 100)
gen.add("double_param", double_t, 0, "A double parameter", .5, 0, 1)
gen.add("str_param", str_t, 0, "A string parameter", "Hello World")
gen.add("bool_param", bool_t, 0, "A Boolean parameter", True)
size_enum = gen.enum([ gen.const("Small", int_t, 0, "A small constant"),
gen.const("Medium", int_t, 1, "A medium constant"),
gen.const("Large", int_t, 2, "A large constant"),
gen.const("ExtraLarge", int_t, 3, "An extra large constant")], "An enum to set size")
gen.add("size", int_t, 0, "A size parameter which is edited via an enum", 1, 0, 3, edit_method=size_enum)
exit(gen.generate(PACKAGE, "dynamic_tutorials", "Tutorials"))
자세한 구성 파일 :
#! / usr / bin / env python
PACKAGE = "dynamic_tutorials"
↑↑↑↑↑ 다음은 동적 매개 변수 구성 파일에 필요한 두 문장 설정으로, 파이썬이 인터프리터임을 나타냅니다. PACKAGE는 패키지의 패키지 이름입니다.
dynamic_reconfigure.parameter_generator_catkin 가져 오기에서 *
↑↑↑↑↑ dynamic_reconfigure 함수 패키지에서 제공하는 매개 변수 생성기를 가져와야 함)
gen = ParameterGenerator ()
↑↑↑↑↑ 파라미터 생성기를 만든 다음 동적으로 구성해야하는 파라미터를 정의 할 수 있습니다.
gen.add ( "int_param", int_t, 0, "정수 매개 변수", 50, 0, 100)
여기에는 4 가지 유형의 매개 변수가 정의되어 있습니다. 생성 된 매개 변수는 매개 변수 생성기의
add (name, type, level, description, default, min, max)
메소드를 사용하여 구현할 수 있습니다. 메소드에서 전달되는 매개 변수의 의미는 다음과 같습니다. 다음과 같습니다.
- name : 문자열로 설명되는 매개 변수 이름.
- type : 매개 변수의 유형을 정의하며 int_t, double_t, str_t 또는 bool_t가 될 수 있습니다.
- level : 콜백 함수에서 마스크를 동적으로 구성하기 위해 매개 변수를 전달해야합니다. 콜백 함수에서 모든 매개 변수의 마스크가 수정되어 매개 변수가 수정되었음을 나타냅니다.
- 설명 : 매개 변수의 역할을 설명하는 문자열.
- 기본값 : 매개 변수의 기본값을 설정합니다.
- min : 선택 사항, 매개 변수의 최소값을 설정합니다. 문자열 및 부울 값에는 적용되지 않습니다.
- max : 선택 사항, 매개 변수의 최대 값을 설정합니다. 문자열 및 부울 값에는 적용되지 않습니다.
이 메서드는 매개 변수 값을 생성하거나 다음 메서드를 사용하여 열거 된 값을 생성 할 수 있습니다.
size_enum = gen.enum ([gen.const ( "Small", int_t, 0, "작은 상수"),
gen.const ( "Medium", int_t, 1, "A medium constant"),
gen.const ( " Large ", int_t, 2,"A large constant "),
gen.const ("ExtraLarge ", int_t, 3,"An extra large constant ")],"An enum to set size ")gen.add ( "size", int_t, 0, "열거 형을 통해 편집되는 크기 매개 변수", 1, 0, 3, edit_method = size_enum)
여기에서는 매개 변수 "size"를 가져 오기 위해 int_t 유형을 정의합니다. 매개 변수 값은 열거를 통해 나열 될 수 있습니다. 열거 형의 정의는 각 열거 형 값의 이름, 유형, 값 및 설명 문자열을 정의하는 데 const 메서드를 사용하는 enum 메서드를 사용하여 정의됩니다.
exit (gen.generate (PACKAGE, "dynamic_tutorials", "튜토리얼"))
코드의 마지막 줄은 모든 C ++ 및 Python 관련 파일을 생성하고 프로그램을 종료하는 데 사용됩니다. 여기서 두 번째 매개 변수는 동적 매개 변수가 실행되는 노드의 이름을 나타내고 세 번째 매개 변수는 파일을 생성하는 데 사용되는 접두사입니다. 구성 파일 이름과 동일해야합니다.
구성 파일이 생성 된 후 다음 명령을 사용하여 구성 파일에 실행 권한을 추가해야합니다. chmod a + x cfg / Tutorials.cfg
3. 컴파일 규칙 추가
메시지 정의와 유사하게 여기에 코드 파일을 생성해야하므로 CMakeLists.txt에 다음 컴파일 규칙을 추가합니다.
#add dynamic reconfigure api
generate_dynamic_reconfigure_options(
cfg/Tutorials.cfg
#...
)
# make sure configure headers are built before any node using them
add_dependencies(dynamic_reconfigure_node ${PROJECT_NAME}_gencfg)
구성 파일과 관련된 작업은 여기서 끝나고 매개 변수의 동적 구성을 호출하기 위해 dynamic_reconfigure_node를 작성해야합니다.
애플리케이션 노드 생성
dynamic_reconfigure_node node server.cpp의 코드 구현은 다음과 같습니다.
#include <ros/ros.h>
#include <dynamic_reconfigure/server.h>
#include "dynamic_tutorials/TutorialsConfig.h"
void callback(dynamic_tutorials::TutorialsConfig &config, uint32_t level) {
ROS_INFO("Reconfigure Request: %d %f %s %s %d",
config.int_param, config.double_param,
config.str_param.c_str(),
config.bool_param?"True":"False",
config.size);
}
int main(int argc, char **argv)
{
ros::init(argc, argv, "dynamic_tutorials");
dynamic_reconfigure::Server<dynamic_tutorials::TutorialsConfig> server;
dynamic_reconfigure::Server<dynamic_tutorials::TutorialsConfig>::CallbackType f;
f = boost::bind(&callback, _1, _2);
server.setCallback(f);
ROS_INFO("Spinning node");
ros::spin();
return 0;
}
자세한 과정 :
#include <ros / ros.h>
#include <dynamic_reconfigure / server.h>
#include "dynamic_tutorials / TutorialsConfig.h"
↑↑↑↑↑ 먼저, 구성 파일에 의해 생성되는 TutorialsConfig.h 헤더 파일을 포함하여 필요한 헤더 파일을 포함해야합니다.
ros :: init (argc, argv, "dynamic_tutorials");
dynamic_reconfigure :: Server <dynamic_tutorials :: TutorialsConfig> 서버;
↑↑↑↑↑ ROS 노드를 초기화 한 후 동적 매개 변수 구성으로 서버 인스턴스를 생성합니다. 매개 변수 구성 유형은 구성 파일에 설명 된 유형입니다. 서버 인스턴스는 클라이언트의 매개 변수 구성 요청을 수신합니다.
dynamic_reconfigure :: Server <dynamic_tutorials :: TutorialsConfig> :: CallbackType f;
f = boost :: bind (& 콜백, _1, _2);
server.setCallback (f);
↑↑↑↑↑ 그런 다음 콜백 함수를 정의하고 콜백 함수를 서버에 바인딩하고 클라이언트가 매개 변수 수정을 요청하면 서버가 콜백 함수로 점프하여 처리 할 수 있습니다.
void callback (dynamic_tutorials :: TutorialsConfig & config, uint32_t level) { ROS_INFO ( "Reconfigure Request : % d % f % s % s % d", config.int_param, config.double_param, config.str_param.c_str (), config.bool_param ? "True": "False", config.size); }
↑↑↑↑↑이 예제에서는 콜백 함수가 복잡하지 않습니다. 콜백 함수에는 두 개의 수신 매개 변수가 있습니다. 하나는 새 매개 변수 구성 값이고 다른 하나는 매개 변수 수정 마스크를 나타냅니다. 그런 다음 콜백 함수에서 수정 된 매개 변수 값을 인쇄합니다.
코드를 편집 한 후 CmakeLists.txt에 다음 컴파일 규칙을 추가합니다.
# for dynamic reconfigure add_executable(dynamic_reconfigure_node src/server.cpp) # make sure configure headers are built before any node using them add_dependencies(dynamic_reconfigure_node ${PROJECT_NAME}_gencfg) # for dynamic reconfigure target_link_libraries(dynamic_reconfigure_node ${catkin_LIBRARIES})
이제 dynamic_tutorials 패키지를 컴파일 할 수 있습니다.
cd ~ / catkin_ws
catkin_make
동적 매개 변수 수정
성공적으로 컴파일 한 후 다음 명령을 사용하여 roscore 및 dynamic_reconfigure_node를 실행합니다.
roscore rosrun dynamic_tutorials dynamic_reconfigure_node
이때 동적 매개 변수 구성이있는 서버가 실행 중입니다. 이제 ROS에서 제공하는 시각적 매개 변수 구성 도구를 시작하여 매개 변수를 수정하십시오.
rosrun rqt_reconfigure rqt_reconfigure
아래 그림과 같이 열린 비주얼 인터페이스에서 매개 변수는 입력, 드래그 및 드롭 다운 선택을 통해 동적으로 수정할 수 있습니다. 입력 방법의 차이는 구성 파일의 매개 변수 설정과 관련이 있습니다. 예를 들어 매개 변수의 최소값이 설정되면 드래그 바가 있습니다. 열거 유형으로 설정하면 드롭 다운 옵션이됩니다.
수정 후에는 그림 ↑↑↑↑↑와 같이 서버의 단말기에서 성공적으로 수정 된 인쇄 정보를 확인할 수 있습니다.