【无标题】

首先需要讲一下所谓的节点名称和类型之间有什么区别,我们来稍微讲述一下,先说节点名称,节点名称就是我们进行ros init的时候给节点起的那个名字:

然后呢,然后就是我们的节点类型是什么,节点类型就是我们启动的节点在哪个cpp文件里边,最后得到的可执行文件对应的名字是什么。

最后呢,我们会看一下,若是launch文件和ros init同时存在又会如何:

答案是名称会进行覆盖,over! 

接下来对Faster and Safe 算法进行简单梳理流程

首先是我们的建图算法

其使用的节点是global_mapping_node.launch

简单描述操作:

首先开启了一个节点,由于这个节点并不复杂,因此它是开启的JA01命名空间下的global_mapper_node节点,在哪里呢?我们可以找到对应源文件

这里我们会进行run

这里我们使用的方式为参数服务器类型,在这个类型下,我们将会传递参数来保证其可用性。如何看我们的这一操作呢,如下所示即可:

通过safegetparam,进行多级调用

在safegetparam中,我们调用了getparam,这是一种获得参数的方法,怎么呢,其中第一个参数是我们在roslaunch文件中为为我们要传递的参数所起的名字,而第二个参数呢,则是我们在程序中定义的变量的名字,在launch文件中我们会定义一个参数,这里便是将参数中的值付给了程序中我们定义的变量

其中global_mapper是个自定义类型,这个类型的定义了一个param,然后通过param我们可以得到我们想要给变量命名的参数了。

下一步我们初始化的是订阅者

不难看出,我们显示subscribeCamera,然后又是subscribe,前者是一个函数,未知

后者是一个简单的subscribe,pnh_也是一个我们提前定义好的全局的节点句柄

为什么我们需要句柄,因为当我们这样操作的时候,我们知道ros节点只能有一个,而名称在ros::init中已经结束了,后边的则是我们的节点句柄了,有一个很nb的图可以给大家看一下:

node_name = node_namespace + nodename

转自ROS Nodehandle句柄的理解_节点句柄_存在即合理L的博客-CSDN博客

 因此一个节点只有一个名称,但却有多个句柄

subscribe参数的意义

接下来我们又定义了一个发布者,这个发布者发布的消息是sensors_msgs下的PointCloud2类型的消息,并且消息发布节点为后边的第一个参数,消息队列为第二个参数

 

 ROS中节点、话题、参数重命名以及全局、相对、私有命名空间(示例+代码)_ros话题在launch中更改name还是value_肥肥胖胖是太阳的博客-CSDN博客

 我们知道在所有的订阅模型中我们在定义了订阅节点后会有一些后续操作,这些操作便包括对于订阅的影响等,因此我们将会看一下我们后续是否会有一些回调函数进行后续操作

他们有一个很有趣的点在于,他们第一步都是定义一个bool变量,并且这个变量就有效的展示着我们是否可以使用某一个内容

比方说,如果我们是深度图这个节点的话,会有一些操作:

这些操作将会帮助我们了解深度图的有关信息

比方说如下图所示:

 

 首先我们确定是否有深度图的节点,然后我们进行操作

首先我们可以看到的是,在传参中,有一个东西很有意思,它叫做camera_info_msg,是一种我们的局部变量,对应的数据类型则是sensor_msgs/CameraInfo,我找来了下文 

 sensor_msgs/CameraInfo Message理解_camera_info 消息格式_hywmj的博客-CSDN博客

其中include表示将launch中的另一个xml的launch文件导入进来

当我们使用了GoalToCmdVel的时候,我们实际上使用的是一个构造函数,这个构造函数将会导致我们进行大规模的初始化,其中这些初始化可以看做包含以下部分

我们可以看到,当我们遇到get_param的时候,他会做的两件事,一个是检测是否存在,一个是根据判断返回对应值。

 ROS中编写Publisher和Subscriber的方法(Python版)_rospy.subscriber_宗而研之的博客-CSDN博客

这里也不难看到,我们其实是使用了rospy的订阅者模型,而且我们订阅的对象很简单,那就是一个是State类型的数据,一个是Twist类型的数据,目前的问题是这两种数据类型信息及其关联,未知!

其实我们可以看到,我们这里还有一种操作,因为在上述文件中我们include了一个文件,所以下面我们会做的就是将这个include的文件进行展开查看了

可以看到,这个文件还是充满了爱与正义的 ,其主要的功能说来甚至很搞笑,就是导入了之后再继续导入,怎么导入呢,如我们下面所述的那样:

先导入的是empty_world.launch,这个文件是空世界文件:

老规则,我们只要把param跳过之后看内容就可以了。

哈哈,并不是很困难呢,hh,h

我们可以再faster_interface中得到一些我们想要的答案,这些答案甚至很有意思,首先我们看一下这个launch文件:

 主要问题的关键内容是我们开启了几个节点,包括rviz,rqt_gui,JA01,其中group是什么,因为ros如果按顺序来的话,可能会有后边把前边干掉的情况,而他们若是一个组的就不会了

上边rostopic,下边rosnode,可以看到除了前边是共同的ns命名空间外,后边没有什么包含关系,由此可知话题和节点是重复的。 

发布消息时只要这样写就行了

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值