- 博客(29)
- 资源 (11)
- 收藏
- 关注
原创 c++泛型编程之技术运用
又叫做常量整数包装器,它在编译时将整型常量视为类型,实现基于常量整型的静态调用分配。当具现化一个template时,编译器会把目前存在的偏特化和全特化的template做比较,并找出其中最适合的。它的运作方式是如果flag为true,则使用第一个泛型定义,因为Result会被定义成T,如果flag为false时,就会用偏特化的定义,Result被定义成U。上面提到不存在template函数的偏特化,但是我们偶尔需要模拟出偏特化的机制,一是可以使用函数重载的方式实现,另外可以使用Type2Type的方式。
2025-12-19 14:42:58
280
原创 C++泛型编程之Type Traits
C++中的type traits是模板编程在编译期间的工具,它允许程序员检查和修改类型的信息,通常基于静态方法,来获取某个类型的属性或者对类型做出某些判断。
2025-12-08 22:17:58
127
原创 c++泛型编程之基于policy的class设计
Template是一种很适合“组合各种行为”的机制,只要因为它们是“依赖使用者提供的型别信息”并且“在编译期才产生”的代码。多重继承与template之间是互补的。多重继承欠缺技术,而template有着丰富的技术;多重继承缺乏型别信息,但是在tempate中大量存在;template的特化无法扩张,但是多重继承确很容易扩张;你只能为template成员函数写一份缺省版本,但是你可以写无数个Base class。如果我们将多重继承和template组合起来,那么将会产生非常具有弹性的设计。
2025-12-03 21:20:01
833
原创 ros2_control之hardware_interface
硬件组件代表了ros2_control框架中物理硬件的抽象概念,主要分为三种类型:控制器、传感器、执行器。
2025-11-19 18:02:17
262
原创 ros2_control之controller_manager
如果进程中有多个Node,全局节点名称重命名规则也会修改ControllerManager节点的名称,从而导致节点名称重复,无论节点是兄弟节点,还是位于层级结构中的节点,都会发生这种情况。有个workaround的方法是,传递给ControllerManager节点的NodeOptions中指定另一个节点的映射规则,使其忽略全局规则,以确保重映射规则针对的特定节点。urdf的xml字符串,订阅自robot_state_publisher,所有关节定义在urdf的<ros2_control>对应的tag中。
2025-11-19 16:19:28
453
原创 ROS2编译及代码结构
ros教程:https://docs.ros.org/en/humble/Tutorials.html。ros官方文档:https://docs.ros.org/en/humble/
2025-09-26 18:39:24
167
原创 ros代码下载
以下以拉取humble版本为例,拉取ros2的全量库。参考文档:https://docs.ros.org/en/humble/Installation/Maintaining-a-Source-Checkout.html。(ubuntu每隔两年4月会出一个稳定的大版本,8月会出一个稳定的版本)humble版本可在ubuntu 22.04版本上运行。jazzy版本可在ubuntu 24.04版本上运行。
2025-09-26 18:20:11
206
原创 从0到1软件设计总结
逻辑视图面向系统逻辑分析,是描述系统逻辑结构的视图。系统中包含哪些模块,模块都位于哪几层,各模块之间什么联系,各模块之间如何通信/调用接口如何定义,此时可以用系统分层逻辑图表示,也可以佐以组件图,以此定义模块与模块之间的依赖,每个模块负责哪些内容,模块与模块之间如何通信,模块A对模块B的需求接口如何定义,模块B向模块A提供哪些接口。在系统中总是存在各种各样的异常,在系统设计中,尤其是中间件的设计中需要着重考虑异常的应对,分析当出现异常时,软件如何应对,是怎么样的行为,才能设计出鲁棒性够好的软件。
2025-08-28 22:13:53
276
原创 无锁队列的实现
ypipe性能比较高,但是不适用于多读多写的场景,因为在读的时候没有对r指针加锁,在写的时候没有对w指针加锁。yqueue、ypipi(yqueue的封装)
2025-08-19 20:06:13
881
原创 zmq_socket
ZMQ_DISH类型用于_subscriber_,来订阅组内的由_radio_发送的消息,最开始ZMQ_DISH套接字并不会订阅某个组的消息,需要通过zmq_join函数加入组,通过zmq_msg_group函数获取所属组的消息,该类套接字不能使用_zmq_send()_方法。_zmq_send()_方法永远不会阻塞。ZMQ_PUSH套接字用于管道中_node_发送消息给下一个管道的_node_,消息是轮询发送给管道下游的_nodes_,该套接字不能使用_zmq_recv()_方法。
2025-02-07 17:21:06
1134
原创 多线程编程
什么是线程?线程是轻量级进程,是操作系统统一调度的最小单元。每个进程都有独立的用户地址空间,而运行在进程中的多个线程共享进程的地址空间,因此进程内线程之间的通信就会变得简单,但是线程又有独立的栈,因此我们可以写出线程安全的函数(即该函数只使用的栈空间,不使用堆空间,那么该函数就可以说是线程安全的)。为什么要用到多线程?在编程中,为了提高代码的运行效率,希望代码能够并行运行,因此就用到了多线程。
2024-07-14 23:05:25
770
原创 rtps协议——平台专用模型(PSM)
9.5 UDP/IP传输消息。9.3 RTPS类型映射。9.4 RTPS消息映射。9.6 RTPS协议映射。
2024-06-06 15:40:17
527
原创 rtps协议——综述
7.4 RTPS平台依赖模块(PIM)7.5 RTPS平台特殊模块(PSM)7.2 DDS有线协议的需求。7.3 RTPS有线协议。7.6 RTPS传输模块。
2024-06-06 15:34:41
508
原创 python基础教程——文件
管道将一个命令的标准输出链接到下一个命令的标准输入。open(path[, mode]):打开文件read([len]):读取,sys.stdin.read()从标准输入中读入readline([len]):读取一行readlines():读取所有行,结果以列表的方式返回write(str):写入writelines(list):接受一个字符串列表,并将这些字符串都写入到文件中,写入时...
2024-04-20 14:22:13
223
原创 python基础教程——开箱即用
探索模块(可用Python解释器)首先import module使用dir:查看模块包含哪些东西,该函数列出对象的所有属性(对于模块,它列出所有的函数、变量、类等)。变量__all__:正则表达式通配符:点号与换行符外的任何字符都匹配,因此被称为通配符。点号匹配一个字符。对特殊字符进行转义:让特殊字符的行为与普通字符一样,需要对其进行转义。转义符为反斜杠,但是这里包含两...
2024-04-20 14:21:40
425
原创 魔法方法、特性和迭代器
构造函数子类必须调用超类的构造函数,以确保基本的初始化得以执行。为此,有两种方法:调用未关联的超类构造函数,以及使用函数super,即便有多个超类,也只需调用函数super一次,条件是所有超类的构造函数也使用函数super。...
2024-04-20 14:21:15
188
原创 python基础教程——抽象
斐波那契数列:每个数都是前两个数的和。fib[k] = fib[k-1] + fib[k-2]例子:fibs = [0, 1]for i in range(8):… fibs.append(fibs[-2]+fibs[-1])…fibs[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]判断某个对象是否可调用,可以使用内置的callabl...
2024-04-20 14:20:48
1081
1
原创 Python基础教程——内建函数
getattr(object, name[, default]); #从对象object中获取名称为name的属性,等效于调用object.name第二个参数default为可选参数,如果object中含有name的属性,则返回name属性的值,如果没有name属性,则返回default的值,如果default没有传入值,则报错。zip #将两个序列缝合起来,并返回一个由元组组成的序列。返回值...
2024-04-20 14:20:12
264
原创 条件和条件语句
三目运算符:如果条件(紧跟在if后面)为真,表达式的结果为提供的第一个值(这里为friend),否则为第二个值,这里为stanger。name = ‘gf’status = ‘friends’ if name.endswith(‘gf’) else ‘stranger’status‘friends’Python的比较运算符表达式 描述x==y x等于y(比较对象内容)x<y...
2024-04-20 14:19:28
305
原创 Python基础教程——字符串
Python基础教程——字符串字符串格式化:str.format()可以接受无限个参数,位置可以不按顺序。例子:‘{}{}’.format(‘hello’, ‘world’)‘helloworld’‘{} {}’.format(‘hello’, ‘world’)‘hello world’‘{0} {1}’.format(‘hello’, ‘world’)‘hello world’...
2024-04-20 14:18:54
208
原创 整体架构介绍
fastdds是DDS(数据分发服务)规范的C++实现,该规范是由OMG(对象管理组)定义的协议。fastdds库提供了应用程序API和通信协议,部署DCPS(以数据为中心的发布者-订阅者模型),在实时系统之间建立高效、可靠的信息发布。只有属于同一个domain内的实体才可以被互相发现。同一domain中的实体通过匹配topic等可建立通信。
2024-04-16 23:09:40
688
原创 fastdds服务发现
域名参与者互相发现,每个DomainParticipant定期发送公告消息,指定DomainParticipator正在侦听传入元数据和用户数据流量的单播地址(IP和端口),当两个给定的DomainParticipants存在于同一DDS域中时,它们将匹配。
2024-04-16 14:53:11
1834
开发工具和语言相关源码和官方文档
2021-04-19
Linux服务端编程C++网络库(详细书签).rar
2020-07-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅