[关闭]
@danren-aa120 2020-09-21T02:26:59.000000Z 字数 4633 阅读 342

ROS中的各种文件

ROS


一、package.xml 文件
在package中,存在package.xml文件,此文件主要是描述当前package的一些信息。
1、基本结构
package

/package

2、标签
name -功能包的名字
version -功能包的版本
description - 功能包内容的描述
maintainer - 功能包的创建于维护者
license - 软件发行版通行证 (例如: GPL, BSD, ASL)

3、依赖
一共有四种依赖包
buildtool_depend - 指定编译此功能包的编译系统工具
build_depend - 指定编译此功能包需要的其他功能包,可以是功能包中的头文件、链接库、其他源文件。
run_depend或exec_depend - 指定运行此功能包代码需要的其他功能包。
test_depend - 指定单元测试需要的其他功能包

4、Metapackages

当一个功能包中包含好几个子功能包时使用。

在 package.xml中有如下代码:

export
  metapackage /
/export

5、那么,对应的CMakelist.txt 内容如下:

cmake_minimum_required(VERSION 2.8.3)
project()
find_package(catkin REQUIRED)
catkin_metapackage()

二、launch文件
在规模比较大的程序中,常常有几个或者几十个节点(可执行程序),这些节点之间彼此互有联系,协同达到软件正确执行的目的。这时候再使用rosrun命令的话,就会比较麻烦。此时,roslaunch命令闪亮登场了,它可以运行多个节点。并且roslaunch命令在运行节点时,还可以附加一些ROS命令选项,比如修改参数或节点的名称,设置节点的命名空间,设置ROS_ROOT及ROS_PACKAGE_PATH,以及环境变量修改等选项的ROS命令。

roslaunch命令的使用,需要先创建一个XML格式的xxx.launch文件,将要运行的节点以及系统中相关参数设置信息写在这个launch文件中,然后执行这个launch文件就可以了。【这里可以理解为launch文件就是一个脚本文件,要执行的操作都写在脚本文件中,执行脚本文件就OK了。】

roslaunch命令执行格式:
        roslaunch  功能包名称  launch文件 [参数设置]

在launch标签中,描述了使用roslaunch命令运行节点所需的标签。arg描述了系统运行中所需要的参数。node描述了roslaunch运行的节点,选项包括pkg、type和name。
arg中的name表示参数的名称,default表示参数默认的值。如果需要设置别的值,可以在roslaunch命令中加入节点名。
node中pkg、type、name字段(这3个字段必须有)含义如下:
pkg        功能包名称。
type       实际运行的节点的名称(程序文件节点名)。
name    与上述type对应的节点被运行时,起的名称(运行名)。一般情况下使用与type相同的名称,但可以根据需要,在运行时更改名称。
launch文件中其他
launch    指roslaunch语句的开始和结束。
node       这是对于节点运行的标签。您可以更改功能包、节点名称和执行名称。
machine     可以设置运行该节点的PC的名称、address、ros-root和ros-package-path。
include    您可以加载属于同一个功能包或不同的功能包的另一个launch,并将其作为一个launch文件来运行。
remap>    可以更改节点名称、话题名称等等,在节点中用到的ROS变量的名称。例如:
env>         设置环境变量,如路径和IP(很少使用)。
param>      设置参数名称、类型、值等。
rosparam>    可以像rosparam命令一样,查看和修改load、dump和delete等参数信息。
group>       用于分组正在运行的节点。
test>        用于测试节点。类似于,但是有可以用于测试的选项。
arg>        可以在launch文件中定义一个变量,以便在像下面这样运行时更改参数。

三、CMakeLists.txt
1 CMakeLists.txt是在创建Package时自动生成的,不需要我们去写。
2 阅读工程,首先点开CMakeLists文件,会定义一些库和可执行文件。首先看可执行文件,rosrun的就是这个navigator节点:
3 add_executable(navigator src/navigator.cpp src/RobotNavigator.cpp)

4 launch文件中写的也是这个节点,比如以下。name是自己取的,pkg是包的名字,type是cmake里可执行文件的名字(node的名字)
node name="Navigator" pkg="csc_nav2d_navigator" type="navigator" output="screen"
rosparam file="$(find csc_nav2d_working)/param/navigator.yaml"

rosparam file="$(find csc_nav2d_working)/param/global_costmap_params_scan.yaml" command="load" /
/node>

5 比如点开navigator这个可执行文件,发现是一个main函数文件,编译后会变成可执行文件。

四、yaml
.yaml是参数配置文件。
1如果想要载入参数,可以通过编写yaml文件,然后在launch文件中加入

2示例:yaml文件里的内容为:
bool_param: true
int_param: 2
double_param: 0.5
str_param: "123"

简单的yaml文件读写操作示例看https://blog.csdn.net/u014610460/article/details/79508869

五、cfg文件
是动态参数配置文件。
初始参数设置
有两种方法设置初始参数:

一个通过launch文件来设置
一个通过命令行来设置
例如:
roslaunch aruco_ros single.launch markerId:=26 markerSize:=0.08 eye:="right"

参数动态配置

动态重配置参数:就是动态地调整、设置正在运行的节点的参数值(它们允许用户不仅在启动时修改变量,还能在运行过程中修改变量。我们已经创建了一个文件中指定的变量可动态重新配置服务器。),通过动态重配置,可以更加高效地开发和测试节点,特别是机器人硬件调试的时候,使用动态重配置参数是一个很不错的选择.

  1. 创建cfg文件

cfg示例:
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: 参数类型,支持4类 int_t, double_t, str_t, bool_t
level:一个传递给回调的位掩码
description: 一个描述参数
default: 节点启动的初始值
min: 参数最小值
max: 参数最大值
第13行:定义一个整数,其值由枚举设置。为此,调用gen.enum并将其传递给常量列表,后跟该枚举的描述。定义完成后可以将参数设置为“Low”或“Medium”,而不是0或1。
第20行:生成必要的文件并退出。第二个是可以运行的节点的名称(仅用于生成文档),就是改成自己的包的名字。第三个参数是生成的文件将获得的名称前缀,例如Config.h或者Config.py 。

2.编辑CMakeLists.txt文件

加入以下代码

find_package(catkin REQUIRED COMPONENTS
roscpp
std_msgs
message_generation
dynamic_reconfigure
)

generate_dynamic_reconfigure_options(
cfg/ROS_Test1_cfg.cfg
)

3.编辑cpp文件

roscd ROS_Test1

vim node_e.cpp

编辑内容如下所示

。# include "ros/ros.h"
。#include
。#include

void callback(ROS_Test1::Test1_Config &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, "node_e_dynamic_reconfigure");
dynamic_reconfigure::Server server;
dynamic_reconfigure::Server::CallbackType f;
f = boost::bind(&callback, _1, _2);
server.setCallback(f);
ros::spin();
return 0;
}

4 编译运行

cd ~/catkin_ws

catkin_make

roscore

新开终端执行:

cd ~/catkin_ws

source devel/setup.bash

roslaunch ROS_Test1 Test1_node_e

新开终端执行:

rosrun rqt_console rqt_console

运行结果如下所示:

image.png-342.1kB

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注