将plumbing_pub_sub、plumbing_server_client、plumbing_param_server关联在一起
http://wiki.ros.org/catkin/package.xml#Metapackages
1.首先:新建一个功能包 plumbing_my
2.然后:修改package.xml ,内容如下:
被集成的功能包
.....
3.最后:修改 CMakeLists.txt,内容如下:
cmake_minimum_required(VERSION 3.0.2)
project(demo)
find_package(catkin REQUIRED)
catkin_metapackage()
PS:CMakeLists.txt 中不可以有换行。
1.属性
pkg="包名"
节点所属的包
节点类型(与之相同名称的可执行文件)
节点名称(在 ROS 网络拓扑中节点的名称)
将参数传递给节点
在指定机器上启动节点
如果节点退出,是否自动重启
如果 respawn 为 true, 那么延迟 N 秒后启动节点
该节点是否必须,如果为 true,那么如果该节点退出,将杀死整个 roslaunch
在指定命名空间 xxx 中启动节点
在启动前,删除节点的私有空间的所有参数
日志发送目标,可以设置为 log 日志文件,或 screen 屏幕,默认是 log
2.子级标签
env 环境变量设置
remap 重映射节点名称
用于话题重命名
from="xxx"
原始话题名称
to="yyy"
键盘控制节点和launch文件话题名称不一致 等待 /cmd_vel
目标名称
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 列出参数服务器中的参数
1.属性
加载、导出或删除参数
加载或导出到的 yaml 文件
加载参数
导出参数---à 新建launch文件dump.launch
原文件
先启动原launch文件,再启动导出launch文件,导出数据显示在dump.yaml文件内
删除参数 dump.launch
param 参数设置
指不同工作空间中,存在重名的功能包的情形。
为了在任何终端下都能打开demo01_ws文件,需要在主目录下隐藏文件.bashrc里添加路径
source /home/dai/demo01_ws/devel/setup.bash
source /home/dai/demo02_ws/devel/setup.bash
节点重名
重复启动乌龟节点,导致前一个节点关闭。
解决方法一:启动多个节点方法,给节点命名,两个下划线:=名字
rosrun turtlesim turtlesim_node __ns:=ergouzi
rosrun turtlesim turtlesim_node __ns:=cuihua
方法二:
rosrun turtlesim turtlesim_node __name:=ergouzi
rosrun turtlesim turtlesim_node __name:=ergouzi
启动乌龟节点,再启动键盘控制,发现话题名称不一样
rosrun teleop_twist_keyboard teleop_twist_keyboard.py /cmd_vel:=/turtle1/cmd
设置参数调用API是ros::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
设置参数时,首先需要创建 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