ROS大型工程學習(一) 必須了解的基本文件


 

一、Cmake文件

 

閱讀工程,首先點開CMakeLists 文件,會定義一些庫和可執行文件。首先看可執行文件,rosrun的就是這個節點navigator

add_executable(navigator src/navigator.cpp src/RobotNavigator.cpp)

 

launch文件中寫的也是這個節點,比如以下。name是自己取的,pkg是包的名字,type是cmake里可執行文件的名字(node的名字)

1 <node name="Navigator" pkg="csc_nav2d_navigator" type="navigator" output="screen">
2 <rosparam file="$(find csc_nav2d_working)/param/navigator.yaml"/>
3 <rosparam file="$(find csc_nav2d_working)/param/global_costmap_params_scan.yaml" command="load" />
4 </node>

 

比如點開navigator這個可執行文件,發現是一個main函數文件,編譯后會變成可執行文件。

 1 #include <ros/ros.h>
 2 #include <csc_nav2d_navigator/RobotNavigator.h>
 3 using namespace ros;
 4 int main(int argc, char **argv)
 5 {
 6     ros::init(argc, argv, "Navigator");
 7     ros::NodeHandle n;
 8     
 9     RobotNavigator robNav;
10     
11   ros::spin();
12 
13 
14     return 0;
15 }

 

 

二、cfg文件

官方文檔見http://wiki.ros.org/dynamic_reconfigure/Tutorials 

以下程序轉載自https://blog.csdn.net/qq_31356389/article/details/79131175 

 1 #!/usr/bin/env python
 2 PACKAGE = "ROS_Test1"
 3 
 4 from dynamic_reconfigure.parameter_generator_catkin import *
 5 
 6 gen = ParameterGenerator()
 7 
 8 gen.add("int_param", int_t, 0, "int parameter", 1, 0, 10);
 9 gen.add("double_param", double_t, 0, "double parameter", .1, 0.0, 1.0);
10 gen.add("bool_param", bool_t, 0, "bool parameter", True);
11 gen.add("str_param", str_t, 0, "string parameter", "ROS_Test1");
12 
13 size_enum = gen.enum([ gen.const("Low",      int_t, 0, "Low is 0"),
14                        gen.const("Medium",     int_t, 1, "Medium is 1"),
15                        gen.const("High",      int_t, 2, "Hight is 2")],
16                      "Select from the list")
17 
18 gen.add("size", int_t, 0, "Select from the list", 1, 0, 3, edit_method=size_enum)
19 
20 exit(gen.generate(PACKAGE, "ROS_Test1", "Test1_"))

 

解讀:

第2行 :ROS_Test1 為要配置動態參數的包的名字

第4、6行:導入參數生成器。

第8-18行:添加動態參數:

 gen.add(name, type, level, description, default, min, max)

 name: 參數的名稱

 type: 參數類型

 level:一個傳遞給回調的位掩碼

 description: 一個描述參數

 default: 節點啟動的初始值

 min: 參數最小值

 max: 參數最大值

第13行:定義一個整數,其值由枚舉設置。為此,調用gen.enum並將其傳遞給常量列表,后跟該枚舉的描述。定義完成后可以將參數設置為“Low”或“Medium”,而不是0或1。

第20行:生成必要的文件並退出。第二個是可以運行的節點的名稱(僅用於生成文檔),就是改成自己的包的名字。第三個參數是生成的文件將獲得的名稱前綴,例如<name>Config.h或者<name>Config.py 。

 

再舉個例子:轉載至https://blog.csdn.net/u010945141/article/details/81225087 

 1 #!/usr/bin/env python
 2 # -*- coding: utf-8 -*-
 3 
 4 # 指定包名
 5 PACKAGE = "dynamic_tutorials"
 6 
 7 from dynamic_reconfigure.parameter_generator_catkin import *
 8 
 9 # 生成參數配置實例
10 gen = ParameterGenerator()
11 
12 # 設置參數
13 # add(self, name, paramtype, level, description, default=None, min=None, max=None, edit_method='')
14 # @paramtype: 支持4類 int_t, double_t, str_t, bool_t
15 # @level: 還不太清楚這個參數的用法
16 gen.add("int_param",    int_t,    0, "An Integer parameter", 50,  0, 100)
17 gen.add("double_param", double_t, 0, "A double parameter",    .5, 0,   1)
18 gen.add("str_param",    str_t,    0, "A string parameter",  "Hello World")
19 gen.add("bool_param",   bool_t,   0, "A Boolean parameter",  True)
20 
21 # 通過enum設置枚舉型參數
22 size_enum = gen.enum([ gen.const("Small",      int_t, 0, "A small constant"),
23                        gen.const("Medium",     int_t, 1, "A medium constant"),
24                        gen.const("Large",      int_t, 2, "A large constant"),
25                        gen.const("ExtraLarge", int_t, 3, "An extra large constant")],
26                      "An enum to set size")
27 
28 gen.add("size", int_t, 0, "A size parameter which is edited via an enum", 1, 0, 3, edit_method=size_enum)
29 
30 # 生成必要文件並退出程序
31 # generate(pkgname, nodename, name)
32 # 第二個參數是使用這個配置文件的節點名(只是用來生成文檔)
33 # 第三個參數必須與配置文件同名
34 exit(gen.generate(PACKAGE, "dynamic_tutorials", "Tutorials"))

 

注意:看到這里,突然想到功能包編譯過程中經常報cfg的錯誤,這個時候就需要給cfg文件加權限,格式如下:

chmod  +x  包含路徑的文件名

ok


免責聲明!

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



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