20.Roscpp/Rospy:Topic_demo

》》点赞,收藏+关注,理财&技术不迷路《《

主要详讲roscpp。rospy直接放上模板。

Roscpp-topic

两个进程,node1不断发发GPS信息坐标和状态给node2,node2不断地计算。

实际:node1 可以是一个传感器,它从串口或者传感器读取数据,然后通过ros封装变成一个message。

Package  首先一定要先建立一个package,有了package才有地方存放源代码等一些东西。

定义好message

一个node代码放在talker.cpp里面

另一个node代码放在listner.cpp里面

写完代码一定要修改CMakeLists&package.xml告诉编译系统去编译这些文件。

 

Package/msg

坐标用float32型来表示坐标。定义好了坐标和state我们就定义好了message的格式。

这个gps.msg我们并不能用,要对它进行编译,编译完了后它会在

,意思就是定义好message文件后它进行编译后它会生成一个头文件。最后我们在代码里面用的就是头文件,#include

 

Talker.cpp(背诵默写

在所有程序里面基本都是这个模型!!!(周期性发布场合)

Ros::init初始化所有参数并命名。

然后创建一个句柄,用nodehandle提供的一个advertise的方法来创建一个publiser,然后用这个publiser不断地往我们需要的topic上发送消息,发送message。

因为我们想周期性发布,所以我们把这个publish的方法放在一个while循环里面。

句柄就是把手,就是给我们提供了一套工具,让我们来操作这个node。提供给我们了很多操作这个node的很多方法,我们拿着这个句柄就能创造publiser,service等等。

 

Listner.cpp(背诵默写)

gpsCallback是一个指针,指向了处理这个消息到回调函数。我这个subcriber如果接收到了从gps_info上传来的消息,那我就会去做一个处理,用gpsCallback来处理。

要注意函数的参数:这里我们ConstPtr是一个指针,这里用一个指针作为他的传入参数。ConstPtr是一个长指针,它定义在msg生成的头文件里面(gps.h – gps.msg)其中有一个topic_demo ::gps这一个类,这个类里面又定义了一个长指针这个类型,然后我们把长指针的引用进来。

计算gps到原点距离,我们就声明一个std_msgs, 我们用ros自带的Float32 distance;(必须写成float distance::data,如果用C++里面的语法就不需要data。)然后把distance到原点距离输出,这样就定义好了一个回调函数。它

它把回调函数的函数名作为参数传给subscriber,每当来一个消息,就会把消息先存在队列里面,这里必须调用一个spin()函数,这个函数会反复查看这个回调函数队列里面有没有东西,有的化就清空队列处理消息,没有的化就不调用回调函数。Pin()是阻塞函数,spinOnce()是非阻塞函数。

回调函数并不是定义好就会触发,而是要调用spin()才会触发。

 

CMakeLists.txt

红色的是自己要加上去的。

 

Package.xml

Rospy-Topic相关:

Subscriber是一直回调一直接收,但是wait_for_message是只接收一个message。

Topic_demo

方法和在roscpp中写的时候一模一样。

 

Pylistner.py

 

Pytalker.py

 

CMakeLists.txt

Python是一个编译类语言,自己会解释,所以不需要CMakeLists,但是我们还是要写,因为不是因为python,而是它要管message_generation就是python里用到的这个类型,必须要经过编译才可以用。

 

Package.xml

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值