- 博客(129)
- 资源 (1)
- 收藏
- 关注

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

原创 遨博Aubo-i10机器人正逆运动学公式推导及其C++编程实现
最近在项目中用到了Aubo-i10机器人,遨博机器人跟UR机器人有很多共同点,都是模块化的协作机器人,它们构形相同。但是这两家公司的机器人还是有区别的,比如Aubo机器人的第三个关节是反着转的,跟UR机器人不一样。网上有关于UR机器人的逆运动学推导过程,借鉴一番之后,自己尝试着推导Aubo-i10机器人的正逆运动学,并通过C++编程实现了该求解算法,最后通过记录示教器上的数据进行验证,实验结果表明...
2019-07-23 09:11:33
8112
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
4952
1
原创 mujoco传感器数据读取的正确姿势
而经过与mujoco的Python接口对比,发现上述方式读取的力矩信息是错的,需要改成如下的读取方式。之前一直以为mujoco的仿真环境下六维力传感器的数据读取方式C++版本如下。
2025-03-23 16:23:24
212
原创 在vmware中安装solidworks2024,一定要关闭vmware中默认开启的图形加速,否则操作solidworks界面会非常的卡,这加速真是加了个寂寞。
在vmware中安装solidworks2024,一定要关闭vmware中默认开启的图形加速,否则操作solidworks界面会非常的卡,这加速真是加了个寂寞。
2025-03-20 18:43:07
132
原创 pinocchio的example-cpp-codegen-crba链接cppad失败的解决方法
【代码】pinocchio的example-cpp-codegen-crba链接cppad失败的解决方法。
2023-02-20 22:31:24
326
原创 gtest.lib(gtest-all.cc.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MTd_StaticDebug”不匹配值“MDd_Dy
这样就保证了可执行文件和链接的库文件是匹配的。
2023-01-05 22:44:41
1505
原创 记录一下在Ubuntu18.04下,程序窗口之间切换快捷键
即在Ubuntu18.04中,如果只想在同一个软件的多个窗口之间来回切换,使用上述组合键来切换,比如在Ubuntu系统下用CLion打开了多个工程,不同工程之间来回切换,就可以使用上述快捷方式。在切换过程中,如果遇到已经打开多个窗口的程序,可以按 alt + ` 组合键,转入一个程序所有窗口中,循环切换。通过 alt + tab 键,可以在不同的程序之间切换。
2022-08-20 22:02:12
1232
原创 Windows下交叉编译QNX程序
Ubuntu下用CMake交叉变易QNX程序很容易,只需要设置好和环境变量,指定gcc和g++编译器即可,但是Windows下CMake交叉变易QNX程序会有各种坑,直接搬运会水土不服,出现各种问题。下面是对Windows下用CMake交叉编译QNX程序的踩坑记录。.........
2022-06-29 10:26:01
2217
2
原创 Ubuntu18.04下CMake交叉编译Windows下可运行的程序
在Ubuntu下安装Windows系统的交叉编译工具链编写CMakeLists.txt脚本
2022-06-23 17:28:35
976
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
1336
原创 消息结构体的数据收发操作
#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
296
原创 使用文本字符串构造Eigen::MatrixXd对象
Eigen官方提供的MatrixXd对象初始化方法,对于小尺寸的矩阵是非常方便的,尤其是<<结合逗号运算符,,用习惯了之后会觉得很方便。但是,对于大矩阵来说,尤其是与matlab计算的结果进行对比验证的时候,那是灾难性的体验,所以有必要封装出一个函数,来实现从字符串来构造一个Eigen::MatrixXd对象。#include <algorithm>#include <iostream>#include <sstream>#include <ve
2022-01-10 17:32:15
2021
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
13305
11
原创 移除字符串中多余的空格(包括中间多余空格及两头多余空格)
最近在搞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
587
原创 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
268
原创 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
867
原创 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
5773
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
2604
原创 剔除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
762
原创 记录关于`error: invalid use of incomplete type`错误的解决思路
在对别人的软件代码进行二次开发的过程中,出现`error: invalid use of incomplete type`的错误,这个很有可能是:在调用某个类的成员函数的时候,出现这个问题,而根本原因是你在当前出错的文件中并未include该类的头文件,只是前置申明了该类而已,解决方案也很简单,把对应类的头文件包含进来即可解决问题。...
2021-05-19 17:39:03
23761
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
453
原创 基于给定的起始点和目标点生成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
372
原创 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
2359
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
1838
原创 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
397
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
1565
原创 基于OpenRave的IkFast生成StaubliTx2-60L机械臂的封闭解
参考:https://blog.youkuaiyun.com/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
742
原创 力传感器数据滑动滤波原理演示
#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
713
原创 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
303
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
1648
原创 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
1342
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
1320
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
523
原创 解决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
2129
qt5开发及实例第3版源码
2017-09-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人