元功能包
将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="包名"
节点所属的包
节点类型(与之相同名称的可执行文件)
节点名称(在 ROS 网络拓扑中节点的名称)
将参数传递给节点
在指定机器上启动节点
- respawn="true | false" (可选)
如果节点退出,是否自动重启
如果 respawn 为 true, 那么延迟 N 秒后启动节点
- required="true | false" (可选)
该节点是否必须,如果为 true,那么如果该节点退出,将杀死整个 roslaunch
在指定命名空间 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设置参数
设置参数调用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
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)