Ros-dynamic reconfigure에서 동적 매개 변수의 구성 및 적용

목차

코드 구조

구성 파일 만들기

1. 먼저 다음 명령 줄을 통해 dynamic_tutorials 함수 패키지를 만듭니다.

2. 동적 매개 변수 구성을 수행하려면 구성 파일을 작성해야합니다.

3. 컴파일 규칙 추가

애플리케이션 노드 생성

 동적 매개 변수 수정


 


코드 구조

구성 파일 만들기

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

아래 그림과 같이 열린 비주얼 인터페이스에서 매개 변수는 입력, 드래그 및 드롭 다운 선택을 통해 동적으로 수정할 수 있습니다. 입력 방법의 차이는 구성 파일의 매개 변수 설정과 관련이 있습니다. 예를 들어 매개 변수의 최소값이 설정되면 드래그 바가 있습니다. 열거 유형으로 설정하면 드롭 다운 옵션이됩니다.

수정 후에는 그림 ↑↑↑↑↑와 같이 서버의 단말기에서 성공적으로 수정 된 인쇄 정보를 확인할 수 있습니다.

추천

출처blog.csdn.net/weixin_44937328/article/details/114936848