CPP
RoboticsLearner
机器人软件算法工程师,热爱机器人,喜欢编程。
展开
-
自定义输出精度的矩阵元素对齐打印功能
【代码】自定义输出精度的矩阵元素对齐打印功能。原创 2023-11-01 11:24:39 · 151 阅读 · 0 评论 -
解决std::ifstream解析xyz点云数据失败的问题
【代码】解决std::ifstream解析xyz点云数据失败的问题。原创 2023-03-02 20:18:27 · 347 阅读 · 1 评论 -
pinocchio的example-cpp-codegen-crba链接cppad失败的解决方法
【代码】pinocchio的example-cpp-codegen-crba链接cppad失败的解决方法。原创 2023-02-20 22:31:24 · 295 阅读 · 0 评论 -
gtest.lib(gtest-all.cc.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MTd_StaticDebug”不匹配值“MDd_Dy
这样就保证了可执行文件和链接的库文件是匹配的。原创 2023-01-05 22:44:41 · 1392 阅读 · 0 评论 -
使用ifstream避免重复读取txt文件最后一行的正确读取方法
【代码】使用ifstream避免重复读取txt文件最后一行的正确读取方法。原创 2022-10-27 20:07:51 · 641 阅读 · 0 评论 -
65行C++代码实现极简C++ Logging库
【代码】65行C++代码实现极简C++ Logging库。原创 2022-09-14 10:33:33 · 476 阅读 · 0 评论 -
使用gtest测试框架测试QT界面应用程序
//MyWidget .h#ifndef QTWITHGTEST_MYWIDGET_H#define QTWITHGTEST_MYWIDGET_H#include <QPushButton>#include <QFileDialog>#include <QDir>#include <QDebug>#include <QString>#include <QWidget>#include <iostream>原创 2022-05-30 17:43:40 · 1195 阅读 · 0 评论 -
消息结构体的数据收发操作
#include <cstring>struct HEADER{ unsigned short id; unsigned short size; // head + data unsigned char sender; unsigned char receiver;};struct PoseInfo{ double pos[3]; // Position double rotation[3][3]; /原创 2022-05-28 17:11:18 · 272 阅读 · 0 评论 -
使用文本字符串构造Eigen::MatrixXd对象
Eigen官方提供的MatrixXd对象初始化方法,对于小尺寸的矩阵是非常方便的,尤其是<<结合逗号运算符,,用习惯了之后会觉得很方便。但是,对于大矩阵来说,尤其是与matlab计算的结果进行对比验证的时候,那是灾难性的体验,所以有必要封装出一个函数,来实现从字符串来构造一个Eigen::MatrixXd对象。#include <algorithm>#include <iostream>#include <sstream>#include <ve原创 2022-01-10 17:32:15 · 1957 阅读 · 1 评论 -
移除字符串中多余的空格(包括中间多余空格及两头多余空格)
最近在搞C++的字符串配置解析,有一个环节就是移除多余的字符串,于是写了一个小demo验证了一下可行性:int main() { std::string str = " Hello World I come from china ! "; bool previous_item_empty = true; std::string res; for (auto ¤t_item : str) { if (' ' =原创 2021-09-03 11:23:57 · 568 阅读 · 0 评论 -
C++的dynamic_cast<>的用法实践
这两天在搞一个机器人场景建模框架demo,里面涉及坐标系Frame,Joint, PrismaticJoint, RevoluteJoint等类之间的继承关系,其中dynamic_cast的上下类型转换功能可以很好的派上用场。class B {public: virtual ~B() = default; //必须是virtual的 void foo() { //如果需要在派生类中override,这需要定义成virtual,否则不需要 std::cout <<原创 2021-08-20 11:07:52 · 250 阅读 · 0 评论 -
std::transform和std::copy_if用法
最近在工作中发现,代码静态检查工具会把一些基于for循环实现的功能会提示使用std::transform和std::copy_if来实现。既然这样,那就索性花点时间熟悉一下这两个函数的用法。std::transformint ToInt(const std::string &text) { std::string str(text); std::stringstream ss(str); int data; while (ss.good()) {原创 2021-08-04 09:58:48 · 817 阅读 · 0 评论 -
Eigen::Map的常见用法
double vec[6] = {1, 2, 3, 4, 5, 6};std::cout << Eigen::Map<Eigen::VectorXd>(&vec[0], sizeof (vec) / sizeof(double)) << "\n";double arr[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};std::cout << Eigen::Map<Eigen::Matrix<doub原创 2021-06-11 11:49:15 · 5574 阅读 · 1 评论 -
std::vector的数组拼接操作
int main() { std::vector<double> vec; vec = {1, 2, 3}; vec.insert(vec.end(), {4, 5, 6}); for (auto &item : vec) { std::cout << item << " "; } std::cout << "\n"; std::vector<double> sub{7原创 2021-06-01 20:10:03 · 2531 阅读 · 0 评论 -
剔除std::vector中重复数据的基本操作
int main() { std::vector<double> vec{1, 2, 3, 2, 3, 42, 3, 5}; std::sort(vec.begin(), vec.end()); std::cout << *std::unique(vec.begin(), vec.end()) << "\n"; vec.erase(std::unique(vec.begin(), vec.end()), vec.end()); fo原创 2021-05-31 18:08:09 · 735 阅读 · 0 评论 -
记录关于`error: invalid use of incomplete type`错误的解决思路
在对别人的软件代码进行二次开发的过程中,出现`error: invalid use of incomplete type`的错误,这个很有可能是:在调用某个类的成员函数的时候,出现这个问题,而根本原因是你在当前出错的文件中并未include该类的头文件,只是前置申明了该类而已,解决方案也很简单,把对应类的头文件包含进来即可解决问题。...原创 2021-05-19 17:39:03 · 22433 阅读 · 2 评论 -
将只有顶点数据的Tris文件转成带法向量的STL文件并可视化
#include <iostream>#include <fstream>#include <vector>#include <array>#include <cmath>using namespace std;using ScalarType = double;using Vector3 = std::array<ScalarType, 3>;struct Triangle { Vector3 m_Norm原创 2021-05-13 23:08:54 · 421 阅读 · 0 评论 -
基于给定的起始点和目标点生成Z轴指向目标点的坐标系
#include <iostream>#include <array>#include <cstring>#include <string>#include <Eigen/Dense>using namespace std;int main() { Eigen::Vector3d translateBaseToHead(-0.0313098, -0.827213, 0.823521); Eigen::Matrix4d原创 2021-05-10 19:32:57 · 353 阅读 · 0 评论 -
STL文件ASCII格式和二进制Binary格式读写操作C++代码实现
//STLReader.h#ifndef STLREADER_H#define STLREADER_H#include <string>#include <vector>#include <array>#include <PQP.h>class STLReader {public: using ScalarType = double; //using ScalarType = float using Vector3 = st原创 2021-05-08 11:29:42 · 2301 阅读 · 3 评论 -
使用memcpy拷贝C数组和std::array数组
#include <iostream>#include <array>#include <cstring>using namespace std;int main() { using Vector3 = std::array<double, 3>; double p1[3], p2[3], p3[3]; Vector3 vertex[3]; vertex[0] = {1, 2, 3}; vertex[1] =原创 2021-05-08 11:21:12 · 1665 阅读 · 0 评论 -
glog的基本用法
cmake_minimum_required(VERSION 3.5)project(glog_usage_demo LANGUAGES CXX)set(CMAKE_CXX_STANDARD 11)set(CMAKE_CXX_STANDARD_REQUIRED ON)find_package(glog REQUIRED)add_executable(glog_usage_demo main.cpp glog_usage_demo.h)target_link_libraries(glog_us原创 2021-05-07 15:17:54 · 381 阅读 · 2 评论 -
力传感器数据滑动滤波原理演示
#include <iostream>#include <random>#include <functional>#include <vector>#include <deque>using namespace std;int main() { std::default_random_engine generator; std::uniform_real_distribution<double> dist原创 2021-04-10 16:15:34 · 677 阅读 · 0 评论 -
C++字符串split提取数据
完整代码:#include <sstream>#include <iostream>#include <vector>#include <algorithm>using namespace std;std::string strip(std::string in) { in.erase(std::remove_if(in.begin(), in.end(), [] (std::string::value_type ch)原创 2021-03-24 20:27:31 · 293 阅读 · 1 评论 -
C++提取由空格隔开的文本数据
#include <iostream>#include <sstream>using namespace std;int main(){ std::string text = " 1.2 2.3 3.4 4.5 5.6 "; size_t s = text.find_first_not_of(' '); size_t e = text.find_last_not_of(' '); std::istringstream原创 2021-01-22 12:50:05 · 1603 阅读 · 0 评论 -
C++模板类的申明和定义分离的实现方法
VectorD.h//// Created by LiuQiang on 2020/12/31.//#ifndef ROBOTICS_MATH_VECTOR3D_H#define ROBOTICS_MATH_VECTOR3D_H#include <Eigen/Dense>#include <iostream>namespace math { template<typename T = double> class Vector3D {原创 2021-01-02 17:44:13 · 1315 阅读 · 6 评论 -
C++从文件路径中提取文件名
#include <iostream>#include <string>#include <algorithm>using namespace std;int main() { std::string str = "F:/Test/Common/Algorithm/StaubliMotionPlanning/IntervModels/STL/CT-Bed-ASCII.STL"; std::string s = "/"; auto res原创 2020-11-16 18:54:25 · 1411 阅读 · 0 评论 -
C/C++中动态数组与静态数组之间的转换
在C/C++中,有时候会存在从C数组T array[N]转换到C++动态数组std::vector<T>的需求,此时我们可以使用如下的方式来实现:int arr[] = {1, 2, 3, 4, 5, 6};std::vector<int> vec(arr, arr + sizeof (arr) / sizeof (int));std::vector<T>...原创 2020-05-08 09:19:47 · 1954 阅读 · 0 评论 -
ubuntu16.04下gcc/g++多版本共存和切换(11/14/17/20),以及在CMake文件中的相关设置
今天发现GitHub的PCL点云库的1.10.0版本已经发布快一个月了,这刚好离我在家隔离快一个的时间差不多。果断下载其Release版本使用cmake配置编译选项并进行编译,结果发现问题怎么这么多。其实,如果不编译CUDA和GPU相关的模块的话,一般也不会存在什么问题。结果当我我选择编译CUDA和GPU模块之后,出现各种问题,比如使用标准STL库中的shared_ptr来替换掉之前Boost库...原创 2020-02-19 10:08:59 · 4634 阅读 · 2 评论 -
C++设计模式笔记
设计模式大体上可以分为如下的四大类:创建型模式(主要用于创建对象):简单工厂工厂方法抽象工厂建造者单例原型结构型模式(主要用于处理类或对象的组合):适配器桥接组合装饰外观享元代理行为型模式(主要用于描述对类或对象的交互和职责分配):模板方法责任链观察者解释器迭代器中介者备忘录访问者命令状态策略其他设计模式(即在GoF那本书...原创 2020-02-09 12:06:04 · 274 阅读 · 0 评论 -
实现对std::vector进行片段截取操作
废话少说,直接上代码:#include &lt;iostream&gt;#include &lt;vector&gt;int main() { std::vector&lt;int&gt; vector{1,2,3,4,5,6,7,8,9}; //截取前4个数 std::vector&lt;int&gt;::const_iterator f原创 2018-12-19 15:41:56 · 52906 阅读 · 2 评论 -
介绍一个非常nice的免费跨平台绘制uml和流程图工具
网站地址:https://www.draw.io/该工具不仅免费, 而且还有中文版,甚至还有离线版,另外一个特点是该工具本身不提供存储空间,用户可以选择文件存储在Google云或则微软云。...原创 2018-11-24 15:56:48 · 1879 阅读 · 0 评论 -
C++私有化类的析构函数会怎么样?
给出代码及注释:private_destruction.h#ifndef PRIVATEDESTRUCTION_H#define PRIVATEDESTRUCTION_H#include &lt;iostream&gt;class PrivateDestruction{public: PrivateDestruction() { } void doSomethin...原创 2018-11-09 22:01:58 · 853 阅读 · 0 评论 -
C++嵌套类在单例模式Singleton中自动释放堆内存的应用
首先放出单例模式中的代码:singleton.h#ifndef SINGLETON_H#define SINGLETON_H#include <iostream>#include <mutex>class SingleTon{public: static SingleTon * getInstance(); void doSomething...原创 2018-11-09 21:34:50 · 671 阅读 · 0 评论 -
C++运行时通过基类指针或引用调用派生类虛函数的实现原理: 虛函数表
我们知道要实现运行时的多态, 必须在基类中声明和定义相关的虛函数, 并在派生类中重新实现基类中的虛函数. 当编译器见到这种继承层次结构的时候, 编译器将为定义了虛函数的基类和覆盖了基类虛函数的派生类分别创建一张虛函数表(Virtual Function Table, VFT), 也就是说通过编译器的编译, 基类和派生类的代码中都将有自己的虛函数表. 为这些类创建实例化对象时, 会在实例化的...原创 2018-08-23 20:57:51 · 4861 阅读 · 0 评论