c++回调函数/ROS回调函数

2023-05-16

以下均是个人在实际耕码的过程中遇到的问题和整理的结果,可能会有不对的地方,望各位指正与交流

-------------------------------------------------我会有喵的---------------------------------------------------

 

c++中的回调函数:

A "callback" is any function that is called by another function which takes the first function as a parameter.

 

 

直白点说,就是“函数#"的参数是另一个函数,通过“函数#"调用另一个函数,这个另一个函数就是回调函数。以数学形式来看(虽然不太恰当):Function(y)和g(x)。Function(y)是一个函数,g(x)也是一个函数,那么Function(g(x))就可以看成是一个回调过程,g(x)就是回调函数。

更直接地说,我们一般都是调用opencv里面的库函数,现在关系反过来了,我们要让opencv调用一个我们自己写的函数,这个过程就是回调。那个被opencv调用的(我们自己写的)函数就是回调函数。接下來举例规范地说一下:

不带参数的回调函数:

//回调函数
void wordsCallback() 
{
   std::cout<<"Hello World!"<<std::endl;
}

//实现回调函数的"调用函数"
void wods(void (*callfuction)())
{
    callfuction();
}

int main(int argc,char* argv[])
{
    words(wodsCallback);
    return 0;
} 

 程序的正确输出结果是:Hello World!

  带参数的回调函数:

//回调函数
void wordsCallback(char* s) 
{   
   std::cout<<s<<std::endl;
}

//实现带参回调函数的"调用函数"
void words(void (*callfuction)(char*),char* s)
{
    callfuction(s);
}

int main(int argc,char* argv[])
{
    words(wordsCallback,"Hello World!");
    return 0;
}

程序的正确输出结果:Hello World!

 

接下来我们看看ROS中的回调函数。一般来说这个回调函数会用一些比较显著且比较统一的名字:**Callback(如ScanCallback/CameraCallback),它是在订阅话题的时候使用的。所以在使用时,我们需要声明订阅话题的名称,然后选择话题,最后调用Callback函数。废话不多说,举个例子(突然想吃举个栗子了啊-------):

ros::Subscriber sub_raw_image = n.subscribe(IMAGE_TOPIC, 2000, imageCallback);

先声明订阅的话题的名称:

sub_raw_image 

然后,选择我们需要订阅的话题。

IMAGE_TOPIC

题外话,ROS中有很多话题,你可以自己写,上面这个IMAGE_TOIC就是我自己写的。当然你也可以使用一些系统提供的。比如你启动了激光雷达,不论是仿真Gazebo中的还是真的激光雷达(如rplidar),那你就可以订阅“/scan”这个话题。

 

2000代表我们一次性可以缓存多少消息(暂时没发现这个数字对我的程序会带来很大的影响,我经常写成1),最后那个就是回调函数了。

 

imageCallback

对于imageCallback的实现需要说一下。ROS中,imageCallback的参数是与你的话题息息相关的,你要跟据订阅的话题来确定参数。一般来说,程序的主要功能也都是在回调函数中实现的。你需要的数据,都是要通过话题订阅的,而订阅了就肯定有回调函数。你可以把一个个回调函数看成是一个个单独的线程。只要你订阅的消息一更新,回调函数就会被调用,对新的数据进行处理,程序就这么不断的进行下去了。这里我们仍旧举例:

 

 

void forwardCallback(const nav_msgs::Odometry::ConstPtr &forward_msg){}

void imageCallback(const sensor_msgs::ImageConstPtr &image_msg){}

需要确定的就是这个sensor_msgs::ImageConstPtr和nav_msgs::Odometry::ConstPtr啦!

嗯啊,今天到此结束啦,白白!

          

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++回调函数/ROS回调函数 的相关文章

  • stl中的智能指针类详解

    C 43 43 98 03的尝试 std xff1a xff1a auto ptr C 43 43 11标准废弃了std xff1a xff1a auto ptr xff08 在C 43 43 17标准中被移除 xff09 xff0c 取而
  • 对于ROS的工作空间的理解(一)

    对于每一个任务 xff0c 可以在根目录下为它分配一个工作空间 mkdir p catkin ws src xff08 src 源码 xff09 cd catkin ws catkin make 编译 xff0c 生成devel xff08
  • stc-isp协议

    一 数据封装格式 包头 标示 数据包长度 命令字 内容 校验 包尾 1 包头 xff1a 2字节 xff0c 固定为 xff1a 0x46 xff0c 0xB9 2 标示 xff1a 1字节 xff0c 分两种 xff0c ARM发给MCU
  • 干货!串口通讯的起始、数据、停止位都是怎么分配的?

    串口是串行接口 xff08 serial port xff09 的简称 xff0c 也称为串行通信接口或COM接口 串口通信是指采用串行通信协议 xff08 serial communication xff09 在一条信号线上将数据一个比特
  • Linux 下char转换为wchar_t(窄字符转换位宽字符)

    LInux下使用mbstowcs函数可以将char转化为wchar t 函数含义 xff1a convert a multibyte string to a wide char string 说明 xff1a The behaviour o
  • Linux服务器 安装Pytorch GPU版本

    实验室服务器重做系统之后 xff0c 之间搭建的Python环境已甚嚣尘上 xff0c 只好从头再来 但是过程中遇到很多莫名其妙的bug xff0c 特此立章记录 xff0c 望对他人有所帮助 作为一个深度学习的初学者 xff0c 个人对所
  • 鼠标悬停效果 PPT制作

    鼠标悬停效果实现 在制作PPT时 xff0c 有时候需要实现鼠标的悬停效果 xff0c 即将鼠标放置在某个按钮或图片上 xff0c 实现动态变化的效果 目标是 xff1a 当鼠标悬停在一些人物名字上时 xff0c 出现该人物的个人信息 具体
  • 谷歌学术——下载论文

    一些同学在找论文的时候 xff0c 在学校数据库找不到 xff0c 因此可以使用谷歌学术来找 但是国内被墙了 xff0c 无法访问 xff0c 所以可以使用镜像服务器 首先进入谷歌镜像 xff1a 镜像网站 xff08 https ac s
  • Ubuntu 22.04 安装vm-tools

    安装过程一路心酸 xff0c 大家慎重 在Vmware中新建虚拟机之后 xff0c 发现没有办法传输文件和进行随窗口的视图变化 xff0c 打算安装vm tools 但是在Ubuntu 22 04 中 xff0c 如果使用Vmware自带的
  • LD文件 详解

    ld 组合了许多对象文件和归档文件 xff0c 重新定位它们的数据并绑定符号引用 通常编译程序的最后一步是运行 ld 每个可加载或可分配的输出节都有两个地址 第一个是 VMA xff0c 即虚拟内存地址 这是运行输出文件时该节所拥有的地址
  • 【Linux0.11 源码历险记 2】《保护模式》

    继续跟着stup s 来看 xff1a lidt idt 48 load idt with 0 0 lgdt gdt 48 load gdt with whatever appropriate idt 48 word 0 idt limit
  • 【Linux0.11 源码历险记 3】《开启分页》

    下面我们就正式进入head s 的代码 xff1a text globl idt gdt pg dir tmp floppy area pg dir startup 32 movl 0x10 eax mov ax ds mov ax es
  • HttpClient使用HttpGet进行json数据传输

    JSON字符串需要用urlencoding编码对绝大多数HTTP client而言 xff0c URL长度都有上限 xff0c 所以不能传太大的JSON xff0c 一般而言几K应该没问题 xff0c 但是再长点就不好说了 import j
  • 【Linux 内核技术】RCU

    在阅读linux 3 10版本的socket 一节源码时 xff0c 遇到了一个 span class token function rcu dereference span span class token punctuation spa
  • 选择题改错

    一 单选 1 2 以下程序的运行结果是 xff08 xff09 int main void printf 34 s 5 3s n 34 34 computer 34 34 computer 34 return 0 A A computer
  • 安装程序的安装界面为乱码的问题

    有的时候程序的安装界面为乱码 xff0c 多出在msi程序中 xff0c 这其实是AppLocale的bug导致的 xff0c 解决的办法不用删除AppLocale xff0c 只需要到c windows AppPatch下 xff0c 删
  • 周星馳 電影經典對白

    周星馳 電影經典對白 http www jd bbs com viewthread php tid 61 1209979 amp extra 61 page 3D1 1 曾經有一份真誠的愛擺在我的面前 xff0c 但是我沒有珍惜 xff0c
  • Eclipse环境搭建

    Eclipse 环境搭建 C 43 43 还没有写完 xff5e xff5e xff5e xff5e 最近 xff0c 在作一个项目 xff0c 要求所有的软件 xff0c 包括操作系统 开发工具 等 xff0c 所有的软件都要使用正版的
  • 为什么要学习python

    时隔多年以后 xff0c 我又回归CSDN了 xff0c 回来学习学习 刚开始工作的时候 xff0c 在CSDN这里找各种资源 xff0c 各种学习 xff0c 请教 xff0c 等等 xff0c 确实学到了不少 也许是因为自己是做嵌入式开
  • 汇编

    hu bi n 1 动词 xff0c 把资料或文章等编辑在一起 2 名词 xff0c 编辑在一起的资料 xff0c 文献 汇编简介 汇编语言 Assembly Language 是面向机器的程序设计语言 汇编语言中 xff0c 用助记符 M

随机推荐

  • 杨石头智立方47:你我都必须学习的十大管理原则

    http blog sina com cn s blog 4ce6ecc60100fy5v html tj 61 1 一 素养 蓝斯登原则 xff1a 在你往上爬的时候 xff0c 一定要保持梯子的整洁 xff0c 否则你下来时可能会滑倒
  • Media change: lase insert the disc labled

    在Debian中使用apt get安装软件包时经常会提示让你插入netinst的光盘 xff1a Media change please insert the disc labeled 当没有时就无法进行安装了 xff0c 这时可以打开文件
  • Source Insight使用教程

    作为一个开放源代码的操作系统 xff0c Linux 附带的源代码库使得广大爱好者有了一个广泛学习 深入钻研的机会 xff0c 特别是Linux 内核的组织极为复杂 xff0c 同时 xff0c 又不能像windows 平台的程序一样 xf
  • 注册表ShellIconOverlayIdentifiers中没有svn相关的选项

    此问题最初是由于svn不显示Icon入手排查的 打开注册表 HKEY LOCAL MACHINE SOFTWARE Microsoft Windows CurrentVersion Explorer ShellIconOverlayIden
  • CreateProcess注入方法

    采用 CreateProcess 的方法 xff0c 实现起来比较复杂 xff0c 但没有上面几种方法的局限性 且可以用其他工 具 xff08 VC 等 xff09 调试注入的 DLL 下面进行介绍 原理如下 xff1a 1 xff0e 用
  • U盘防毒最强方案(创建删不掉的autorun.inf文件夹)

    病毒 xff0c 每个人都深受其害 xff0c 痛恨不已 xff0c 特别是现在移动设备MP3 MP4 手机 U盘 移动硬盘飞速发展的时代 xff0c 病毒也随着这些移动设备和网络快速蔓延和滋生 xff0c 所以如何防止病毒入侵到自己的爱机
  • Windows 7桌面显示图标窗口类名称

    Windows 7下 xff0c 我们取桌面图标窗口的句柄使用以下语句 在windows XP时代 xff0c 我们获取桌面图标窗口的句柄往往用一下语句 xff1a lt pre gt lt pre name 61 34 code 34 c
  • EnumThreadWindows枚举线程的所有窗口

    BOOL CALLBACK EnumThreadWndProc HWND hwnd LPARAM lParam std list lt HWND gt plist 61 std list lt HWND gt lParam plist gt
  • MFC窗口创建、销毁消息流程

    Windows 消息处理机制 MFC 应用程序中处理消息的顺序 1 AfxWndProc 该函数负责接收消息 xff0c 找到消息所属的 CWnd 对象 xff0c 然后调用 AfxCallWndProc 2 AfxCallWndProc
  • 数字螺旋方阵C++实现

    include lt iostream h gt include lt stdio h gt void main int k h i j n int sum 61 0 int q 61 1 while 1 k 61 h 61 i 61 j
  • 过桥问题动画显示(多线程,简陋版)

    Code include lt windows h gt include lt iostream h gt include lt stdio h gt void gotoxy int x int y COORD c c X 61 x c Y
  • 【大三操作系统实验】 请求页式管理中的置换算法

    xff08 1 xff09 FIFO算法总是选择在内存驻留时间最长的一页将其淘汰 FIFO算法认为调入内存的页不再被可能性要比其他页大 xff0c 因而选择最先调入内存的页换出 xff08 2 xff09 LRU算法基本思想 xff1a 当
  • 【大三操作系统实验】 作业进程调度算法

    xff08 1 xff09 FCFS算法 将用火作业和就绪进程按提交顺序或变为就绪状态的先后排成队列 xff0c 并按照先来先服务的方式进行调度处理 xff0c 是一种最普遍和简单的方法 xff08 2 xff09 轮转法 让每个进程中就绪
  • 成为游戏开发程序员,要学些什么

    一 游戏程序开发的工作主要包括哪些方面 游戏开发中的程序开发主要由如下几个方面组成 xff1a 1 xff0e 图形引擎 2 xff0e 声音引擎 3 xff0e 物理引擎 4 xff0e 游戏引擎 5 xff0e 人工智能或游戏逻辑 6
  • java反射记录2(20160512更新)

    private void reflectionMethodTest 获取方法 Method invalidateMethod 61 getReflectionMethod 34 android view View 34 34 invalid
  • 五险一金,你知道多少

    具体的社保构成比例为 养老保险 单位每个月为你缴纳21 你自己缴纳8 医疗保险 单位每个月为你缴纳9 你自己缴纳2 外加10块钱的大病统筹大病统筹主要管住院这块 xff1b 失业保险 单位每个月为你缴纳2 你自己缴纳1 工伤保险 单位每个月
  • STL与boost

    待细化 STL STL是standard Template Library即标准模板库的英文缩写 xff0c STL标准模板库 xff08 Standard Template Library xff09 泛型编程思想 STL主要由几个核心部
  • 头文件和库文件有何区别和联系

    头文件中有函数的申明 xff0c 库文件实现函数的定义 比如 xff0c printf函数 使用时应包括stdio h xff0c 打开stdio h你只能看到 xff0c printf这个函数的申明 却看不到printf具体是怎么实现的
  • Visual Studio Code 如何编写运行 C、C++ 程序?

    作者 xff1a 知乎用户 链接 xff1a https www zhihu com question 30315894 answer 154979413 来源 xff1a 知乎 著作权归作者所有 商业转载请联系作者获得授权 xff0c 非
  • c++回调函数/ROS回调函数

    以下均是个人在实际耕码的过程中遇到的问题和整理的结果 xff0c 可能会有不对的地方 xff0c 望各位指正与交流 我会有喵的 c 43 43 中的回调函数 xff1a A 34 callback 34 is any function th