- 博客(15)
- 收藏
- 关注
原创 针对c++的内存泄露
Wheel Robot 没有调用析构函数,在这里WheelRobot中的resource即便用上了只能指针,也没有进行内存释放,因此导致内存泄露。因此第二种情况只能通过给基类对象的析构函数添加virtual关键字处理成虚函数解决。针对第一种,手动释放即可,也可以通过智能指针解决(如果记性不太好),当然为了双重保险,可以把习惯更改一下,同时进行手动释放。@在一个函数中,申请了一块内存,但是在函数的末尾或整个程序都没有进行手动释放。@在多态的情况下,基类的析构函数没有加上virtual关键字。
2023-08-28 11:44:40
152
原创 Ros1和Ros2的差异
但Ros1存在master概念(roscore),Publisher要将发布话题的消息发送给master缓存,再由subscriber订阅话题,master将对应的消息发送给订阅者,。Ros1中机制通信模式分为同步模式和异步模式,在同步模式中程序所设置的缓冲区大小将会生效。举例:结点A和B正在运行,若结点B突然崩溃或退出,A会把消息继续发送到缓冲区,十分钟后B再次运行,重新加入结点群,B能接收到A这十分钟内发布的消息。而在异步模式下,B会错过这十分钟内的消息,直接等待A下一次发布的消息。
2023-08-06 00:15:00
731
原创 责任链模式
耦合举例:在一个公司中,如果作为普通员工的你,如果想要请假的话,组长可以签字批准,科长也可以签字批准,部门经理也能签字批准。以上任何一位领导都能签字通过,那么他们在这方面的工作内容就存在了耦合。同样在程序中也一样,类A发出请求,类B可以处理A的请求,类C可以,类D也可以。这样很多类都能处理同一件事情,这样代码中就存在耦合。针对这种情况就可以使用职责链模式进行解耦处理:职责链模式的定义:职责链模式是一种行为型设计模式,它通过将请求处理对象组织成链式结构,使得请求在这些处理对象之间传递,直到一个处理
2023-07-31 19:45:00
132
1
原创 单例模式——
正当此时,B查电脑发现没有买车,B也去购买车,这样当AB回来的时候就发现,这个时候小组内居然买了两台,而公司规定一个组只能有一台车,到时廉政公署的人下来查必定会弄死我们。互斥:例如其中一个员工除去采购的时候,另一个员工就等着,不要再出去了,你哪怕不知道他除去买什么东西,都等着,直到东西买回来了再说。条件变量:例如其中一个员工除去采购的时候,另一个员工查看他到底买车还是买其他,如果买车就等着,买其他就立刻去买车。懒汉式:直到调用时,才会对该类进行初始化,所以存在直到整个进程运行结束,都不会实例化的情况。
2023-05-20 17:04:35
100
原创 模板方法模式
举例:在有汽车这种产品的场景下,小鹏正在研发会飞的汽车,军方正在研发战车,过程都是在汽车上添加各自需要的功能。1所有不同类型的产品中有一个或多个相同的属性。2在以存在的产品中分系列或者进行迭代。
2023-05-20 11:53:54
97
1
原创 抽象工厂模式
现在由不同的供应商(BYD X SANY)提供,并且每类产品有不同的信号。而该场景下byd只制造汽车,公交车,小鹏只造汽车和四轴汽车,三一重工只制造轮船和货车。后续假设需要加上华为的汽车或手机,小米的汽车或手机,需要先设计手机类Phone,随后创建HuaweiPhone和MiPhone。最后创建各自的工厂。此场景下,设置了虚基类Product,Car,Bus,Ship ,Hevicotor .以及byd工厂,X工厂,和SANY工厂分别处理各自的业务。假设目前存在汽车,公交车,四轴车,货车四类产品。
2023-05-17 21:00:00
108
1
原创 工厂方法模式
假设一家公司生产不同总类的产品但不分系列,例如水果模型公司,包括苹果,桃子,西瓜,柠檬,葡萄......这中场景下使用工厂方法模式最合适不过。1产品总类繁多,但是不用分系列。2需要频繁添加或删除产品总类。以下场景适用于工厂方法模式。
2023-05-17 20:15:00
91
1
原创 简单工厂模式
1所有产品都已确定下来,不再添加新产品也不删除旧产品(如果需要频繁添加或删除产品推荐使用工厂方法模式)2所有产品都属于同一类别(不分系列,这里博主犯了一个错误,如产品分多个系列,推荐使用抽象工厂模式)3产品种类基数不大,否则工厂类将会很臃肿(个人觉得这一点相比前两点对开发影响较小)2 调用者需要添加新产品时候,工厂类的设计着需要修改工厂类的模型。优点 在调用创建产品接口时候,调用者不需要关心创建细节。缺点 1在产品种类较多时候,工厂类将会显得非常臃肿。
2023-05-16 17:03:39
101
1
原创 动态数组vector
然而2倍扩容每次扩容时申请的新空间大小都比以往申请空间的总和要大,因此旧空间被释放后将无法再进行使用,而1.5倍扩容,旧空间被释放后,经过几轮,可以对释放后的旧空间重复利用。理想的方案是第N次扩容后,能将前N-1次扩容释放的内存进行回收并在这一次利用,所以使用1.5倍,但例如Linux,ARM单片机这类回收耗时特别长,所以设计成2倍扩容。2倍扩容时可能会出现以下问题,但容量为100,进行2倍扩容后,容量变成200,但是需要存储的元素个数只有101,这就会造成1/2容量的浪费。按2倍扩容则需要进行四次扩容。
2023-05-08 14:30:39
95
原创 ros下使用CANopen与电机进行通讯
CAN总线的通讯模式:PDO:过程数据对象(Process Data Object),过程数据的发送,实时、速度快,提供对设备应用对象的直接访问通道,它用来传输实时短帧数据,具有较高的优先权。PDO 传输的数据必须少于或等于 8 个字节,在应用层上不包含传输控制信息,报文利用率极高通常编码器的数据读取以及车轮的控制通过PDO。
2023-05-06 16:02:56
4292
7
原创 编写自己的轮速里程计模块
在ros中,编写轮速里程计模块 并使用Gazebo进行仿真,其中驱动轮的转速由/joint_states话题推算而来(其作用相当于编码器),底盘的偏航角通过订阅/imu_data话题消息得到,拥有以上两种数据就能编写轮速里程计模块,无法应对机器人车轮打滑以及机器人绑架问题,但短时间内轮速历程计的数据是可靠的。本文所介绍的轮速里程计运动学模型只适用于差速轮模式,但最后由机器人线速度推导出里程计的公式适用于麦克纳姆轮,全向轮,四驱轮模式。
2023-05-06 08:44:43
2315
3
原创 在Gazebo中获取驱动轮的角度和角速度
例如这份仿真用的机器人用到了两轮差分运动的运动学模型,为了在gazebo中能够读取驱动轮的角速度和加速度等信息,还需要使用controller_manager中的joint_state_controller,以及velocity_controllers。然而,现实中没有gazebo中的完美里程计,我们需要获取机器人的线速度(通常通过电机的编码器推算获得)、角速度(通常通过获取IMU数据推算获得)、激光雷达数据、深度相机的数据、GPS以及其他传感器数据,并进行融合获得里程计。
2023-04-25 00:00:00
1120
6
原创 单线激光雷达的外参标定方法
这个误差值具体可分为旋转角度误差与平移误差,其中平移误差可通过测距仪等测量工具测得,且对最终输出的结果精度影响较小。重要的是角度误差,具体分为3个方向的角度误差,roll、pitch、yaw,这3个角度不方便通过工具直接测量,且对最终输出的结果精度影响较大。所谓激光雷达外参标定,就是将计算激光雷达自身坐标系与我们所需坐标系(如车身坐标系)之间的差值,从而在车辆坐标系下得到激光雷达的检测结果,方便后续的感知计算。作差,能够得到yaw角误差。
2023-04-25 00:00:00
2958
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅