10.4.1 使用演示
在ROS中内置了nodelet案例,我们先以该案例演示nodelet的基本使用语法,基本流程如下:
- 案例简介;
- nodelet基本使用语法;
- 内置案例调用。
1.案例简介
以“ros- [ROS_DISTRO] -desktop-full”命令安装ROS时,nodelet默认被安装,如未安装,请调用如下命令自行安装:
sudo apt install ros-<<ROS_DISTRO>>-nodelet-tutorial-math
在该案例中,定义了一个Nodelet插件类:Plus,这个节点可以订阅一个数字,并将订阅到的数字与参数服务器中的 value 参数相加后再发布。
需求:再同一线程中启动两个Plus节点A与B,向A发布一个数字,然后经A处理后,再发布并作为B的输入,最后打印B的输出。
2.nodelet 基本使用语法
使用语法如下:
nodelet load pkg/Type manager - Launch a nodelet of type pkg/Type on manager manager
nodelet standalone pkg/Type - Launch a nodelet of type pkg/Type in a standalone node
nodelet unload name manager - Unload a nodelet a nodelet by name from manager
nodelet manager - Launch a nodelet manager node
3.内置案例调用
1.启动roscore
roscore
2.启动manager
rosrun nodelet nodelet manager __name:=mymanager
__name:= 用于设置管理器名称。
3.添加nodelet节点
添加第一个节点:
rosrun nodelet nodelet load nodelet_tutorial_math/Plus mymanager __name:=n1 _value:=100
添加第二个节点:
rosrun nodelet nodelet load nodelet_tutorial_math/Plus mymanager __name:=n2 _value:=-50 /n2/in:=/n1/out
PS: 解释
rosrun nodelet nodelet load nodelet_tutorial_math/Plus mymanager __name:=n1 _value:=100
- rosnode list 查看,nodelet 的节点名称是: /n1;
- rostopic list 查看,订阅的话题是: /n1/in,发布的话题是: /n1/out;
- rosparam list查看,参数名称是: /n1/value。
rosrun nodelet nodelet standalone nodelet_tutorial_math/Plus mymanager __name:=n2 _value:=-50 /n2/in:=/n1/out
- 第二个nodelet 与第一个同理;
- 第二个nodelet 订阅的话题由 /n2/in 重映射为 /n1/out。
优化:也可以将上述实现集成进launch文件:
<launch>
<!-- 设置nodelet管理器 -->
<node pkg="nodelet" type="nodelet" name="mymanager" args="manager" output="screen" />
<!-- 启动节点1,名称为 n1, 参数 /n1/value 为100 -->
<node pkg="nodelet" type="nodelet" name="n1" args="load nodelet_tutorial_math/Plus mymanager" output="screen" >
<param name="value" value="100" />
</node>
<!-- 启动节点2,名称为 n2, 参数 /n2/value 为-50 -->
<node pkg="nodelet" type="nodelet" name="n2" args="load nodelet_tutorial_math/Plus mymanager" output="screen" >
<param name="value" value="-50" />
<remap from="/n2/in" to="/n1/out" />
</node>
</launch>
4.执行
向节点n1发布消息:
rostopic pub -r 10 /n1/in std_msgs/Float64 "data: 10.0"
打印节点n2发布的消息:
rostopic echo /n2/out
最终输出结果应该是:60。