ZHAOCHENHAO-
码龄8年
关注
提问 私信
  • 博客:229,279
    社区:2
    229,281
    总访问量
  • 72
    原创
  • 28,324
    排名
  • 2,528
    粉丝

个人简介:Just for fun!

IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:浙江省
  • 加入CSDN时间: 2017-03-25
博客简介:

Awesomewan的博客

查看详细资料
  • 原力等级
    当前等级
    5
    当前总分
    1,934
    当月
    20
个人成就
  • 获得693次点赞
  • 内容获得103次评论
  • 获得4,298次收藏
  • 代码片获得5,849次分享
创作历程
  • 4篇
    2024年
  • 23篇
    2023年
  • 3篇
    2022年
  • 11篇
    2021年
  • 31篇
    2020年
  • 2篇
    2019年
成就勋章
TA的专栏
  • 强化学习
    2篇
  • Apollo源码解析
  • ROS2源码剖析
  • Effective C++
  • 网络协议
    1篇
  • ROS
    4篇
  • ubuntu系统
    8篇
  • Linux网络编程
    8篇
  • C++ Primer Plus学习笔记
    1篇
  • C++编程
    19篇
  • C++中的并发线程
    5篇
  • STL
    2篇
  • 设计模式
    2篇
  • 数据结构与算法实战笔记
    1篇
  • opencv笔记
    3篇
  • SLAM
    7篇
  • Eigen
    1篇
  • PX4
    3篇
  • 报错填坑!
    8篇
  • 图解HTTP笔记
    1篇
  • 无人机大赛
    2篇
  • UE4
    1篇
兴趣领域 设置
  • 人工智能
    opencv计算机视觉机器学习深度学习数据分析
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

PPO算法损失函数的设计

在讲解 PPO(Proximal Policy Optimization) 算法的优化目标之前,我们先用一个贴近生活的例子来类比它的核心思想,看看为什么要这样设计,以及它解决了什么问题。
原创
发布博客 2024.12.31 ·
881 阅读 ·
6 点赞 ·
0 评论 ·
11 收藏

PPO算法拆解

像学徒制作披萨一样:学徒(Actor-Critic 网络)在不同的状态(环境观测)做出不同决策(动作),得到不同反馈(奖励)。像记录流水账:每一步操作都记录在 storage 中,以便后续反思与学习。像定期复盘:等学徒完成一段时间练习,就进行一次PPO更新(update),在这过程中分析旧做法与新做法的差异,用“剪切”等安全措施避免学徒一下子完全推翻自己之前的经验。持续循环:多次“做批量披萨→记录→复盘更新”,学徒的“脑子”慢慢就学会了做出更好的披萨,动作也更合理,分数越来越高。
原创
发布博客 2024.12.31 ·
680 阅读 ·
31 点赞 ·
1 评论 ·
28 收藏

priority_queue的使用方法

默认情况下,priority_queue 是一个最大堆(即大元素有更高的优先级),但有时候我们需要最小堆(即小元素有更高的优先级)或者自定义优先级顺序。这可以通过自定义比较函数或仿函数来实现。最小堆的实现// 创建一个最小堆的 priority_queue// 插入元素pq.push(5);// 输出并移除堆顶元素while (!// 输出堆顶元素pq.pop();// 移除堆顶元素return 0;自定义排序。
原创
发布博客 2024.09.01 ·
1531 阅读 ·
27 点赞 ·
0 评论 ·
29 收藏

STL相关总结

STL(Standard Template Library,标准模板库)是 C++ 标准库中的一个重要组成部分。STL 提供了一组通用的模板类和算法,极大地简化了数据结构和算法的使用。STL 的设计思想是基于泛型编程,允许用户在不牺牲效率的情况下,使用高度抽象的通用数据结构和算法。
原创
发布博客 2024.08.24 ·
902 阅读 ·
22 点赞 ·
0 评论 ·
24 收藏

数据的IO和复用

poll()函数的机制与select()类似,管理多个描述符也是进行轮询,根据描述符的状态进行处理,但是poll()没有最大文件描述符数量的限制(但是数量过大后性能也是会下降)。对于send()函数和write()函数之间的差别是表示发送方式的flag,当flag为0时,send()函数和write()函数完全一致。Linux操作系统中的IO函数主要有read()、write()、recv()、send()、recvmsg()、sendmsg()、readv()、writev()。
原创
发布博客 2023.06.09 ·
1344 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏

本地进程间通信

在使用socket()函数创建套接字时,当需要在本地进程间进行通信而不涉及网络传输时,可以使用AF_UNIX或AF_LOCAL作为domain参数的取值。使用Unix域套接字时,可以通过指定文件系统中的一个路径作为套接字的地址,不同进程可以通过该路径来进行通信。常见的应用场景包括在同一台计算机上的进程间通信、服务器进程与其它进程间的通信等。总结来说,当需要在本地进程间进行通信,不涉及网络传输时,可以使用AF_UNIX或AF_LOCAL作为domain参数的取值,并使用Unix域套接字来实现进程间通信。
原创
发布博客 2023.05.18 ·
986 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏

常用的设计模式之二(行为型模式)

这个示例中,Subject 定义了主题类的接口,包括添加、删除观察者和通知观察者的方法, ConcreteSubject 继承了 Subject,并实现了具体的主题类,其中 setState 方法改变主题的状态,并调用 notify 方法通知所有观察者;然后定义一个模板方法,其中包含了一个算法的骨架,它通过调用基类中的方法来实现算法的各个步骤。模板模式的优点在于它使得算法的框架和具体实现分离,降低了实现算法的难度和维护成本,并且可以在不改变算法结构的情况下,方便地扩展和修改算法的具体实现。
原创
发布博客 2023.05.04 ·
855 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

基于UDP协议的接受和发送

UDP协议(User Daagram Protocol)是无连接的,不可靠的网络协议。本章将介绍如何使用UDP协议进行程序设计,对UDP编程的基本框架进行介绍并给出程序设计的例子。
原创
发布博客 2023.04.14 ·
229 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

TCP网络编程基础

TCP协议(Transmission Control Protocol)是TCP/IP协议中很重要的一个协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。它是一种端到端的协议,即它只在通信的两个端点之间起作用,并且不保证数据包的交付。TCP协议是一种可靠的协议,它通过确认和重传机制来保证数据传输的可靠性。
原创
发布博客 2023.04.11 ·
352 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

主机字节序和网络字节序

网络字节序采用大端字节序,即高位字节存放在内存的低地址端,低位字节存放在内存的高地址端。但由于网络的特点是将Internet上不同的网络设备和主机进行连接和通信,这决定了使用网络进行开发的程序要兼容于各式各样的设备,同一个数据在不同的设备上要有唯一的含义。例如,对于十六进制数0x12345678,大端字节序将其存储为0x12 0x34 0x56 0x78,而小端字节序将其存储为0x78 0x56 0x34 0x124。字节序是计算机存储多字节数据的方式,目前主流的方式有两种:大端字节序和小端字节序。
原创
发布博客 2023.04.10 ·
538 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

opencv入门知识略讲

【代码】opencv入门知识略讲。
原创
发布博客 2023.03.31 ·
162 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

深入浅出 Fast DDS网络协议(入门篇)

如果你是机器人领域的学者,那一定听说过ROS1和ROS2,但这两个有什么区别呢?ROS1作为一个通信中间件,在两两节点建立TCP/UDP连接之前,通过发布者和订阅者通过xmlRPC和master进行数据交换和查询,待匹配到相同的需求(topic)时,Master向订阅者提供发布者的地址和信息,然后两者再通过xmlRPC进行建立TCP/UDP的连接。但是,在ROS1在工业领域并不能满足实时、安全、认证、可靠。所以在ROS2中引入了FastDDS网络协议。
原创
发布博客 2023.03.30 ·
2192 阅读 ·
1 点赞 ·
2 评论 ·
7 收藏

CMake项目实战指令详细分析

CMake是一个跨平台的自动化构建系统,可以用简单的语句来描述所有平台的编译过程。CMake可以输出各种各样的编译文件,如Makefile、VisualStudio等。CMake主要是编写CMakeLists.txt文件,然后用cmake命令将CMakeLists.txt文件转化为make所需要的makefile文件,最后用make命令编译源码生成可执行程序或共享库(so (shared object))。
原创
发布博客 2023.03.29 ·
511 阅读 ·
1 点赞 ·
0 评论 ·
2 收藏

C++并发编程之五 高级线程管理

线程池是一种管理多个线程的技术,它可以减少线程的创建和销毁的开销,提高并发性能。线程池中有一定数量的空闲线程,当有新的任务到来时,就从池中分配一个线程来执行任务,当任务完成后,线程返回池中等待下一个任务。这样可以避免频繁地创建和销毁线程,节省资源和时间。在前面我们引入了线程的通信和同步手段,那么为什么还要引入线程池呢?
原创
发布博客 2023.03.16 ·
519 阅读 ·
0 点赞 ·
1 评论 ·
0 收藏

C++编程之 可变参数模板

在这个函数中,我们使用展开语句来展开args参数包,将参数包中的每个元素展开成一个独立的语句std::cout
原创
发布博客 2023.03.16 ·
589 阅读 ·
1 点赞 ·
1 评论 ·
0 收藏

C++17编程之 折叠表达式

折叠表达式是一种新的语言特性,它使得可以对包含若干个参数的可变参数模板进行操作,同时将其所有参数合并成一个值。比如,如果你用减法或除法作为一元右折叠的操作符,那么你得到的结果可能和你预期的不一样。(4)当一元折叠表达式中的参数包为空时,只有三个运算符(&& || 以及逗号)有缺省值,其中&&的缺省值为true,||的缺省值为false,逗号的缺省值为void()。(3)初始值在右边的为右折叠,展开之后从右边开始折叠。折叠表达式共有四种语法形式,分别为一元的左折叠和右折叠,以及二元的左折叠和右折叠。
原创
发布博客 2023.03.16 ·
1046 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

C++编程之 std::forward

当向wrapper里面传入1的时候,wrapper推导认为T是一个右值引用int&& ,通过引用折叠原则,int && + && =int&& ,相当于wrapper(int&& arg),同时我们知道了T推导为int&&,那么在向func传递的时候,就是func(std::forward<int&&>(arg)),那么func会以左值引用的形式func(int&& x)调用arg。对于一个模板函数或类模板,当传递一个参数时,如果该参数是左值,那么传递的就是一个左值引用;
原创
发布博客 2023.03.16 ·
9057 阅读 ·
11 点赞 ·
4 评论 ·
65 收藏

C++编程之 万能引用

万能引用是一种可以同时接受左值或右值的引用,它的形式是T&&,其中T是一个模板参数。万能引用不是C++的一个新特性,而是利用了模板类型推导和引用折叠的规则来实现的功能。你可以看到,在调用g时,t既可以绑定到左值上也可以绑定到右值上,并且保持了原来实参的属性。这就实现了万能引用。模板类型推导是指在调用一个模板函数时,编译器会根据传入的实参来推导出模板参数的类型。结合这两个规则,我们就可以理解万能引用的工作原理。
原创
发布博客 2023.03.16 ·
1160 阅读 ·
2 点赞 ·
1 评论 ·
4 收藏

C++并发编程之四 内存模型和原子操作

这样会浪费时间和空间。需要注意的是,在test_and_set()和clear()方法中,我们都使用了内存序参数std::memory_order_acquire和std::memory_order_release,这是为了确保对内存的访问是有序的。除此之外,std::atomic<>泛化模板还支持一些其他的操作,如fetch_add、fetch_sub、fetch_and、fetch_or、fetch_xor等,这些操作可以原子地执行加法、减法、按位与、按位或和按位异或等运算,并返回操作前的值。
原创
发布博客 2023.03.15 ·
1608 阅读 ·
2 点赞 ·
0 评论 ·
3 收藏

C++并发编程之三 并发操作的同步

C++并发编程实战三
原创
发布博客 2023.03.09 ·
1526 阅读 ·
2 点赞 ·
3 评论 ·
3 收藏
加载更多