PyKDL 求解Panda机械臂逆运动学

news/2025/1/3 3:33:57/

1.python3.6安装PyKDL

pip install PyKDL不行,import的时候失败了,只能源码编译

GitHub - orocos/orocos_kinematics_dynamics: Orocos Kinematics and Dynamics C++ library

具体安装可以参考:ROS编译PyKDL python3_RuiH.AI的博客-CSDN博客

其中pybind11这个下载的时候比较慢

git submodule update --init

可以用下面的代替,把pybind11下载下来.

cd orocos_kinematics_dynamics/python_orocos_kdl
git clone https://github.com/pybind/pybind11.git

make install以后,import PyKDL还是会报错

ImportError: dynamic module does not define module export function (PyInit_PyKDL)

只有在build下可以import PyKDL

cd /orocos_kinematics_dynamics/python_orocos_kdl/build
python
import PyKDL

可能是找不到什么动态连接库或者什么的问题的吧??总之先在build目录下运行.

2.PyKDL求panda机械臂逆运动学

 

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
@Project :robotic_obstacle_planning
@File :pyKDL.py
@Author :jintianlei
@Date : 2023/7/27
"""
import PyKDL
import mathdef create_panda_chain():# DH参数a = [0.0, 0.0, 0.0, 0.0825, -0.0825, 0.0, 0.088]alpha = [0.0, -math.pi / 2, math.pi / 2, math.pi / 2, -math.pi / 2, math.pi / 2, math.pi / 2]d = [0.333, 0.0, 0.316, 0.0, 0.384, 0.0, 0.107]theta = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]chain = PyKDL.Chain()for i in range(7):chain.addSegment(PyKDL.Segment(PyKDL.Joint(PyKDL.Joint.RotZ), PyKDL.Frame( PyKDL.Rotation.RotZ(theta[i]) * PyKDL.Rotation.RotX(alpha[i]), PyKDL.Vector(a[i], -d[i] * math.sin(alpha[i]), d[i] * math.cos(alpha[i])) )))return chaindef compute_inverse_kinematics(chain, target_pose):'''正运动学'''fk = PyKDL.ChainFkSolverPos_recursive(chain)pos = PyKDL.Frame()q = PyKDL.JntArray(7)qq = [-0.917812, -0.917812, 43.2983, 21.2432, 16.8387, -27.4167, 19.5677]for i in range(7):q[i] = qq[i]fk_flag = fk.JntToCart(q, pos)print("fk_flag", fk_flag)print("pos", pos)'''逆运动学'''ikv = PyKDL.ChainIkSolverVel_pinv(chain)ik = PyKDL.ChainIkSolverPos_NR(chain, fk, ikv)# 创建目标位姿target_frame = PyKDL.Frame(PyKDL.Rotation.RPY(target_pose[3], target_pose[4], target_pose[5]), PyKDL.Vector(target_pose[0], target_pose[1], target_pose[2]))# 创建起始关节角度initial_joint_angles = PyKDL.JntArray(chain.getNrOfJoints())result = PyKDL.JntArray(chain.getNrOfJoints())#print(target_frame)# 调用逆运动学求解器ik.CartToJnt(initial_joint_angles, target_frame,result)print('result: ',result)return resultif __name__=="__main__":# 创建机器人链chain = create_panda_chain()# 设置目标位姿target_pose = [0.5, 0.3, 0.4, 0.1, 0.0, 0.0]# 调用逆运动学求解函数joint_angles = compute_inverse_kinematics(chain, target_pose)print("关节角度: ", joint_angles)


http://www.ppmy.cn/news/995037.html

相关文章

分享一些精选的开源框架与代码!

今天主要是收集并精选了一些自己所了解和学习过的优秀的嵌入式开源框架代码和项目,不太了解的就不推荐给大家了,因为开源的东西实在是太多了,鱼龙混杂,所以取其精华去其糟粕是迫在眉睫的大事~ 当然也不要总是沉浸在开源的东西之中…

#P0997. [NOIP2006普及组] 数列

题目描述 给定一个正整数k(3≤k≤15)k(3≤k≤15),把所有k的方幂及所有有限个互不相等的k的方幂之和构成一个递增的序列,例如,当k3k3时,这个序列是: 1,3,4,9,10,12,13,…1,3,4,9,10,12,13,… (该序列实际上就是&…

SqlServer 批量删除表

SqlServer 批量删除表 直接上SQL脚本吧 SELECT row_number()over(order by Name) as FID,Name into #temp FROM SysObjects Where XTypeU --类型,U为实体表 and name like TMP% --表名过滤(自定义就好) ORDER BY Namedeclare count int 0…

什么是MES,什么是WMS,MES与WMS有什么区别?

什么是MES?什么是WMS?以及MES(制造执行系统)与WMS(仓库管理系统)的区别,下面分为三块跟大家详细讲解。 一、什么是MES? 1、概念: MES(英文全称&#xff1a…

今天是啥时候?

描述 定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天,注意闰年问题。。 输入 年月日 输出 当年第几天 输入样例 1 2020 2 28 输出样例 1 59 输入样例 2 2022 9 5 输出样例 2 248 代码一(如下&…

TWILIGHT靶场详解

TWILIGHT靶场详解 下载地址:https://download.vulnhub.com/sunset/twilight.7z 这是一个比较简单的靶场,拿到IP后我们扫描发现开启了超级多的端口 其实这些端口一点用都没有,在我的方法中 但是也有不同的方法可以拿权限,就需要…

复习第二章之Redis

一、什么是Redis Redis 本质上是一个 Key-Value 类型的内存数据库,很像 memcached,整个 数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据 flush 到硬盘 上进行保存。因为是纯内存操作,Redis 的性能非常出色&…

js中的dom

HTML DOM对象(Document Object Model):是一种文档对象模型,从js的角度,认为网页中的每一个标签都是一个独立的对象,这一类对象称为dom对象,以面向对象的思想来操作网页内容 获取dom对象 一般有四种方式进行获取&…