- 博客(738)
- 资源 (38)
- 收藏
- 关注
原创 Protobuf c++使用
Protobuf(Protocol Buffers)是 Google 开发的一种高效的结构化数据序列化工具,可用于数据存储、通信协议等场景。体积更小:二进制编码,数据压缩率高;解析更快:无需解析字符串,效率是 JSON 的 5-10 倍;跨语言兼容:支持 C++、Python、Java 等多种语言;可扩展性强:新增字段不影响旧版本解析。
2025-11-05 00:28:55
864
原创 ROS2-CMake学习
跨平台构建系统生成器生成 Makefile(Linux)、Visual Studio 项目(Windows)等ROS 2 的官方构建工具(通过 ament_cmake)ROS 2 的 CMake 构建系统基于 CMake,提供 ROS 2 特有功能简化依赖管理、消息生成、包导出等目录结构├── msg/├── srv/示例消息# 消息定义示例服务# 请求---# 响应示例动作# 目标---# 结果---# 反馈# 1. 生成接口# 2. 创建节点rclcpp。
2025-10-18 16:53:26
741
原创 ROS2_YAML参数系统完整指南
ROS2参数系统是ROS2框架提供的配置管理机制,允许节点在运行时获取配置参数。命令行参数Launch文件参数默认值calibration配置文件 > 包内配置文件 > 默认值1. 节点启动2. 调用loadConfiguration()3. 在loadConfiguration()中:- 检查/var/psi/calibration/config.yaml- 如果不存在,检查包内config.yaml- 使用set_parameter()设置参数到参数服务器。
2025-09-22 22:40:41
1082
原创 Python3练习题
需求:创建自定义模块 “math_tools.py”,包含 “add(加法)、multiply(乘法)、is_prime(判断质数)” 三个函数在主脚本中导入该模块,调用函数并测试步骤 1:创建模块文件 “math_tools.py”# math_tools.py(自定义模块)"""加法运算""""""乘法运算""""""判断n是否为质数(质数:大于1的整数,仅能被1和自身整除)"""if n <= 1:if n == 2:# 检查3到sqrt(n)的奇数步骤 2:主脚本调用模块。
2025-09-15 23:55:51
1360
原创 作为一个C++老鸟,看我如何一天学会 Python
构造函数,相当于C++的构造函数self.name = name # 相当于public成员self.age = age # 相当于public成员。
2025-09-08 23:17:49
1247
转载 Ubuntu系统下,截图软件(飞书,flameshot等)无法正常截图与编辑
Ubuntu系统下,截图软件(飞书,flameshot等)无法正常截图与编辑
2025-09-01 11:08:55
109
原创 如何定义服务接口
在包中创建 srv 目录并添加服务定义文件mkdir srv# 请求部分:三个整数 int64 aint64 bint64 c--- # 响应部分:求和结果 int64 sum。
2025-08-24 13:28:19
384
原创 工作空间与功能包
举个例子,我们手上有很多红豆、绿豆、黄豆,假设都放在一个袋子里,如果只想把黄豆都拿出来,是不是得在五颜六色的豆子里一颗一颗都找出来,数量越多,你就越头疼;每个机器人可能有很多功能,比如移动控制、视觉感知、自主导航等,如果我们把这些功能的源码都放到一起当然也是可以的,但是当我们想把其中某些功能分享给别人时,就会发现代码都混合到了一起,很难拆分出来。想象一下你的系统是一个巨大的图书馆(System Library),而你的ROS2工作空间是你刚写完的一本新书(Your New Package)。
2025-08-23 14:13:48
598
原创 安装Tailscale
如果返回 /usr/bin/tailscale 或类似路径,说明已安装但 sudo 可能找不到它。如果 which tailscale 没有输出,说明安装失败,重新执行安装步骤。Tailscale 的后台服务 tailscaled 必须运行。检查 tailscaled 服务是否运行。检查 tailscale 命令是否存在。
2025-08-22 17:11:30
587
原创 Bash常用操作总结
变量名区分大小写,通常大写表示常量,小写表示变量。定义:变量名=值 ( 等号两边不能有空格!使用:$变量名 或 ${变量名} (推荐后者,明确边界)。示例:name="Alice" # 定义变量" # 使用变量echo $greeting # 输出: Hello, Alice!echo "My name is ${name}." # 输出: My name is Alice. (明确边界)
2025-08-16 15:50:59
1352
原创 SSH远程登录
大多数Linux/windows/Mac都已经预装了openssh,无需额外安装。命令:ssh-copy-id bing@132.168.1.123 至此要输入密码。使用别名的登录方式,需打开~/.ssh/config文件,追加一下内容。2.需安装ssh客户端组件,由openssh-client包提供。2.需要安装并运行ssh服务,由open-server包提供。1.使用服务的主机,它向服务发起请求来获取所需的资源和服务。1.安装VSCode插件:Remote - SSH。
2025-08-12 10:15:41
708
原创 容器技术之docker
Docker是一个用于构建build 运行run 传送share应用程序的平台Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可抑制的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器完全使用沙盒机制,相互之间不会存在任何接口。几乎没有性能开销,可以很容易的在机器和数据中心运行。最重要的是,他们不依赖于任何语言、框架或者包装系统。
2025-08-11 17:28:47
1929
原创 linux下如何安装软件
区别:full-upgrade 会处理依赖冲突(可能删除阻碍升级的旧包)从配置的软件源(/etc/apt/sources.list)下载软件。作用:从服务器获取最新的软件包列表(不会升级已安装软件)缓存位置:/var/lib/apt/lists/提供软件安装、更新、卸载等全生命周期管理。频率:每次安装新软件前都应执行。完全升级(可能删除旧包)完全卸载(包括配置文件)安全升级(不删除旧包)自动处理软件依赖关系。
2025-07-27 00:35:10
237
原创 Linux c++ CMake常用操作
添加子目录:每个模块(子目录)中都需要一个CMakeLists.txt文件,最外层也有该文件,并且在该文件中添加子目录路径:add_subdirectoory()。需要子目录的原因:在一个项目中,不可能用一个cpp文件包含所有的功能,故分为多个模块在不同目录中。在每个模块中,可以单独编译,再和其他模块解耦(组合)。可见生成了libdyStudent.so动态库,接着运行。src中的CMakeLists.txt。最外层的CMakeLists.txt。二、方式2-静态库的方式。三、方式3-动态库的方式。
2025-07-26 19:37:38
386
原创 c++总结-04-智能指针
• 线程安全:引用计数的增减是原子的(通过 std::atomic 实现),但对象本身的访问需要额外同步。• 内存占用:每个 shared_ptr 携带指向控制块的指针(通常为 16 字节)。• 不增加引用计数,但可检测资源是否有效(通过 lock() 获取临时 shared_ptr)。• 组成:引用计数、弱引用计数、删除器(Deleter)、分配器(Allocator)。• 存储成本较裸指针多了引用计数指针(和相关控制块-共享)• 接口慎用(蔓延问题)• 智能指针仅用于管理内存,不要用于管理非内存资源。
2025-05-25 23:11:37
949
原创 c++总结-03-move
第二个warp()函数调用实参是右值,根据引用折叠规则,funcMiddle()函数接收的参数类型是右值引用,那么为什么却调用了调用func()的左值版本了呢?(2)转发:从main()函数中调用funcMiddle()函数,通过funcMiddle()函数调用funcLast()函数,这就叫做转发,funcMiddle()函数被当作一个跳板函数。但是C++中不允许对引用再进行引用,对于上述情况的处理有如下的规则:所有的折叠引用最终都代表一个引用,要么是左值引用,要么是右值引用。这就是移动操作的来源。
2025-05-18 22:22:23
1048
原创 C++总结01-类型相关
在C++中,临时对象(Temporary Objects)是编译器在表达式求值过程中隐式创建的、生命周期短暂的匿名对象。返回值优化(Return Value Optimization,RVO)是 C++ 编译器的一项重要优化技术,用于消除函数返回对象时的临时对象构造和复制/移动操作。在C++中,内嵌对象(作为类的成员变量)的构造和析构时机遵循特定的规则,理解这些规则对于正确管理对象生命周期非常重要。• 基本数值类型,以及auto自动推断类型声明,可以继续使用赋值初始化(除非需要避免数值窄化转型)。
2025-05-04 00:04:54
1308
原创 c++17文件系统
在编程世界中,目录操作是不可或缺的一部分。无论你开发什么你都需要与文件系统(Filesystem)进行交互。C++ Filesystem库提供了一种标准化和跨平台的方式来进行这些操作。
2024-11-09 00:46:12
515
原创 模板与泛型编程-变量模板
别名模板是c++ 11引入的,引入的目的是不但能简化书写,而且可以达到其他手段很难实现的效果,一般都是通过using实现别名模板。
2024-10-13 12:41:35
142
原创 c++11~c++20 thread_local
线程局部存储是指对象内存在线程开始后分配,线程结束时回收且每个线程有该对象自己的实例,简单地说,线程局部存储的对象都是独立各个线程的。实际上这并不是一个新鲜个概念,虽然C++一直没因在语言层面支持它,但是很早之前操作系统就有办法支持线程局部存储了。
2024-10-09 22:30:44
417
原创 c++11~c++20 内联命名空间
突然某天加入了新特性,需要升级接口。有些客户需要升级,有些客户担心稳定性,而不愿意升级,还想用原来的接口,那我们就可以用下面的方法来解决该问题。在c++11中增强了命名空间的特性,提出了内联命名空间的概念 ,内联命名空间能够把空间内的函数和类型导出到父命名空间中,这样即使不指定子命名空间也可以使用其空间内的函数和类型了。在工作,我们经常会引入第三方库,偶尔会碰到同名的函数和类型,造成编译冲突的问题。可以看到应用端无需该代码,底层库只需要改变inline的位置即可!使用新的接口(愿意更新的用户)
2024-09-28 15:46:08
432
原创 c++11~c++20 numeric_limits
在c++中应该尽量少使用宏,用模板取而代之是明知的选择。我们可以使用numeric_limits来获取最大值和最小值,例如。
2024-09-28 12:54:37
446
原创 Linux c++开发-14-IO复用
在select这种I/O多路复用机制下,我们需要把想监控的文件描述集合通过函数参数的形式告诉select,然后select会将这些文件描述符集合拷贝到内核中,我们知道数据拷贝是有性能损耗的,因此为了减少这种数据拷贝带来的性能损耗,Linux内核对集合的大小做了限制,并规定用户监控的文件描述集合不能超过1024个,同时当select返回后我们仅仅能知道有些文件描述符可以读写了,但是我们不知道是哪一个,因此程序员必须再遍历一边找到具体是哪个文件描述符可以读写了。第三个文件描述符可以读写了吗?
2023-12-25 15:38:31
712
mysql+connetcot.txt
2019-12-29
30岁的程序员如何防脱
2023-10-16
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1