ROS 机械臂通过Pinocchio逆解直接控制关节位置仿真
配置机械臂Ref: link注意如果只是仿真的话需要配置使用gazebo参数Pinocchiopythoncondainstallpinocchio-cconda-forgepythoncsudoaptinstall-qqylsb-releasecurlsudomkdir-p/etc/apt/keyringscurlhttp://robotpkg.openrobots.org/packages/debian/robotpkg.asc\|sudotee/etc/apt/keyrings/robotpkg.ascechodeb [archamd64 signed-by/etc/apt/keyrings/robotpkg.asc] http://robotpkg.openrobots.org/packages/debian/pub$(lsb_release-cs)robotpkg\|sudotee/etc/apt/sources.list.d/robotpkg.listsudoaptupdatesudoaptinstall-qqyrobotpkg-py3*-pinocchioAdd env varible to ~/.bashrcexportPATH/opt/openrobots/bin:$PATHexportPKG_CONFIG_PATH/opt/openrobots/lib/pkgconfig:$PKG_CONFIG_PATHexportLD_LIBRARY_PATH/opt/openrobots/lib:$LD_LIBRARY_PATHexportPYTHONPATH/opt/openrobots/lib/python3.8/site-packages:$PYTHONPATH# Adapt your desired python version hereexportCMAKE_PREFIX_PATH/opt/openrobots:$CMAKE_PREFIX_PATHref: pinocchio installation确定关节位置接口这里关注controller配置:controllers_gazebocontroller_manager_ns:controller_managercontroller_list:-name:arm/arm_joint_controlleraction_ns:follow_joint_trajectorytype:FollowJointTrajectorydefault:truejoints:-joint1-joint2-joint3-joint4-joint5-joint6-joint7那么可以确定动作接口为arm/arm_joint_controller/follow_joint_trajectory对应代码中的self.client actionlib.SimpleActionClient(/arm/arm_joint_controller/follow_joint_trajectory, FollowJointTrajectoryAction)这里还和大家说一声, 有些关节控制采用类似如下形式:rrbot:# Publish all joint states -----------------------------------joint_state_controller:type:joint_state_controller/JointStateControllerpublish_rate:50# Position Controllers ---------------------------------------joint1_position_controller:type:effort_controllers/JointPositionControllerjoint:joint1pid:{p:100.0,i:0.01,d:10.0}joint2_position_controller:type:effort_controllers/JointPositionControllerjoint:joint2pid:{p:100.0,i:0.01,d:10.0}那么在控制接口上需要进行修改可以直接话题控制,参考https://blog.csdn.net/huangjunsheng123/article/details/108393690数值优化逆解下图展示了数值优化逆解算法的迭代求解流程是否开始初始配置将目标位姿与初始关节角转换为 SE3 与 q迭代求解正向运动学计算当前 q 对应的末端位姿 oMi位姿误差计算dM target_pose⁻¹ · oMi对数映射err log(dM).vector收敛判断norm(err) eps ?收敛成功返回 True, qJacobian 计算J ∂oM/∂q更新关节配置v -Jᵀ(JJᵀ damp·I)⁻¹ errq integrate(q, v·DT)结束defgetIk(self,target_pos:np.ndarray,target_orientation:np.ndarray,joint_seed:np.ndarray,ik_weight:np.ndarrayNone):Computes the inverse kinematics for a given target pose.ifnotisinstance(target_pos,np.ndarray)\ortarget_pos.shape!(3,):raiseValueError(target_pose must be a 1x3 numpy array)ifnotisinstance(target_orientation,np.ndarray)\ortarget_orientation.shape!(4,):raiseValueError(target_orientation must be a 1x4 numpy array)ifnotisinstance(joint_seed,np.ndarray):raiseValueError(joint_seed must be of type np.ndarray)target_pose_SE3pinocchio.SE3(pinocchio.Quaternion(target_orientation),target_pos)# q deepcopy(joint_seed).astype(np.float64)qnp.copy(joint_seed).astype(np.float64)foriinrange(self.IT_MAX):pinocchio.forwardKinematics(self.model,self.model_data,q)end_poseself.model_data.oMi[self.end_joint_id]error_posetarget_pose_SE3.actInv(end_pose)# T_sd*T_sb^(-1)errpinocchio.log(error_pose).vector# transform rotation to rotate vector by Rodrigues’ rotation formulaifnorm(err)self.eps:qself.qpos_to_limits(q,self.model.upperPositionLimit,self.model.lowerPositionLimit,joint_seed,ik_weight)ifself.is_log:print(Convergence iteration )print(Pin:{} error {}!.format(i,err.T))self.getFk(q)returnTrue,q Jpinocchio.computeJointJacobian(self.model,self.model_data,q,self.end_joint_id)v_e-solve(J.dot(J.T)self.damp*np.eye(6),err)#Levenberg-MarquardtLMv_jJ.T.dot(v_e)# map to joint spaceqpinocchio.integrate(self.model,q,v_j*self.DT)# delta q_k1 q_k \delta qifnoti%10andself.is_log:print(Pin:{} error {}!.format(i,err.T))print(Pin:The iterative algorithm has not reached convergence to the desired precision)returnFalse,q初始配置将初始位姿转换se3,为什么要做这一步呢这是希望将误差变换矩阵映射到​​李代数空间​​而李代数提供​​可微的旋转误差表示​​。注意这个向量是6维的位置差和3维轴角2个轴方向参数1个角度参数描述的旋转误差。迭代求解:正向运动学: 计算当前关节配置 ( q ) 的正向运动学得到末端执行器的位置和方向。位姿误差计算:d M i target_pose − 1 ⋅ o M i dM_i \text{target\_pose}^{-1} \cdot oMidMi​target_pose−1⋅oMi其中 ( oMi ) 是当前配置的末端位姿( dM_i ) 是位姿的误差。对数映射: 计算 ( dM_i ) 的对数映射得到位置误差e r r log ( d M i ) err \text{log}(dM_i)errlog(dMi​)收敛判断: 如果error误差小于阈值eps认为已经收敛。Jacobian 和速度计算:Jacobian计算:J ∂ o M ∂ q Jacobian matrix J \frac{\partial oM}{\partial q} \quad \text{Jacobian matrix}J∂q∂oM​Jacobian matrix更新关节配置:v − J T ( J J T damp ⋅ I ) − 1 e r r v - J^T (J J^T \text{damp} \cdot I)^{-1} errv−JT(JJTdamp⋅I)−1err用( v ) ( v )(v)和时间步长( D T ) ( DT )(DT)更新关节位置q integrate ( q , v ⋅ D T ) q \text{integrate}(q, v \cdot DT)qintegrate(q,v⋅DT)这里可以参考现代机器人学第六章数值求解部分, 不过这里的数值优化方法采用的是 LM方法Levenberg-Marquardt 最小二乘优化运行roslaunch rm_gazebo arm_75_bringup_moveit.launchsourcedevel/setup.bash# or setup.zshrosrun inv_pino.py开源代码在这里如果有帮助的话,给个星吧Refhttps://blog.csdn.net/weixin_39284111/article/details/141307019https://zhuanlan.zhihu.com/p/42415718https://blog.csdn.net/huangjunsheng123/article/details/108393690

相关新闻

Unity ECS 1.3.0实战:从OOP到数据导向的性能革命

Unity ECS 1.3.0实战:从OOP到数据导向的性能革命

1. 项目概述:为什么Unity ECS值得你投入时间?如果你是一位Unity开发者,尤其是对性能有极致追求,或者正在被传统面向对象编程(OOP)模式下的复杂对象管理、GC(垃圾回收)卡顿所困扰&…

2026/8/4 20:39:13 阅读更多 →
Prisma与TypeORM的对比以及在Nest.js中的优劣点分析

Prisma与TypeORM的对比以及在Nest.js中的优劣点分析

Prisma 介绍 Prisma 是一个现代化的 ORM(对象关系映射工具),旨在简化数据库交互并提高开发效率。它支持多种数据库(如 PostgreSQL、MySQL、SQLite 等),提供了一个类型安全的 API,使得在 TypeScr…

2026/8/4 20:39:13 阅读更多 →
MTK Bypass Utility深度解析:高级Bootrom保护绕过技术实战指南

MTK Bypass Utility深度解析:高级Bootrom保护绕过技术实战指南

MTK Bypass Utility深度解析:高级Bootrom保护绕过技术实战指南 【免费下载链接】bypass_utility 项目地址: https://gitcode.com/gh_mirrors/by/bypass_utility MTK Bypass Utility是一款专为MediaTek芯片设备设计的开源解锁工具,通过精密的硬件…

2026/8/4 20:38:12 阅读更多 →

最新新闻

抽芯机租赁哪个品牌好

抽芯机租赁哪个品牌好

抽芯机租赁哪个品牌好大家好,我是深耕抽芯机租赁领域的老朋友。今天想和大家聊聊关于抽芯机租赁的一些心得,特别是璟宸石油装备(大连)有限公司的产品和服务。行业深度观察在换热器检维修过程中,抽芯机的作用至关重要。尤其是在石油、石化、化…

2026/8/4 21:15:30 阅读更多 →
如何在浏览器中免费进行专业视频编辑?Omniclip完全指南

如何在浏览器中免费进行专业视频编辑?Omniclip完全指南

如何在浏览器中免费进行专业视频编辑?Omniclip完全指南 【免费下载链接】omniclip Open source video editing web application 项目地址: https://gitcode.com/gh_mirrors/om/omniclip 你是否曾为视频编辑软件的复杂操作和昂贵订阅费而烦恼?现在…

2026/8/4 21:15:30 阅读更多 →
家政APP开发:源码VS自研全解析

家政APP开发:源码VS自研全解析

博主介绍: 所有项目都配有从入门到精通的安装教程,可二开,提供核心代码讲解,项目指导。 项目配有对应开发文档、解析等 项目都录了发布和功能操作演示视频;项目的界面和功能都可以定制,包安装运行&#xff…

2026/8/4 21:15:30 阅读更多 →
UniHacker:打破Unity专业版授权壁垒的跨平台解决方案

UniHacker:打破Unity专业版授权壁垒的跨平台解决方案

UniHacker:打破Unity专业版授权壁垒的跨平台解决方案 【免费下载链接】UniHacker 为Windows、MacOS、Linux和Docker修补所有版本的Unity3D和UnityHub 项目地址: https://gitcode.com/GitHub_Trending/un/UniHacker 还在为Unity专业版的高昂费用而犹豫吗&…

2026/8/4 21:15:30 阅读更多 →
如何通过AtlasOS的模块化架构实现Windows系统深度优化与隐私保护

如何通过AtlasOS的模块化架构实现Windows系统深度优化与隐私保护

如何通过AtlasOS的模块化架构实现Windows系统深度优化与隐私保护 【免费下载链接】Atlas 🚀 An open and lightweight modification to Windows, designed to optimize performance, privacy and usability. 项目地址: https://gitcode.com/GitHub_Trending/atlas…

2026/8/4 21:15:30 阅读更多 →
提升Web服务器性能:Let‘s Build A Web Server并发处理实现指南

提升Web服务器性能:Let‘s Build A Web Server并发处理实现指南

提升Web服务器性能:Lets Build A Web Server并发处理实现指南 【免费下载链接】lsbaws Lets Build A Web Server 项目地址: https://gitcode.com/gh_mirrors/ls/lsbaws Lets Build A Web Server(lsbaws)是一个专注于Web服务器构建学习…

2026/8/4 21:14:30 阅读更多 →

日新闻

AI Agent白手起家26: 使用标准事件驱动大模型实践

AI Agent白手起家26: 使用标准事件驱动大模型实践

纲要 练习目标:掌握大模型标准事件的调用回顾 LangChain 中的核心标准事件 invokestreambatchastream_eventswith_structured_output 环境准备实战代码:多种事件调用对比 同步调用与流式输出批量处理异步事件流监听结构化输出 运行说明与预期结果总结与扩…

2026/8/4 0:00:40 阅读更多 →
dealsea是什么?跨境卖家必知的美国deal站入门指南

dealsea是什么?跨境卖家必知的美国deal站入门指南

说实话,第一次听说美国这个老牌折扣网站的跨境卖家,十个有八个会问同一个问题:这个平台到底是干嘛的?我见过一个做家居出口的朋友,他在亚马逊上月销二十万美金,却从来没用过它。我给他看了首页——一屏一屏…

2026/8/4 0:01:40 阅读更多 →
清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

通讯作者:邓兵、刘建国通讯单位:清华大学DOI:https://doi.org/10.1021/acs.est.6c00603研究背景稀土元素(REEs)是清洁能源技术与电子器件不可或缺的核心原料,然而传统提取方式依赖能耗高、排放大的采矿与强…

2026/8/4 0:01:40 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/4 13:24:41 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/4 11:41:39 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/4 5:26:40 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/4 13:38:24 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/4 11:09:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/4 13:38:40 阅读更多 →