ROS動態參數設置


通常,調試時(尤其是在導航及建圖應用中)需要經常修改程序中的參數值,這時無論是修改命令行,還是編寫固定修改參數的可執行文件,都無法滿足要求。ROS為我們提供了動態參數設置的機制,接下來我們將練習編寫具備動態參數設置功能的可執行文件。
創建cfg文件:

創建動態參數ROS包book_dynamic_ param, 加入依賴項roscpp,rospy,dynamic_reconfigure。 在功能包下新建cfg文件夾,並創建DynamicParam.cfg文件, 內容如下:

#!/usr/bin/env python 
PACKAGE = "book_dynamic_param" 

from dynamic_reconfigure.parameter_generator_catkin import * 

gen = ParameterGenerator() 

gen.add("IntDyParam",int_t,0,"An Int Parameter",0,0,9) 
gen.add("DouDyParam",double_t,0,"A Double Parameter",1.5,0,9) 
gen.add("StrDyParam",str_t,0,"A String Parameter","Hello,I'm Robot!") 
gen.add("BoolDyParam",bool_t,0,"A Bool Parameter",True) 

student_info = gen.enum([gen.const("Name",str_t,"LiLei","Name Information"), 
                         gen.const("Sex",str_t,"Man","Sex Information"), 
                         gen.const("Age",str_t,"18","Age Information")], 
                        "A set contain a student information") 

gen.add("StudentInfo",str_t,0,"A studenet information set","LiLei",edit_method=student_info) 
exit(gen.generate(PACKAGE,"node_DynamicParam","DynamicParam"))

 

 

chmod a+x cfg/DynamicParam.cfg

在CMakeL ists.txt文件中添加以下內容:

generate_dynamic_reconfigure_options( 
    cfg/DynamicParam.cfg 
) 
add_dependencies(hell ${PROJECT_NAME}_gencfg)

 

 編譯之后,在工作空間目錄.../devel/include/book_dynamic_param文件夾下可得到自動生成的DynamicParamConfig.h頭文件。
創建動態參數設置可執行文件:

創建book_dyparam.cpp文件, 並添加如下內容:

#include "ros/ros.h" 
#include "dynamic_reconfigure/server.h" 
#include "book_dynamic_param/DynamicParamConfig.h" 

//define call back function 
void paramCallback(book_dynamic_param::DynamicParamConfig& config,uint32_t level) 
{ 
    ROS_INFO("Request: %d %f %s %s %s", 
                config.IntDyParam,config.DouDyParam, 
                config.StrDyParam.c_str(), 
                config.BoolDyParam?"True":"False", 
                config.StudentInfo.c_str()); 
} 

int main(int argc, char** argv) 
{ 
    //initial and name node 
    ros::init(argc,argv,"node_DynamicParam"); 
    //create node handle 
    dynamic_reconfigure::Server<book_dynamic_param::DynamicParamConfig> server; 
    dynamic_reconfigure::Server<book_dynamic_param::DynamicParamConfig>::CallbackType f; 

    f = boost::bind(&paramCallback,_1,_2); 
    server.setCallback(f); 
    ros::spin(); 
    return 0; 
}

 

 CMakeLists.txt文件內容如下:

cmake_minimum_required(VERSION 2.8.3) 
project(book_dynamic_param) 
find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs dynamic_reconfigure) 
generate_dynamic_reconfigure_options( 
    cfg/DynamicParam.cfg 
) 
catkin_package( 
) 
include_directories( 
  include ${catkin_INCLUDE_DIRS} 
add_dependencies(hell ${PROJECT_NAME}_gencfg) 

add_executable(book_dyparam 
  src/book_dyparam.cpp 
) 
add_dependencies(book_dyparam ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) 
target_link_libraries(book_dyparam 
  ${catkin_LIBRARIES} 
)

 測試:

 

rosrun book_dynamic_param book_dyparam 
rosrun rqt_reconfigure rqt_reconfigure

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM