zoukankan      html  css  js  c++  java
  • 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

    博文主要是总结自己的学习,因此有很多知识点没有提到,仅仅提了个人比较容易遗忘的或者非常重要的知识点。很多资料来源于网络和对一些课程的整理,侵权删。格式没花精力调整,望谅解。
  • 相关阅读:
    梅森素数
    高精度乘法
    快速幂取模
    高精度加法
    Linux 压缩&解压缩
    Lec_Cloud资源云平台
    IP102,IP102-K_V3.0 输入节点机
    A7互动主机
    音频处理器的使用
    关于测试随笔
  • 原文地址:https://www.cnblogs.com/JuiceCat/p/12049454.html
Copyright © 2011-2022 走看看