自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小强的机器人工坊

我的个人主页:https://robotics.blog.csdn.net/

  • 博客(128)
  • 资源 (1)
  • 收藏
  • 关注

原创 求解三维空间中两向量之间的夹角

问题描述:已知三维空间中的三个点P1P_1P1​,P2P_2P2​和P3P_3P3​,求向量P1P2→\overrightarrow{P_1P_2}P1​P2​​和P1P3→\overrightarrow{P_1P_3}P1​P3​​之间的夹角,要求必须能够计算出[0, 2π\piπ)之间的数值,而不仅仅是只能求出锐角,并用C++或Python或MATLAB语言进行算法实现。问题分析:为了求解出...

2019-08-19 11:39:19 38728 5

原创 遨博Aubo-i10机器人正逆运动学公式推导及其C++编程实现

最近在项目中用到了Aubo-i10机器人,遨博机器人跟UR机器人有很多共同点,都是模块化的协作机器人,它们构形相同。但是这两家公司的机器人还是有区别的,比如Aubo机器人的第三个关节是反着转的,跟UR机器人不一样。网上有关于UR机器人的逆运动学推导过程,借鉴一番之后,自己尝试着推导Aubo-i10机器人的正逆运动学,并通过C++编程实现了该求解算法,最后通过记录示教器上的数据进行验证,实验结果表明...

2019-07-23 09:11:33 7187 3

原创 机器人逆运动学公式推导中常用的方程求解

求方程:sin(θ)=asin(\theta)=asin(θ)=a则有,cos(θ)=±1−a2cos(\theta)=\pm \sqrt{1-a^{2}}cos(θ)=±1−a2​故,θ=atan2(sin(θ),cos(θ))=atan2(a,±1−a2)\theta=atan2(sin(\theta), cos(\theta))=atan2(a, \pm \sqrt{1-a^{2}})θ...

2019-07-22 21:05:04 4567 1

原创 实现ImGui带上下边界的微调输入框DoubleSpinBox

【代码】实现ImGui带上下边界的微调输入框DoubleSpinBox。

2024-02-22 11:22:49 329 1

原创 自定义输出精度的矩阵元素对齐打印功能

【代码】自定义输出精度的矩阵元素对齐打印功能。

2023-11-01 11:24:39 84

原创 解决std::ifstream解析xyz点云数据失败的问题

【代码】解决std::ifstream解析xyz点云数据失败的问题。

2023-03-02 20:18:27 184 1

原创 pinocchio的example-cpp-codegen-crba链接cppad失败的解决方法

【代码】pinocchio的example-cpp-codegen-crba链接cppad失败的解决方法。

2023-02-20 22:31:24 217

原创 gtest.lib(gtest-all.cc.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MTd_StaticDebug”不匹配值“MDd_Dy

这样就保证了可执行文件和链接的库文件是匹配的。

2023-01-05 22:44:41 1133

原创 使用ifstream避免重复读取txt文件最后一行的正确读取方法

【代码】使用ifstream避免重复读取txt文件最后一行的正确读取方法。

2022-10-27 20:07:51 562

原创 65行C++代码实现极简C++ Logging库

【代码】65行C++代码实现极简C++ Logging库。

2022-09-14 10:33:33 415

原创 记录一下在Ubuntu18.04下,程序窗口之间切换快捷键

即在Ubuntu18.04中,如果只想在同一个软件的多个窗口之间来回切换,使用上述组合键来切换,比如在Ubuntu系统下用CLion打开了多个工程,不同工程之间来回切换,就可以使用上述快捷方式。在切换过程中,如果遇到已经打开多个窗口的程序,可以按 alt + ` 组合键,转入一个程序所有窗口中,循环切换。通过 alt + tab 键,可以在不同的程序之间切换。

2022-08-20 22:02:12 913

原创 Windows下交叉编译QNX程序

Ubuntu下用CMake交叉变易QNX程序很容易,只需要设置好和环境变量,指定gcc和g++编译器即可,但是Windows下CMake交叉变易QNX程序会有各种坑,直接搬运会水土不服,出现各种问题。下面是对Windows下用CMake交叉编译QNX程序的踩坑记录。.........

2022-06-29 10:26:01 1842 1

原创 Ubuntu18.04下CMake交叉编译Windows下可运行的程序

在Ubuntu下安装Windows系统的交叉编译工具链编写CMakeLists.txt脚本

2022-06-23 17:28:35 731 2

原创 使用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 960

原创 消息结构体的数据收发操作

#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 217

原创 使用文本字符串构造Eigen::MatrixXd对象

Eigen官方提供的MatrixXd对象初始化方法,对于小尺寸的矩阵是非常方便的,尤其是<<结合逗号运算符,,用习惯了之后会觉得很方便。但是,对于大矩阵来说,尤其是与matlab计算的结果进行对比验证的时候,那是灾难性的体验,所以有必要封装出一个函数,来实现从字符串来构造一个Eigen::MatrixXd对象。#include <algorithm>#include <iostream>#include <sstream>#include <ve

2022-01-10 17:32:15 1849 1

原创 解决Windows下“fatal: unable to checkout working tree, warning: Clone succeeded, but checkout failed.”

由于我的仓库中的一个pdf文件的路径太长,导致clone到本地之后无法checkout,而在Ubuntu下没有任何问题,在这里吐槽一下Windows.git clone xxx.gitCloning into 'xxx'...remote: Enumerating objects: 1503, done.remote: Counting objects: 100% (210/210), done.remote: Compressing objects: 100% (156/156), done.

2021-11-16 19:24:00 11288 10

原创 移除字符串中多余的空格(包括中间多余空格及两头多余空格)

最近在搞C++的字符串配置解析,有一个环节就是移除多余的字符串,于是写了一个小demo验证了一下可行性:int main() { std::string str = " Hello World I come from china ! "; bool previous_item_empty = true; std::string res; for (auto &current_item : str) { if (' ' =

2021-09-03 11:23:57 478

原创 C++的dynamic_cast<>的用法实践

这两天在搞一个机器人场景建模框架demo,里面涉及坐标系Frame,Joint, PrismaticJoint, RevoluteJoint等类之间的继承关系,其中dynamic_cast的上下类型转换功能可以很好的派上用场。class B {public: virtual ~B() = default; //必须是virtual的 void foo() { //如果需要在派生类中override,这需要定义成virtual,否则不需要 std::cout <&lt

2021-08-20 11:07:52 215

原创 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 718

原创 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 5169 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 2408

原创 剔除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 673

原创 记录关于`error: invalid use of incomplete type`错误的解决思路

在对别人的软件代码进行二次开发的过程中,出现`error: invalid use of incomplete type`的错误,这个很有可能是:在调用某个类的成员函数的时候,出现这个问题,而根本原因是你在当前出错的文件中并未include该类的头文件,只是前置申明了该类而已,解决方案也很简单,把对应类的头文件包含进来即可解决问题。...

2021-05-19 17:39:03 19858 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 351

原创 基于给定的起始点和目标点生成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 328

原创 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 2137 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 1459

原创 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 350 2

原创 如何在VirtualBox虚拟机的Ubuntu客户机(宿主机为Win10系统)中通过Alt + Tab进行界面快速切换

在Win10宿主机中基于VirtualBox虚拟机安装Ubuntu客户机,默认进行Alt + Tab操作时,会在Win10系统界面和Ubuntu系统界面中切换,但是有时候,我们只想在同一个操作系统中使用Alt + Tab热键进行快速的界面切换。为此,我们需要在VirtualBox虚拟机中进行一些设置:设置好快捷键之后,重启Ubuntu客户机,然后如果你想Alt + Tab界面切换热键只在Ubuntu客户机中起作用,那么就先按下组合热键Ctrl + Tab,然后再按下Alt + Tab热键进行界面切换。

2021-05-02 16:18:41 1394

原创 基于OpenRave的IkFast生成StaubliTx2-60L机械臂的封闭解

参考:https://blog.csdn.net/Kalenee/article/details/80740258先基于Ubuntu16.04环境安装kinetic版本的ros环境接着安装sudo apt-get install ros-kinetic-moveit-kinematics使用如下仓库里的脚本安装OpenRavehttps://github.com/crigroup/openrave-installation创建ros工作空间catkin_wsmkdir -p ~/catkin_w

2021-04-16 20:10:23 660

原创 力传感器数据滑动滤波原理演示

#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 591

原创 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 257 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 1513

原创 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 1218 6

原创 Windows下编译和使用libQGLViewer

Windows下开发OpenGL程序感觉比较头疼,总是找不到链接库,或者无法运行,可能是自己在Ubuntu系统下编写程序习惯了。不过有时候,总是需要跟Windows打交道,今天就花了点时间折腾了一下,这里记录一下,以免后面又忘了。Windows下使用QtCreator编译libQGLViewer还是很顺利的,安装完QT开发包之后,在系统环境变量Path中添加C:\Qt\Qt5.12.10\5.12.10\msvc2017_64\bin和C:\Qt\Qt5.12.10\5.12.10\msvc2017_

2020-12-17 16:13:18 1104 1

原创 Ubuntu16.04下应用GoogleTest框架

首先使用sudo apt-get install libgtest-dev安装GoogleTest的源代码。对,你没听错,上述命令安装的只是GoogleTest框架的源代码,而不是你以为的二进制安装包。所以,执行上述命令之后,我们还需要通过cmake来编译安装GoogleTest框架。具体的流程如下:sudo apt-get install libgtest-devsudo apt-get install cmakecd /usr/src/gtestsudo mkdir buildcd bu

2020-12-13 12:11:08 471

原创 解决Ubuntu下Qt5.12.10无法使用CMake构建工程的问题

最近更新了Qt的开发包到5.12.10,发现新的问题出现了,以前使用的CMake3.12.4版本的CMake无法构建Qt工程。解决方法:因为最新的QtCreator4.13.1要求CMake最低版本为CMake3.14.0所以,更新到CMake3.14.0版本以上即可解决问题。...

2020-12-13 11:20:56 1868

原创 解决Ubuntu系统安装QT出错的问题:qt.qpa.plugin: Could not load the Qt platform plugin “xcb“ in ““ even though it

最新新入手的笔记本无法安装Ubuntu系统,无奈只能通过virtualBox安装Ubuntu16.04,但是发现安装最新版本的QT5.12.10时候总是无法启动QtCreator程序,通过命令行运行发现如下的错误:qiang@qiang-VirtualBox:~/Qt5.12.10/Tools/QtCreator/bin$ ./qtcreatorqt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it

2020-12-13 10:34:29 7349 2

原创 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 1375

qt5开发及实例第3版源码

Qt是软件开发领域非常著名的C++可视化开发平台,目前最新版本为Qt 5.8。本书以Qt 5.8为平台,介绍Qt环境、模板库工具类及控件、布局管理、基本对话框、主窗口、图形与图片、图形视图框架、模型/视图结构、文件及磁盘处理、网络与通信、事件处理及实例、多线程、数据库、多国语言国际化、单元测试框架、QML编程基础、QML动画特效、Qt Quick Controls开发基础和Qt Quick Controls 2新颖界面开发。

2017-09-11

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除