- 博客(66)
- 收藏
- 关注
原创 手臂运动位姿解算
上肢运动模型建模参考:学位论文 基于惯性传感器的上肢行为意图预测与识别研究第三章 上肢运动位姿解算3.4.2 基于正运动学的上肢位置解算齐次变换矩阵ATB(A 在左上角,B在右下角):表示坐标系B在坐标系A下的位置和姿态左上角表示参考坐标系IMU测得的角度是相当于固定坐标系的固定坐标系:胸部手环1佩戴在上臂:IMU1坐标系,得到的旋转矩阵R是IMU1相对于固定坐标系的旋转矩阵;即肩关节相对于胸部的旋转角度,直接是肩部的俯仰角、航向角、横滚角。手环2佩戴在前臂:IMU2坐标系,得到的R是
2022-05-29 17:12:04 566
原创 DH法理解
四个参数:a,α,d,θ四个参数实际上是两组,先有a,α,再有d,θ。a是两个转轴之间的距离,异面直线公垂线的长度α是两个转轴之间的夹角d是两个公垂线之间的距离,如图所示theta是两个公垂线之间的夹角,也就是转轴(关节)转动的角度先分别定义坐标系,Z轴与转轴重合...
2022-05-22 11:03:49 3121
原创 万向锁的理解 欧拉角 四元数
参考资料核心是嵌套以一个三自由度的机械臂为例,三个旋转轴互相垂直,相当于x,y,z轴三个机械臂通过旋转关节依次串联,定义第一个关节旋转轴为J1,以此类推第二第三个关节旋转轴为J2,J3,那么J1为第一个旋转轴,它的旋转会带动J2和J3一起运动,而由于J2是安装在J1的机械臂上,所以J2的旋转不会影响到J1,只能带动J3运动,而J3是安装在J2的机械臂上,所以J3的旋转不会影响J1和J2,只会自己旋转,原理基本如此。那么万向锁的定义,就是本来j1、2、3有三个旋转方向,由于j2旋转90°使j1和j3的
2022-05-19 10:29:42 601
原创 C++链接库加载
首先了解静态链接库和动态链接库的使用场景1. 静态库.lib文件添加解决 运行程序时出现无法解析的外部符号解决方案:添加.lib库步骤:项目名——右键属性——链接器——附加库目录:添加.lib文件的目录——输入——添加附加依赖性:添加.lib文件名2. 动态库.dll文件添加解决 由于找不到xxx.dll,无法继续执行代码的问题参考解决方案首先,对应于不同的运行模式,debug和release,方法都是一样的,找到项目目录下 项目名称/x64 下的两个文件夹debug和release
2022-05-18 16:09:32 453
原创 虚拟机下linux系统安装、启动问题
1.蓝屏问题蓝屏问题解决2.VMware Workstation 与 Device/Credential Guard 不兼容注意要以管理员模式运行cmd
2022-02-21 20:45:51 296
原创 C++基础学习
1.预处理指令预处理指令是以#号开头的代码行。#号必须是该行除了任何空白字符外的第一个字符。#后是指令关键字,在关键字和#号之间允许存在任意个数的空白字符。整行语句构成了一条预处理指令,该指令将在编译器进行编译之前对源代码做某些转换。以前没有在意的学者注意了,预处理指令是在编译器进行编译之前进行的操作.预处理过程扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器。可见预处理过程先于编译器对源代码进行处理。#ifdef 语句使用方法预处理指针相关知识C语言中,常常一些头文件被多次包含(#in
2022-01-07 19:56:58 445
原创 socket编程TCP/IP通信(windows下,C++实现)
1.简单理解什么是Socket?通俗理解:Socket翻译成中文是套接字,同时也有插座的意思。可以按照插座的意思来理解它,插座就是连接电源和机器的中间件,同理,socket就是连接两个进程或应用的中间件。将这两个进程分别称为服务端和客户端。较官方理解:socket顾名思义就是套接字的意思,用于描述地址和端口,是一个通信链的句柄。两个应用程序通过socket向网络发出请求或者回应,从而完成通信过程。socket编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始
2022-01-03 21:39:52 5946
原创 C++整型上下限INT_MAX INT_MIN及其运算
C++中常量INT_MAX和INT_MIN分别表示最大、最小整数,定义在头文件limits.h中。
2022-01-01 11:34:38 394
原创 由LeetCode C++ sort函数第三个参数cmp必须声明为static 引发的思考(转载)
在用sort函数对pair类型数据进行排序时,需要自定义排序函数cmp,在自定义函数的时候需要加static才不会报错力扣题目:二叉搜索树中的众数参考链接:由LeetCode C++ sort函数第三个参数cmp必须声明为static 引发的思考static静态成员函数不用加对象名,就能直接访问函数(这也是静态成员函数的一大优点)所以加了static就不会报错...
2021-12-27 23:13:59 852
原创 pyside2安装完成后报错问题修改
1.解决方案如下:解决PYSIDE2的THIS APPLICATION FAILED TO START BECAUSE NO QT PLATFORM PLUGIN COULD BE INITIALIZED问题通过添加环境变量可以解决修改包根目录下的__init__文件,在 _setupQtDirectories函数里注释前加上以下代码就可以(注意要把PySide2去掉)def _setupQtDirectories(): import sys, os import PySide2
2021-12-25 19:02:39 824
原创 jupyter相关用法汇总
1.Jupyter Notebook怎么修改字体和大小以及更改字体样式Jupyter Notebook怎么修改字体和大小以及更改字体样式
2021-12-14 17:16:14 819
原创 VS2019、 python调用C/C++ 动态链接库汇总
1.C++调用动态链接库(非常细节)VS2019 使用 C/C++ 动态链接库并进行调用:https://blog.csdn.net/freeking101/article/details/104632710
2021-12-14 14:54:27 1747
原创 Anaconda虚拟环境+jupyter内核配置(详解)
1.Anaconda虚拟环境查看安装好anaconda环境后,有两种方式可以查看虚拟环境:**第一种:**打开anaconda,如图所示即可查看。**第二种:**打开Anaconda Prompt,输入conda env list 如图所示,base环境即是当前的环境,TensorEMG是我创建的环境,base环境是下载好anaconda后自带的环境。2.为什么要装虚拟环境base环境是anaconda中自带的环境,其中有许多默认的库,具体可以通过在base环境下输入conda list
2021-12-13 19:48:40 23809 8
原创 超时报错情况汇总(持续更新)
1. 链表赋值时,左边一定是被赋值的变量,否则程序运行不报错,但是会超出时间限制!注意:一定要看清楚,把谁赋值给谁,把A赋值给B:B=A左边一定是B,右边一定是A// leetcode19题: 删除链表的倒数第 N 个结点class Solution {public: ListNode* removeNthFromEnd(ListNode* head, int n) { ListNode* dummyhead = new ListNode(0); dummy
2021-12-01 16:30:27 230
原创 分隔链表(用两个临时头结点)
巧用两个临时头结点,其实就是利用头结点保存起始位置,通过循环分别形成大于等于x和小于x的两个链表后,要将他们连接起来,用小于x的链表末端指针指向大于等于x链表的头结点的下一个,再将该链表末端置空就可以实现了。class Solution {public: ListNode* partition(ListNode* head, int x) { //巧用临时头结点 ListNode less_head(0); ListNode more_head(0
2021-11-13 17:17:10 221
原创 删除链表的倒数第 N 个结点
双指针,前后指针class Solution {public: ListNode* removeNthFromEnd(ListNode* head, int n) { ListNode* dummy = new ListNode(0, head);//要知道删除结点的前驱,因此定义一个哑结点,最后删除哑结点 ListNode* first = head; ListNode* second = dummy; for (int i =
2021-11-09 15:25:25 54
原创 快慢指针题型总结
https://leetcode-cn.com/problems/middle-of-the-linked-list/有返回值时需要returnvoid 即无返回值时不需要returnclass Solution {public: ListNode* middleNode(ListNode* head) { ListNode* fast = head; ListNode* slow = head; //当为奇数时,slow到达中间结点时,fas
2021-11-08 21:26:44 50
原创 026. 重排链表
重排链表:三步走1.找到中点2.逆置后半段3.链接两个链表注意:要将链表1打断,通过mid->next = null;https://leetcode-cn.com/problems/LGjMqU/官方示例:fast->next != nullptr && fast->next->next != nullptr//只要有一个为空就退出循环class Solution {public: void reorderList(ListNode* h
2021-11-08 21:23:35 61
原创 链表中点查找
快慢指针class Solution {public: ListNode* middleNode(ListNode* head) { ListNode* fast = head; ListNode* slow = head; //当为奇数时,slow到达中间结点时,fast到达最后一个结点 fast->next = NULL //当为偶数时,slow到达中间结点时,fast到达空 fast = NULL
2021-11-08 17:22:34 63
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人