ROS学习笔记(三)

元功能包

将plumbing_pub_sub、plumbing_server_client、plumbing_param_server关联在一起

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

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

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

 <exec_depend>被集成的功能包</exec_depend>

 .....

 <export>

   <metapackage />

 </export>

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

cmake_minimum_required(VERSION 3.0.2)

project(demo)

find_package(catkin REQUIRED)

catkin_metapackage()

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

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 中启动节点

<node pkg="turtlesim" type="turtlesim_node" name="turtle1" output="screen" ns="hello" />

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

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

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

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

2.子级标签

env 环境变量设置

remap 重映射节点名称

用于话题重命名

from="xxx"

原始话题名称

to="yyy"

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

  利用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                   列出参数服务器中的参数

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

1.属性

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

加载、导出或删除参数

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

加载或导出到的 yaml 文件

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

加载参数

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

原文件

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

删除参数 dump.launch

<rosparam command="delete" param="bg_B" />

param 参数设置

重名问题

工作空间覆盖

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

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

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

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

节点重名

1.rosrun

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

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

rosrun turtlesim turtlesim_node __ns:=ergouzi

rosrun turtlesim turtlesim_node __ns:=cuihua

方法二:

rosrun turtlesim turtlesim_node __name:=ergouzi

rosrun turtlesim turtlesim_node __name:=ergouzi

 2.launch文件

 话题重名

1.rosrun

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

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

编码设置话题名称

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值