ROS 机械臂通过Pinocchio逆解直接控制关节位置仿真

发布时间:2026/8/4 20:39:14

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到数据导向的性能革命

2026/8/4 20:39:14

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

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

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

2026/8/4 20:39:14

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

Unity游戏热更新实战:基于JEngine与ILRuntime的动态代码与资源更新方案

Unity游戏热更新实战:基于JEngine与ILRuntime的动态代码与资源更新方案

2026/8/4 20:39:14

1. 项目概述:为什么我们需要一个可热更新的游戏框架?做Unity游戏开发的朋友,尤其是负责线上运营的,大概都经历过这种场景:游戏上线后,发现一个致命的Bug,或者需要紧急上线一个节日活动。按照传统…

Laguna-XS-2.1-OptiQ-4bit全面评测:85.81分 capability score背后的六大核心指标解析

Laguna-XS-2.1-OptiQ-4bit全面评测:85.81分 capability score背后的六大核心指标解析

2026/8/4 21:19:16

Laguna-XS-2.1-OptiQ-4bit全面评测:85.81分 capability score背后的六大核心指标解析 【免费下载链接】Laguna-XS-2.1-OptiQ-4bit 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/Laguna-XS-2.1-OptiQ-4bit Laguna-XS-2.1-OptiQ-4bit是基于mlx…

Pytest配置实战:高效管理测试标记与覆盖

Pytest配置实战:高效管理测试标记与覆盖

2026/8/4 21:19:16

该 pytest.ini 配置文件为“归藏层”项目定义了完整的测试框架行为,其核心配置与功能如下: 核心配置解析 配置类别配置项说明与作用测试发现python_files, python_classes, python_functions, testpaths定义了测试文件、类、函数的命名模式以及搜索目录…

机械臂底层通信协议:Modbus、RS485、CAN、EtherCAT 详解

机械臂底层通信协议:Modbus、RS485、CAN、EtherCAT 详解

2026/8/4 21:19:16

机械臂底层通信协议:Modbus、RS485、CAN、EtherCAT 详解机械臂不会说话,但它靠这些协议"开口"——通信协议选错了,你的机械臂就是个哑巴。一、为什么机械臂需要这么多协议? 机械臂不是一个孤立的设备,它是一…

不想重复机械操作?OpenClaw Windows部署 可视化搭建桌面 AI 保姆教程

不想重复机械操作?OpenClaw Windows部署 可视化搭建桌面 AI 保姆教程

2026/8/4 21:19:16

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性极强的本地智能工具,凭借其本地离线运行、可视化图形操作与任务自动化三大核心特性,深受用户青睐。与普通的在线对话 AI 工具不同,它是一款能够直接操控本机软硬件的智能数字员工…

Moebius-Places2-fp16快速上手指南:512×512图像修复的完整流程

Moebius-Places2-fp16快速上手指南:512×512图像修复的完整流程

2026/8/4 21:19:16

Moebius-Places2-fp16快速上手指南:512512图像修复的完整流程 【免费下载链接】Moebius-Places2-fp16 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/Moebius-Places2-fp16 Moebius-Places2-fp16是一款基于hustvl/Moebius开发的轻量级图像修复…

bark!揭秘:打造低延迟局域网音频同步流的终极方案

bark!揭秘:打造低延迟局域网音频同步流的终极方案

2026/8/4 21:09:15

bark!揭秘:打造低延迟局域网音频同步流的终极方案 【免费下载链接】bark live sync audio streaming for local networks 项目地址: https://gitcode.com/gh_mirrors/bark2/bark bark是一款专为局域网设计的低延迟多接收端同步音频流解决方案,让你…

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案

2026/8/4 15:23:37

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾经从网易云音乐下载了心爱的歌曲&am…

分布式配置中心选型实战:Nacos与Consul在创业场景下的对比

分布式配置中心选型实战:Nacos与Consul在创业场景下的对比

2026/8/3 19:24:18

分布式配置中心选型实战:Nacos与Consul在创业场景下的对比工程导读:本文深入讨论 分布式配置中心选型实战:Nacos与Consul在创业场景下的对比 在生产工程实践中的核心落地方案。基于 分布式架构与微服务设计 视角,剖析实际痛点、架…

MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案

MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案

2026/8/3 20:38:37

MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案 【免费下载链接】MoneyPrinterPlus AI一键批量生成各类短视频,自动批量混剪短视频,自动把视频发布到抖音,快手,小红书,视频号上,赚钱从来没有这么容易过! 支持本地语音模型chatTTS,fasterwhisper,…

3步解决Windows DLL缺失问题:VisualCppRedist AIO终极运行库修复方案

3步解决Windows DLL缺失问题:VisualCppRedist AIO终极运行库修复方案

2026/8/4 0:07:58

3步解决Windows DLL缺失问题:VisualCppRedist AIO终极运行库修复方案 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经在打开游戏或软件时遇…

SingleFile终极指南:一键保存完整网页的5大核心功能

SingleFile终极指南:一键保存完整网页的5大核心功能

2026/8/4 0:07:58

SingleFile终极指南:一键保存完整网页的5大核心功能 【免费下载链接】SingleFile Web Extension for saving a faithful copy of a complete web page in a single HTML file 项目地址: https://gitcode.com/gh_mirrors/si/SingleFile 你是否曾经遇到过这样的…

国家中小学智慧教育平台电子课本下载终极方案:三步免费获取PDF教材

国家中小学智慧教育平台电子课本下载终极方案:三步免费获取PDF教材

2026/8/4 0:07:58

国家中小学智慧教育平台电子课本下载终极方案:三步免费获取PDF教材 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取课本内容。…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/4 13:34:51

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/4 14:25:14

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/4 15:11:03

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…