C++项目容易犯错的点

1. 矩阵q要先定义大小,再赋值。不可以直接赋值。下面这种方式是错误的Eigen::MatrixXd q;q<<1,2;正确的这样的:

Eigen::MatrixXd q(2,1);
q<<1.4, 1.5;

2.  不要重复加载variables.h头文件,这样变量会被赋值两次报错。就是说如果all_inlcudes.h里面是项目的所有库文件,你在all_inlcudes.h文件里面加载了变量命名空间variables.h和variables.cpp,那么久不要重新再main.cpp里面再加载一遍variables.h和variables.cpp了。

3. 大循环的迭代变量用了i,在小循环里面就不要再用变量i了,不然就会报错。

4.用matlab计算逆矩阵的时候,最大奇异值的范围和施加的\lambda需要好好设计,比如下面的50和0.005,都需要选取合适的参数大小,不然有可能导致系统发散

    M_inv = pinv(M);                                                        % 机械臂惯性矩阵求逆if norm(M_inv,2) > 50                                                % ===不确定要不要加===% 防止矩阵出现奇异 M_inv = M'*pinv(M*M'+0.005*eye(size(M,1)));en

5.更换模型之后,要更改的就两个地方,一个是矩阵求逆的参数设置,一个就是PID和Dx和Kx的参数设置 

6. 如果在franka的desk桌面上设置了末端有夹爪,那么需要注意下面的情况:

  • 机械臂的关节力矩就没有末端夹爪的重力补偿,在示教模式下机械臂会下坠;
  • 在机械臂运动的时候会进行碰撞检测,检测末端夹爪是否与机械臂本体相碰撞。所以如果你末端没有安装夹爪并且在Franka桌面设置了夹爪,那么有可能机械臂虚空的夹爪检测到会与本体碰撞就会停下来。
  • 注意!!!!机械臂末端并没有与桌面进行的碰撞检测。除非设置了robot.setCollisionBehavior,这样也只有真的与桌面碰撞了关节力矩突然变大超限才会停下。
  • 在robot_state.O_T_EE中,通过franka内置函数得到机械臂末端位姿,他会根据用户在desk桌面上设置的是否有末端夹爪进行补偿。

所以,要注意!!!第一:一定要注意desk桌面上到底有没有设置存在末端夹爪。

第二:最好使用自己写的Frank正运动学计算。反正就是franka自带的函数会根据是否有夹爪自动调节输出。

Matlab犯错的点

1. Franka机械臂计算正运动学的时候注意,Flange=0.107不是代表机械臂自带的夹爪的高度,而是最最后一个关节,也就是与夹爪相连的那个关节的长度。记住如果末端要安装机械臂的夹爪,需要另外增加一个末端执行器的T_EndEffector。下面给出Franka机械臂的正运动学代码。

   #include <Eigen/Core>#include<iostream>using namespace Eigen;/*** 根据给定的关节角度、Franka相关参数以及末端执行器相关参数,计算 Franka Emika 机械臂的正向运动学,得到包含欧拉角和位置信息的矩阵* @param[in] q 表示机械臂的关节角度矩阵,维度为 7x1(假设每一行代表一个关节角度)* @param[in] EndEffector 表示末端安装的夹爪的高度(注意!!!Franka默认的配备夹爪高度也要算在EndEffector里面,因为flange=0.107不是指代Franka夹爪)* @return 返回一个 6x1 的矩阵,其中包含计算得到的欧拉角(前三个元素)和末端位置信息(后三个元素),*         表示机械臂末端的姿态和位置。如果函数执行过程中没有出现错误,将正常返回该矩阵。*/
Eigen::MatrixXd FK_Franka_Emika(Eigen::MatrixXd q, double EndEffector)
{double q1 = q(0, 0), q2 = q(1, 0), q3 = q(2, 0), q4 = q(3, 0), q5 = q(4, 0), q6 = q(5, 0), q7 = q(6, 0);Matrix4d T1;T1 << cos(q1), -sin(q1), 0, 0,sin(q1), cos(q1), 0, 0,0, 0, 1, 0.333,0, 0, 0, 1;Matrix4d T2;T2 << cos(q2), -sin(q2), 0, 0,0, 0, 1, 0,-sin(q2), -cos(q2), 0, 0,0, 0, 0, 1;Matrix4d T3;T3 << cos(q3), -sin(q3), 0, 0,0, 0, -1, -0.3160,sin(q3), cos(q3), 0, 0,0, 0, 0, 1;Matrix4d T4;T4 << cos(q4), -sin(q4), 0, 0.0825,0, 0, -1, 0,sin(q4), cos(q4), 0, 0,0, 0, 0, 1;Matrix4d T5;T5 << cos(q5), -sin(q5), 0, -0.0825,0, 0, 1, 0.3840,-sin(q5), -cos(q5), 0, 0,0, 0, 0, 1;Matrix4d T6;T6 << cos(q6), -sin(q6), 0, 0,0, 0, -1, 0,sin(q6), cos(q6), 0, 0,0, 0, 0, 1;Matrix4d T7;T7 << cos(q7), -sin(q7), 0, 0.0880,0, 0, -1, 0,sin(q7), cos(q7), 0, 0,0, 0, 0, 1;Matrix4d Tflange;Tflange << 1, 0, 0, 0,0, 1, 0, 0,0, 0, 1,  0.107 ,0, 0, 0, 1;Matrix4d Tendeffector;Tendeffector << 1, 0, 0, 0,0, 1, 0, 0,0, 0, 1,  EndEffector,0, 0, 0, 1;Matrix4d T = T1 * T2 * T3 * T4 * T5 * T6 * T7 * Tflange*Tendeffector;// 计算欧拉角double alpha = atan2(T(1,0), T(0,0));double beta = atan2(-T(2,0), sqrt(std::pow(T(0,0), 2) + std::pow(T(1,0), 2)));double gamma = atan2(T(2,1), T(2,2));Eigen::MatrixXd euler_pos(6, 1);euler_pos << alpha, beta, gamma, T(0,3), T(1,3), T(2,3) ;return euler_pos;
}    

2. 雅可比矩阵的计算也是同上面所叙述,0.107是最后一个关节后面的长度,一定要加上的。Franka默认的夹爪长度是放在EndEffector里面的。(几何雅可比和另外一个雅可比矩阵的区别没有搞清楚

3. 计算机械臂末端位置的时候,不能通过x_start(5, 0) = x_start(5, 0) - EndEffector;的方式,直接z值减去末端执行器的长度得到,因为有时候机械臂末端是斜的,也会同时影响x和y。所以还是得通过正运动学x_t = FK_Franka_Emika(q, EndEffector);通过乘以末端执行器的矩阵T得到末端位姿。

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/79560.shtml

    如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

    相关文章

    在阿里云 Ubuntu 24.04 上部署 RabbitMQ:一篇实战指南

    前言 RabbitMQ 是业界常用的开源消息中间件,支持 AMQP 协议,易于部署、高可用、插件丰富。本文以阿里云 ECS 上运行的 Ubuntu 24.04 LTS 为例,手把手带你完成 RabbitMQ 从仓库配置到运行的全流程,并分享在国内环境下常见的坑与对应解决方案。 环境概况 操作系统:Ubuntu …

    【论文笔记】SOTR: Segmenting Objects with Transformers

    【题目】&#xff1a;SOTR: Segmenting Objects with Transformers 【引用格式】&#xff1a;Guo R, Niu D, Qu L, et al. Sotr: Segmenting objects with transformers[C]//Proceedings of the IEEE/CVF international conference on computer vision. 2021: 7157-7166. 【网…

    MinIO实现https访问

    Windows下实现MinIO的https访问. 首先需要自己解决证书问题, 这里可以是个人证书 也可以是花钱买的证书. 现在使用个人开发者证书举例子。 将证书数据解压到你知道的目录之下 然后直接使用命令启动MinIO start minio.exe server --certs-dir D:\xxxxx\tools\certs …

    基于 jQuery 实现灵活可配置的输入框验证功能

    在 Web 表单开发中&#xff0c;输入框验证是保障数据准确性和安全性的关键环节。无论是用户注册、信息提交还是数据录入场景&#xff0c;都需要对用户输入内容进行合法性检查。本文将介绍如何使用 HTML、CSS 和 jQuery 构建一个可灵活配置的输入框验证系统&#xff0c;轻松应对…

    Kotlin 04Flow stateIn 和 shareIn的区别

    一 Kotlin Flow 中的 stateIn 和 shareIn 一、简单比喻理解 想象一个水龙头&#xff08;数据源&#xff09;和几个水杯&#xff08;数据接收者&#xff09;&#xff1a; 普通 Flow&#xff08;冷流&#xff09;&#xff1a;每个水杯来接水时&#xff0c;都要重新打开水龙头从…

    WebRTC 服务器之SRS服务器概述和环境搭建

    1.概述 SRS&#xff08;Simple Realtime Server&#xff09;是一款高性能、跨平台的流媒体服务器&#xff0c;支持多种协议&#xff0c;包括 RTMP、WebRTC、HLS、HTTP-FLV、SRT、MPEG-DASH 和 GB28181。本文介绍了 SRS&#xff0c;包括其用途、关键功能、架构和支持协议。SRS 旨…

    Dify - Embedding Rerank

    注意&#xff1a;v100显卡会出现不适配&#xff0c;不推荐使用 1. 安装 Docker ubuntu 22.04 docker 安装&使用_ubuntu22.04 安装docker-CSDN博客 2. 安装vllm pip install -U xformers torch torchvision torchaudio triton --index-url https://download.pytorch.org/w…

    LeetCode:链表的中间结点

    1、题目描述 给你单链表的头结点 head &#xff0c;请你找出并返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二个中间结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[3,4,5] 解释&#xff1a;链表只有一个中间结点&#xff…

    LabVIEW温控系统热敏电阻滞后问题

    在 LabVIEW 构建的温控系统中&#xff0c;热敏电阻因热时间常数大&#xff08;2 秒左右&#xff09;产生的滞后效应&#xff0c;致使控温出现超调与波动。在不更换传感器的前提下&#xff0c;可从算法优化、硬件调整和系统设计等维度着手解决。 ​ 一、算法优化​ 1. 改进 PI…

    技术犯规计入个人犯规吗·棒球1号位

    在棒球运动中&#xff0c;虽然没有“技术犯规”这一特定术语&#xff0c;但存在多种违规行为或违反规则的情况&#xff0c;通常会导致判罚或处罚。以下是常见的违规行为及相关规则&#xff1a; 1. 投手违规&#xff08;Balk&#xff09; 定义&#xff1a;投手在垒上有跑垒员时…

    Python核心技巧 类与实例:面向对象编程的基石

    、核心概念图解 &#x1f3af; 类 vs 实例 类&#xff1a;对象的蓝图&#xff08;如"汽车设计图"&#xff09; 实例&#xff1a;类的具体实现&#xff08;如"你的特斯拉Model 3"&#xff09; class MyClass: # 类声明 count 0 # 类…

    协程补充---viewModelScope 相关知识点

    viewModelScope.launch 默认在 Dispatchers.Default 线程池执行Dispatchers.Default 是一个后台线程池&#xff0c;专门用于 CPU 密集型任务如果需要在主线程执行&#xff0c;必须显式指定 Dispatchers.Main remember 是 Compose 的状态管理函数(queueMenus) 是依赖项&#xff…

    linux stm32mp157 GIC-V2 中断处理过程分析

    /* ** 中断触发时&#xff0c;调用的 handle_arch_irq 入口地址。 ** 因为此时&#xff0c;挂接的就是 gic_handle_irq 函数&#xff01;gic_handle_irq 是个全局函数指针&#xff0c; ** static void __exception_irq_entry gic_handle_irq(struct pt_regs *regs) ** 它是Lin…

    动态指令参数:根据组件状态调整指令行为

    &#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…

    直方图比较

    目录 1、直方图比较的概念 2、直方图比较的主要原因 3、典型应用场景 4、基础直方图比较 5、多通道直方图比较 6、实时直方图检测 1、直方图比较的概念 直方图比较是通过数学方法计算两个直方图之间的相似度或差异度的技术。在计算机视觉中&#xff0c;直方图是对图像特征…

    Windows11 VS code 安装 Cline 调用 Github MCP 配置过程坑点汇总

    背景 为了调研 MCP 在 windows 上如何使用本地的命令执行一些操作而实现自动化的过程&#xff0c;在 B 站视频的指导下&#xff0c;进行相应填坑过程&#xff0c;最终运行起来&#xff0c;并实现 github 自动化编程并提交代码的过程。 B 站 Cline 视频演示 Cline Cline 是一…

    kdump详解

    kdump 是 Linux 系统中的一种内核崩溃转储机制&#xff0c;用于在系统崩溃时将内存中的数据保存到磁盘上&#xff0c;以便后续分析系统崩溃的原因。以下是对 kdump 的详细介绍&#xff1a; 1、工作原理 kdump 利用了 Linux 系统中的双启动机制。当系统启动时&#xff0c;它会…

    RGB三原色

    本文来源 &#xff1a; 腾讯元宝 ​​RGB三原色&#xff08;红绿蓝&#xff09;详解​​ RGB&#xff08;Red, Green, Blue&#xff09;是光学的三原色&#xff0c;通过不同比例的混合可以产生人眼可见的绝大多数颜色。它是现代显示技术&#xff08;如屏幕、投影仪&#xff09…

    CSS兼容性:挑战与策略

    CSS兼容性&#xff1a;挑战与策略 引言 在前端开发的广阔领域中&#xff0c;跨浏览器兼容性无疑是最棘手且难以预测的挑战之一。当我们精心设计的网页在Chrome中完美呈现&#xff0c;却在Safari中布局崩溃&#xff0c;或在Firefox中交互失效时&#xff0c;这种挫折感是每位前…

    [ 设计模式 ] | 单例模式

    单例模式是什么&#xff1f;哪两种模式&#xff1f; 单例模式就是一个类型的对象&#xff0c;只有一个&#xff0c;比如说搜索引擎中的索引部分&#xff0c;360安全卫士的桌面悬浮球。 饿汉模式和懒汉模式&#xff1a;饿汉模式是线程安全的&#xff0c;懒汉模式不是线程安全的…