launch文件
<launch>
(根)标签:属性deprecated = "弃用声明"
;<group>
标签:可以对节点分组,具有 ns 属性,可以让节点归属某个命名空间;ns="名称空间"
;<node>
标签:注意:无法按序启动节点; 属性:pkg
= “包名”,type
= “可执行文件”,name
= “Name”,args
= “xxx” (传递给节点的参数),machine
= “机器名”,respawn
= “true | false” (节点被关闭后自动重启),respawn_delay
= " N" (延迟 N 秒后重启),required
= “true | false” (必须节点退出则杀死整个roslaunch),ns
= “xxx”,output
=“log | screen”;<include>
标签:属性file="$(find pkg_name)/xxx/xxx.launch"
;- 子标签:
<remap>
标签from="原始话题名称", to="目标名称"
;<param>
标签n ame="命名空间/参数名"
,value="xxx"
;<rosparam>
标签command="load | dump | delete"
,file="$(find pkg_name)/launch/yyy.yaml"
; <arg>
标签用于动态传参,类似于函数的参数;属性name="参数名称"
,default="默认值"
,value="数值"
,doc="描述"
;<launch> <arg name="xxx" /> <param name="param" value="$(arg xxx)" /> </launch> roslaunch hello.launch xxx:=值 # 命令行调用launch传参
ROS元功能包
MetaPackage是Linux的一个文件管理系统的概念。是ROS中的一个虚包,里面没有实质性的内容,但是它依赖了其他的软件包,通过这种方法可以把其他包组合起来,我们可以认为它是一本书的目录索引,告诉我们这个包集合中有哪些子包,并且该去哪里下载。
实现方法
首先:新建一个功能包
然后:修改package.xml ,内容如下:
<exec_depend>被集成的功能包1</exec_depend>
<exec_depend>被集成的功能包2</exec_depend>
.....
<export>
<metapackage />
</export>
最后:修改 CMakeLists.txt,内容如下(其他删除即可): PS:CMakeLists.txt 中不可以有换行。
cmake_minimum_required(VERSION 3.0.2)
project(pkg_name)
find_package(catkin REQUIRED)
catkin_metapackage()
节点&话题 重名问题
-
rosrun设置节点命名空间:
__ns:=/xxx
, 对应launch
中的ns
属性rosrun turtlesim turtlesim_node __ns:=/xxx
-
rosrun节点名称重映射:
__name:=t1
, 对应launch
中的name
属性rosrun turtlesim turtlesim_node __name:=t1
-
rosrun话题名称重映射:
rorun 包名 节点名 话题名:=新话题名称
对应launch
中的<remap>
ROS分布式通信
-
准备:保证不同计算机处于同一网络中,最好分别设置固定IP,如果为虚拟机,将网络适配器改为桥接模式;
-
配置文件修改:分别修改不同计算机的 /etc/hosts 文件,加入对方的IP地址和计算机名;
(IP地址查看名: ifconfig;计算机名称查看: hostname) -
配置主机IP: ~/.bashrc 追加
export ROS_MASTER_URI=http://主机IP:11311 export ROS_HOSTNAME=主机IP
-
配置从机IP: ~/.bashrc 追加
export ROS_MASTER_URI=http://主机IP:11311 export ROS_HOSTNAME=从机IP
参考资料如下: ROS理论与实践