ROS学习笔记(三)

元功能包

将plumbing_pub_sub、plumbing_server_client、plumbing_param_server关联在一起

http://wiki.ros.org/catkin/package.xml#Metapackages

1.首先:新建一个功能包 plumbing_my

2.然后:修改package.xml ,内容如下:

 被集成的功能包

 .....

 

   

 

ROS学习笔记(三)_第1张图片

3.最后:修改 CMakeLists.txt,内容如下:

cmake_minimum_required(VERSION 3.0.2)

project(demo)

find_package(catkin REQUIRED)

catkin_metapackage()

PS:CMakeLists.txt 中不可以有换行。

ROS学习笔记(三)_第2张图片launch文件

1.属性

pkg="包名"

节点所属的包

  • type="nodeType"

节点类型(与之相同名称的可执行文件)

  • name="nodeName"

节点名称( ROS 网络拓扑中节点的名称)

  • args="xxx xxx xxx" (可选)

将参数传递给节点

  • machine="机器名"

在指定机器上启动节点

  • respawn="true | false" (可选)

如果节点退出,是否自动重启

  • respawn_delay=" N" (可选)

如果 respawn true, 那么延迟 N 秒后启动节点

  • required="true | false" (可选)

该节点是否必须,如果为 true,那么如果该节点退出,将杀死整个 roslaunch

  • ns="xxx" (可选)

在指定命名空间 xxx 中启动节点

ROS学习笔记(三)_第3张图片

  • clear_params="true | false" (可选)

在启动前,删除节点的私有空间的所有参数

  • output="log | screen" (可选)

日志发送目标,可以设置为 log 日志文件,或 screen 屏幕,默认是 log

2.子级标签

env 环境变量设置

remap 重映射节点名称

用于话题重命名

from="xxx"

原始话题名称

to="yyy"

ROS学习笔记(三)_第4张图片

键盘控制节点和launch文件话题名称不一致 等待  /cmd_vel

ROS学习笔记(三)_第5张图片  利用remap更改节点

  目标名称

rosparam 参数设置

        命令                          说明                                        说明

rosparam set              set parameter                            设置参数

rosparam get              get parameter                            获得参数值

rosparam load            load parameters from file           从文件中加载参数到参数服务器

rosparam dump          dump parameters to file             将参数服务器中的参数写入到文件

rosparam delete         delete parameter                        删除参数

rosparam list              list parameter names                   列出参数服务器中的参数

标签可以从 YAML 文件导入参数,或将参数导出到 YAML 文件,也可以用来删除参数,标签在标签中时被视为私有。

1.属性

  • command="load | dump | delete" (可选,默认 load)

加载、导出或删除参数

  • file="$(find xxxxx)/xxx/yyy...."

加载或导出到的 yaml 文件

  • param="参数名称"
  • ns="命名空间" (可选)

ROS学习笔记(三)_第6张图片

加载参数

导出参数---à 新建launch文件dump.launch

原文件

先启动原launch文件,再启动导出launch文件,导出数据显示在dump.yaml文件内

删除参数 dump.launch

param 参数设置

ROS学习笔记(三)_第7张图片

重名问题

工作空间覆盖

指不同工作空间中,存在重名的功能包的情形。

为了在任何终端下都能打开demo01_ws文件,需要在主目录下隐藏文件.bashrc里添加路径

source /home/dai/demo01_ws/devel/setup.bash

source /home/dai/demo02_ws/devel/setup.bash

节点重名

1.rosrun

重复启动乌龟节点,导致前一个节点关闭。

ROS学习笔记(三)_第8张图片

解决方法一:启动多个节点方法,给节点命名,两个下划线:=名字

rosrun turtlesim turtlesim_node __ns:=ergouzi

rosrun turtlesim turtlesim_node __ns:=cuihua

ROS学习笔记(三)_第9张图片

方法二:

rosrun turtlesim turtlesim_node __name:=ergouzi

rosrun turtlesim turtlesim_node __name:=ergouzi

ROS学习笔记(三)_第10张图片

 2.launch文件

ROS学习笔记(三)_第11张图片

ROS学习笔记(三)_第12张图片

 话题重名

1.rosrun

启动乌龟节点,再启动键盘控制,发现话题名称不一样         

ROS学习笔记(三)_第13张图片

rosrun teleop_twist_keyboard teleop_twist_keyboard.py /cmd_vel:=/turtle1/cmd

ROS学习笔记(三)_第14张图片

编码设置话题名称

ros::param设置参数

设置参数调用APIros::param::set,该函数中,参数1传入参数名称,参数2是传入参数值,参数1中参数名称设置时,如果以 / 开头,那么就是全局参数,如果以 ~ 开头,那么就是私有参数,既不以 / 也不以 ~ 开头,那么就是相对参数。代码示例:

ros::param::set("/set_A",100); //全局,和命名空间以及节点名称无关
ros::param::set("set_B",100); //相对,参考命名空间
ros::param::set("~set_C",100); //私有,参考命名空间与节点名称

运行时,假设设置的 namespace xxx,节点名称为 yyy,使用 rosparam list 查看:

/set_A
/xxx/set_B
/xxx/yyy/set_C

ros::NodeHandle设置参数

设置参数时,首先需要创建 NodeHandle 对象,然后调用该对象的 setParam 函数,该函数参数1为参数名,参数2为要设置的参数值,如果参数名以 / 开头,那么就是全局参数,如果参数名不以 / 开头,那么,该参数是相对参数还是私有参数与NodeHandle 对象有关,如果NodeHandle 对象创建时如果是调用的默认的无参构造,那么该参数是相对参数,如果NodeHandle 对象创建时是使用:

ros::NodeHandle nh("~"),那么该参数就是私有参数。代码示例:

ros::NodeHandle nh;
nh.setParam("/nh_A",100); //全局,和命名空间以及节点名称无关

nh.setParam("nh_B",100); //相对,参考命名空间

ros::NodeHandle nh_private("~");
nh_private.setParam("nh_C",100);//私有,参考命名空间与节点名称

运行时,假设设置的 namespace xxx,节点名称为 yyy,使用 rosparam list 查看:

/nh_A
/xxx/nh_B
/xxx/yyy/nh_C

你可能感兴趣的:(ros仿真,学习)