MoveIt!与IkFast运动学插件实战:从零到精通的完整配置指南

MoveIt与IkFast运动学插件实战:从零配置到机械臂精准控制 本文详细介绍了如何为机械臂配置IkFast运动学插件,以替代默认的KDL求解器,实现精准、快速的逆运动学解算。通过从Docker环境搭建、DAE模型生成、IkFast代码编译到MoveIt插件集成的完整实战流程,帮助开发者解决KDL求解慢、精度不足的问题,显著提升机械臂控制系统的实时响应能力。 阅读详情

1. 为什么你需要IkFast?从KDL的“慢”说起

如果你正在用MoveIt!控制机械臂,大概率已经体验过它默认的运动学求解器——KDL。KDL是个很棒的库,通用性强,几乎支持所有串联机械臂。但用过一阵子,你可能会发现一个问题:慢。尤其是在做路径规划或者需要频繁求解逆运动学(IK)的时候,那种等待的感觉,就像在用一台老旧的电脑打开一个复杂的3D建模软件。

我刚开始用MoveIt!给一个六轴机械臂做抓取任务时,就深有体会。场景很简单:视觉识别出一个物体的位置,机械臂需要快速计算出一组关节角度去抓取。用默认的KDL求解器,每次求解逆解可能要几十甚至上百毫秒。在需要实时响应的场景里,这个延迟就非常致命了,整个动作会显得卡顿、不流畅。后来我才知道,KDL本质上是一种数值迭代解法。它就像是一个聪明的猜谜者,从一个初始猜测开始,不断地调整关节角度,一步步逼近目标位姿。这个过程需要计算,需要时间,而且有时还会陷入局部最优解,直接告诉你“无解”。

而IkFast,走的完全是另一条路。它属于解析解法。它的核心思想是,在机械臂设计完成的那一刻,它的运动学方程就是确定的。IkFast在配置阶段,通过强大的符号计算(背后是OpenRAVE),提前把这些方程“暴力”地解算出来,生成一个纯粹的、不包含任何迭代过程的C++函数。这个函数就是你的逆运动学求解器。运行时,你传入一个末端位姿(位置和姿态),它直接通过一系列预先计算好的数学公式,输出所有可能的关节角度解,整个过程通常在微秒级别完成。

你可以这样理解:KDL像一个每次都要现场推导公式解题的大学生,虽然什么题都能尝试,但做得慢;IkFast则像是一个已经把整本习题册答案都背下来的学霸,题目一来,答案脱口而出。这个速度的提升,对于需要高频率、实时性强的应用,比如视觉伺服、动态避障、快速分拣等,是革命性的。当然,天下没有免费的午餐,IkFast的配置过程比KDL要复杂不少,这也是为什么我们需要这样一份详细的指南。别担心,跟着步骤走,你也能让你的机械臂“飞”起来。

2. 搭建战场:一站式Docker开发环境配置

工欲善其事,必先利其器。配置IkFast最头疼的往往不是逻辑,而是环境。它依赖一个比较老的工具链——OpenRAVE,这个库在现在的Ubuntu和ROS版本上直接安装,可能会遇到各种依赖冲突、版本不匹配的“玄学”问题。我当年就被坑过好几次,编译错误层出不穷。所以,我们现在选择最稳妥、最干净的方式:Docker容器。

Docker就像一个轻量化的虚拟机,我们把所有需要的工具(特定版本的OpenRAVE、编译器、Python2等)打包成一个现成的镜像。在这个镜像里操作,环境是绝对纯净和一致的,完全不影响你主机上的其他开发环境。这招是我踩过无数坑之后总结的“终极解决方案”,能帮你省下至少80%的环境配置时间。

2.1 安装Docker与获取资源

首先,确保你的主机系统是Ubuntu 20.04,并且已经安装了ROS Noetic。这是我们的基础。然后,我们来安装Docker。

打开终端,我习惯使用一个非常方便的安装脚本,来自国内机器人社区鱼香ROS。这个脚本会自动处理依赖和源配置。

wget http://fishros.com/install -O fishros && . fishros

运行后,你会看到一个交互菜单。选择 “一键安装: Docker” 这个选项,按照提示操作即可。脚本会帮你完成所有安装和配置,包括将当前用户加入docker用户组(这样就不用每次都加sudo了)。安装完成后,记得重新登录当前用户或者新开一个终端窗口,让用户组生效。

接下来,我们需要两样东西:一是机械臂的URDF模型文件,二是已经准备好的OpenRAVE Docker镜像。这里我们以一个开源的EC66六轴机械臂模型为例。

git clone https://github.com/Elite-Robots/ROS elite_robot

这条命令会把机械臂的模型和MoveIt!配置文件克隆到本地,目录名是elite_robot。

2.2 启动Docker工作环境

现在,进入我们克隆的代码目录,并启动那个包含了所有魔法工具的Docker容器。

cd elite_robot
xhost +  # 允许Docker容器访问主机的图形界面(为了后续的可视化)
sudo docker run -it --rm -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY -v `pwd`:`pwd` -w `pwd` fishros2/openrave

我来解释一下这条有点长的命令:

  • -it:以交互模式运行容器,并分配一个伪终端。
  • --rm:容器退出时自动删除它,保持系统清洁。
  • -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY:这两条组合拳是为了让容器内的程序(比如OpenRAVE GUI)能在你主机的屏幕上显示出来。
  • -v pwd:pwd``:将主机当前的目录(elite_robot)挂载到容器内的相同路径。这样你在容器里修改的文件,在主机上直接就能看到,反之亦然。
  • -w pwd``:设置容器启动后的工作目录就是挂载进来的这个目录。
  • fishros2/openrave:这就是我们需要的镜像名字,里面预装了OpenRAVE、Catkin工具链等。

命令执行后,你会发现终端提示符变了,意味着你已经进入了Docker容器内部。恭喜,最易出错的环境搭建部分已经完成了!在这个“沙箱”里,我们可以放心大胆地操作。

2.3 编译ROS工作空间

进入容器后,第一件事是编译这个机械臂的ROS工作空间,确保所有依赖都就绪。

catkin_make

编译过程可能需要几分钟。完成后,别忘记“激活”这个工作空间的环境,这样系统才能找到我们刚刚编译出来的包和工具。

source devel/setup.bash
# 注意:有些环境可能是 setup.bash,如果上述命令报错,可以尝试
# source devel/setup.bash

到这一步,我们的战场就布置妥当了。一个与世无争的纯净环境,所有工具触手可及,接下来就可以对机械臂模型“动手术”了。

3. 模型炼金术:从URDF到OpenRAVE的DAE文件

MoveIt!和ROS世界通用的机器人描述格式是URDF,它定义了连杆、关节、外观、碰撞体等等。但OpenRAVE这位“老前辈”更偏爱COLLADA格式,后缀是.dae。所以,我们的第一步就是进行格式转换,并且要对转换后的数据做一些“精加工”,因为浮点数的精度问题可能会影响后续IkFast生成的代码的稳定性。

首先,切换到存放URDF文件的目录。

cd src/elite_description/urdf/

这里你应该能看到一个叫ec66_description.urdf的文件(对于你的机械臂,可能是其他名字)。我们使用ROS collada_urdf包里的工具进行转换。

rosrun collada_urdf urdf_to_collada ec66_description.urdf ec66_description.dae

这条命令执行后,会生成一个ec66_description.dae文件。但是,直接用它还不够。URDF转换过程中会产生很多非常长的小数,比如0.123456789012345,这可能会让后续的符号计算变得复杂甚至出错。我们需要一个“舍入”操作,统一精度。

rosrun moveit_kinematics round_collada_numbers.py ec66_description.dae ec66_description.dae 5

这个round_collada_numbers.py脚本非常关键。它把.dae文件里所有的数字,统一保留到小数点后5位(参数5的意思)。我实测下来,精度设为5(即小数点后4位)对于绝大多数工业机械臂来说,在保持精度的同时,能极大简化生成的方程。精度太高(比如8或10),生成IkFast代码的时间会指数级增长,甚至失败;精度太低(比如2),可能会损失关键几何信息,导致求解错误。

现在,我们可以用OpenRAVE打开这个文件,直观地检查一下模型转换是否正确。

openrave ec66_description.dae

如果一切正常,会弹出一个三维可视化窗口,显示你的机械臂模型。你可以用鼠标拖拽查看。注意:由于Docker的图形转发有时不太稳定,这一步可能会闪退。如果闪退了,没关系,只要前面的命令没报错,模型文件就是可用的,我们继续往下走。

更可靠的方式是用命令行检查模型结构,这能让我们清晰地看到运动学链,为下一步生成IkFast代码选择正确的“基连杆”和“末端连杆”至关重要。

openrave-robot.py ec66_description.dae --info links

这个命令会列出模型中所有的“连杆”(Link)。你会看到一个列表,通常第一个是world,接着是base_link(机械臂的底座),然后是link1, link2...直到最后一个末端连杆(比如flan或tool0)。记下base_link和末端连杆的名字。

openrave-robot.py ec66_description.dae --info joints

这个命令列出所有的“关节”(Joint)。你需要确认从底座到末端的这条运动链上的所有关节都是可动的(joint1到joint6),并且类型正确(通常是旋转关节revolute)。这一步的检查能避免你选错了连杆,导致生成的IkFast求解器牛头不对马嘴。

4. 核心魔法:一键生成IkFast求解器代码

这是整个流程最核心、最“魔法”的一步。我们将调用OpenRAVE的ikfast.py模块,它会对我们的机械臂模型进行符号计算,并生成一个完整的C++逆运动学求解器。命令看起来复杂,但理解了每个参数就很简单。

确保你还在urdf目录下,然后运行:

python `openrave-config --python-dir`/openravepy/_openravepy_/ikfast.py --robot=ec66_description.dae --iktype=transform6d --baselink=1 --eelink=8 --savefile=$(pwd)/ikfastec66.cpp

我来拆解一下这个“咒语”:

  • --robot=ec66_description.dae:指定我们上一步生成的DAE模型文件。
  • --iktype=transform6d:这是求解类型。对于典型的6自由度机械臂(位置XYZ+旋转RPY/四元数),transform6d是最常用且高效的。如果你的机械臂是5自由度或者有其他约束,可能需要选择TranslationXAxisAngleZNorm4D等类型,这需要参考OpenRAVE文档。
  • --baselink=1:运动学链的起始连杆索引。注意,这里的索引是OpenRAVE内部索引,从0开始。通常world是0,base_link是1。你可以通过前面--info links命令的输出顺序来确认。这里1对应base_link。
  • --eelink=8:运动学链的终止连杆索引。根据之前的--info links输出,末端连杆flan的索引是8。
  • --savefile=$(pwd)/ikfastec66.cpp:指定生成的C++源代码文件保存的路径和名字。

按下回车,终端会开始疯狂输出日志。这个过程可能会持续几分钟到几十分钟,取决于你机械臂的复杂度和之前设置的精度。它正在后台进行庞大的符号运算和代码生成,请耐心等待。如果一切顺利,最终你会在当前目录下看到一个崭新的ikfastec66.cpp文件,大小可能有几百KB甚至几MB。这个文件里,就封装了你机械臂逆运动学的所有秘密。

生成完成后,我们可以立刻编译测试一下这个“裸奔”的求解器,看看它是否工作。

cp /usr/local/lib/python2.7/dist-packages/openravepy/_openravepy_/ikfast.h .
g++ ikfastec66.cpp -o ikfast-ec66 -llapack -std=c++11

首先,我们把IkFast需要的头文件ikfast.h复制过来。然后用g++编译器,链接线性代数库lapack,以C++11标准编译这个cpp文件,生成一个可执行程序ikfast-ec66。

运行它:

./ikfast-ec66

程序会输出使用说明。它期望你输入一个4x4的齐次变换矩阵(代表末端位姿),然后它会输出所有可能的关节角度解。虽然现在用起来还不方便(需要手动输入矩阵),但这已经证明了我们的IkFast求解器核心是能正常生成和运行的。至此,最关键的“算法内核”已经诞生了。

5. 穿上ROS的外衣:创建MoveIt!插件包

我们现在有了一个强大的C++求解器内核(ikfastec66.cpp),但它还是个“裸机程序”,无法被MoveIt!直接调用。MoveIt!期望的插件是一种特定格式的ROS功能包。幸运的是,MoveIt!提供了一个非常棒的工具脚本,能自动为我们生成这个插件包的外壳,并把我们的内核集成进去。

首先,退出Docker容器(输入exit),回到主机系统的终端。我们将在主机的ROS工作空间(elite_robot)里操作。

在src目录下,为我们即将生成的插件创建一个专属的文件夹。

cd src/
mkdir elite_moveit_ikfast_plugins
cd elite_moveit_ikfast_plugins

接下来,使用MoveIt!的自动化工具。这个命令比较长,参数很重要:

rosrun moveit_kinematics create_ikfast_moveit_plugin.py ec66 manipulator elite_moveit_ikfast_plugin_ec66 "world" "flan" ../elite_description/urdf/ikfastec66.cpp

再次拆解参数:

  • ec66:你的机器人名字,和URDF里<robot name="ec66">保持一致。
  • manipulator:MoveIt!配置中**规划组(Planning Group)**的名字。这个必须和你用MoveIt! Setup Assistant配置时设置的规划组名字完全一致,通常默认就是manipulator。
  • elite_moveit_ikfast_plugin_ec66:你要生成的ROS功能包的名字,可以自定义,但建议包含机器人名和ikfast_plugin以便识别。
  • "world":运动学链的起始连杆。注意:这里和生成IkFast代码时用的--baselink不同!在MoveIt!的上下文里,通常使用"world"作为根连杆。除非你的URDF结构特殊,否则用"world"。
  • "flan":运动学链的末端连杆。这个和生成IkFast时用的--eelink对应的连杆名(flan)一致。
  • ../elite_description/urdf/ikfastec66.cpp:上一步生成的IkFast C++源码文件的相对路径。

命令执行成功后,会在当前目录生成一个名为elite_moveit_ikfast_plugin_ec66的功能包。这个包的结构是标准的Catkin包,里面包含了CMakeLists.txt、package.xml以及关键的C++插件代码。

你需要特别关注其中一个文件:elite_moveit_ikfast_plugin_ec66/plugins/ec66_manipulator_moveit_ikfast_plugin_description.xml。用文本编辑器打开它,内容大致如下:

<?xml version='1.0' encoding='UTF-8'?>
<library path="lib/libec66_manipulator_moveit_ikfast_plugin">
  <class name="ec66_manipulator/IKFastKinematicsPlugin" type="ec66_manipulator::IKFastKinematicsPlugin" base_class_type="kinematics::KinematicsBase">
    <description>IKFast61 plugin for closed-form kinematics of ec66 manipulator</description>
  </class>
</library>

请死死记住<class name="...">里面的内容:ec66_manipulator/IKFastKinematicsPlugin。这就是我们插件的唯一标识符,等下配置MoveIt!时要用它来替换掉KDL。这个字符串的构成是 机器人名_规划组名/IKFastKinematicsPlugin,但具体生成规则以这个文件为准,直接复制这里的内容最保险。

6. 临门一脚:集成、编译与填坑

插件包生成好了,现在需要告诉MoveIt!:“别再用KDL了,用我这个新的IkFast插件”。这个配置是通过一个YAML文件完成的。

找到你的MoveIt!配置包。通常路径是 src/moveit_config/ec66_moveit_config/config/kinematics.yaml。用编辑器打开它,你会看到类似下面的默认配置(使用KDL):

manipulator:
  kinematics_solver: kdl_kinematics_plugin/KDLKinematicsPlugin
  kinematics_solver_search_resolution: 0.005
  kinematics_solver_timeout: 0.005
  kinematics_solver_attempts: 3

我们需要把kinematics_solver这一行替换成我们自己的IkFast插件。将上面记住的插件标识符填进去:

manipulator:
  kinematics_solver: ec66_manipulator/IKFastKinematicsPlugin # 替换这一行!
  kinematics_solver_search_resolution: 0.005
  kinematics_solver_timeout: 0.005
  kinematics_solver_attempts: 3

保存文件。现在,激动人心的时刻到了,让我们编译整个工作空间并启动MoveIt!测试。

回到工作空间根目录(elite_robot),编译:

catkin_make
source devel/setup.bash

然后启动MoveIt!的虚拟(fake)控制模式,这个模式不连接真实机器人,只在Rviz里做规划和仿真:

roslaunch elite_moveit elite_moveit.launch robot:=ec66 mode:=fake

Rviz界面应该会启动并加载机械臂模型。但是,十有八九你会遇到错误!别慌,这是IkFast插件集成的“经典坑位”。错误信息通常长这样:

/opt/ros/noetic/lib/moveit_ros_move_group/move_group: symbol lookup error: .../libec66_manipulator_moveit_ikfast_plugin.so: undefined symbol: _ZN16ec66_manipulator17GetFreeParametersEv

这个错误是说,MoveIt!在加载我们的插件动态库(.so文件)时,找不到一个叫GetFreeParameters的函数符号。这是因为自动生成的插件代码有一个小遗漏。我们需要手动修补一下。

根据错误提示,找到生成的插件包里的C++源文件。路径通常是:src/elite_moveit_ikfast_plugins/elite_moveit_ikfast_plugin_ec66/src/ec66_manipulator_ikfast_solver.cpp。

用文本编辑器打开这个文件,搜索GetFreeParameters。你应该找不到这个函数的实现。我们需要在合适的位置(通常在文件末尾,其他类似函数如GetKinematicsHash附近)添加这个缺失的函数。找到文件里所有函数定义结束的地方(大概在390行附近),添加如下一行代码:

// ... 文件末尾其他函数 ...
IKFAST_API const char* GetKinematicsHash() { return "<哈希值>"; }

// 添加下面这行代码,修复链接错误
IKFAST_API int* GetFreeParameters() { return NULL; }

注意:GetKinematicsHash函数返回的哈希值字符串不要改动,只添加GetFreeParameters函数。这个函数对于6自由度全关节机械臂来说,返回NULL即可,表示没有自由参数(对于少于6自由度的机械臂,这里需要返回一个数组)。

保存文件,然后重新编译工作空间:

catkin_make
source devel/setup.bash

再次启动MoveIt!:

roslaunch elite_moveit elite_moveit.launch robot:=ec66 mode:=fake

这一次,如果一切配置正确,Rviz应该能成功启动,并且不会报那个符号错误了。你可以在Rviz里用“Interactive Markers”拖拽机械臂的末端,会发现逆运动学的求解速度极快,几乎是瞬间完成。你也可以尝试用MoveIt!的规划功能规划一条路径,感受一下规划速度的提升。至此,你的机械臂已经成功装备了IkFast这把“快刀”。

7. 进阶调优与避坑指南

成功运行只是第一步,要让IkFast插件在生产环境中稳定高效,还需要注意以下几点。这些都是我实际项目中踩过的坑。

求解器类型选择:我们用的是transform6d,它要求完整的6自由度位姿。如果你的应用场景只关心末端位置(XYZ),不关心姿态(比如某些喷涂、点胶任务),可以尝试Translation3D类型,它生成的求解器会更简单,求解速度可能更快,解的数量也可能更多。但需要修改MoveIt!的配置,告诉它忽略姿态约束,这涉及到更深入的配置。

奇异点处理:IkFast是解析解,在机械臂的奇异点位置(比如手臂完全伸直),理论上会有无穷多解或者无解。虽然IkFast代码内部会处理,但返回的解可能不稳定。在MoveIt!的规划中,最好结合碰撞检测和关节限位,避免规划出过于接近奇异点的路径。你可以在kinematics.yaml中调整kinematics_solver_attempts参数,让求解器多尝试几次不同的种子状态,有时能绕过奇异点。

多规划组支持:如果你的机器人有多个机械臂(比如双臂),或者一个机械臂上有多个可规划的部分(比如机械臂+夹爪),每个规划组都需要单独配置IkFast插件。你需要为每个规划组确定其独立的运动学链(基连杆和末端连杆),然后分别运行create_ikfast_moveit_plugin.py脚本生成不同的插件包,并在kinematics.yaml中为每个规划组指定对应的插件。

与OMPL规划器的配合:MoveIt!默认使用OMPL库进行路径规划。OMPL在规划时,会频繁调用逆运动学求解器来检查路径点是否可达。换用IkFast后,整个规划过程的瓶颈就从IK求解转移到了采样和碰撞检测上。如果你的规划仍然很慢,可能需要去调整OMPL规划器的参数,比如增加range(采样步长)、选择合适的规划算法(如RRTConnect通常较快)等。

性能监控:你可以通过ROS的rostopic工具,查看/joint_states的更新频率,或者在代码里计时,来定量对比IkFast和KDL的速度差异。在我的一个项目中,单次IK求解时间从KDL的平均15ms降到了IkFast的0.1ms以下,提升了两个数量级,这对于需要每秒处理几十上百个视觉目标的系统来说,是质的飞跃。

配置IkFast插件的过程,像是一次精细的机器人外科手术。每一步都需要清晰明确,参数要对得上。一旦走通,你就会获得一个速度飞快的运动学核心,它能极大释放你机器人上层应用的潜力。希望这份从环境到代码、从理论到填坑的指南,能帮你顺利通关。如果在实际操作中遇到文档之外的问题,多看看终端报错信息,那里面通常藏着解决问题的钥匙。

UR5-配置MoveIt!运动学插件IKFAST 最近一直在用逆运动学插件,将UR5的末端位姿通过逆运动学包,规划出各个关节之间的旋转和位移关系,虽然之前看到IKFAST的配置特别麻烦,但是发现用过KDL和TRAC-IK求解效率不高,常常出现规划不出轨迹的情。所以最近决心配置IKFAST,相比于前两者是基于数值解的运动学插件,IKFAST是一种基于解析算法的运动学插件,可以保证每次求解的一致性。但IKFAST会求解出所有可行解,然后选一个,不一定... 阅读详情

相关推荐

【IKFast】IKFast配置与使用

文章目录参考环境什么是IKFastMoveIt! IKFast 参考 IKFast Kinematics Solver 环境 ROS kinetic Franka emika Panda 什么是IKFast 摘自Wikipedia:机器人运动学编译器IKFast是Rosen Diankov的OpenRAVE运动计划软件中提供的功能强大的逆运动学求解器。 与大多数逆运动学求解器不同,IKFast可以解析地求解任何复杂运动学链的运动学方程,并生成特定于语言的文件(如C ++)供以后使用。 最终结果是极其

vrijheid的博客 1万+

MOVEIT配置IKFast运动学插件-安装注意事项-亲自安装过程介绍-超级详细-亲测

MOVEIT配置IKFast运动学插件-安装注意事项前言一、问题1二、配置过程1.安装依赖程序和库2.安装OpenSceneGraph3.安装sympy 0.7.14.删除mpmath4.安装Moveit!IKFast4.安装OpenRAVE5.配置IKFast插件6.使用IKFast插件三、参考 前言 提示:这里列出了一些参考网站章节: 第一个就是moveit!官网的安装教程:链接: moveit!IKFast配置 官网教程. 提示:以下是本篇文章正文内容,下面案例可供参考 一、问题1 示例:生成..

AI_INDUSTRY的博客 5630

Moveit,IkFast运动学插件配置,最详细,没有之一

之前做好了IKFast配置的镜像,并没有在实际的机械臂上使用,本篇文章,旨在带你一起一步步给你的机械臂配置好ikfast插件.

生活不止眼前的苟且 2972

ROS技术点滴 —— MoveIt!中的运动学插件

MoveIt!是ROS中一个重要的集成化开发平台,由一系列移动操作的功能包组成,提供运动规划、操作控制、3D感知、运动学等功能模块,是ROS社区中使用度排名前三的功能包,目前已经支持众多机器人硬件平台。 MoveIt!中的众多功能都使用插件机制集成,其中有一个重要的功能模块——运动学插件。 今天我们就来聊下MoveIt!中的运动学求解器。 一、KDL Kinematics and ...

sinolover的专栏 3036

MoveIt:生成属于自己的ikfast逆运动学插件,最全搬运工及个人解决方案

OpenRAVE | ikfast Module | OpenRAVE DocumentationOpen Robotics Automation Virtual Environmenthttp://openrave.org/docs/latest_stable/openravepy/ikfast/这篇文章初衷是怕自己以后忘了生成的操作,所以代码不基于项目,即 不可粘贴即用,仅提及包功能及函数使用方法,需要对ROS有一定了解,时间紧张,不好意思由于配置环境会下载很多库,如果失败后续可能会用不到并且占用空间,

m0_67407448的博客 3452

ABB--配置MoveIt!运动学插件IKFAST

一、IKFAST简介 IKFAST是一种基于解析算法的运动学插件,可以保证每次求解的一致性。 mkdir -p ~/ikfast_ws/src cd ~/abb_ws/src catkin_init_workspace cd ~/abb_ws catkin_make

long_steve的博客 2549

MoveIt2中使用trac_ik

但是在Ros2中,无论MoveIt2也好,还是trac_ik也好,都没有提供标准的trac_ik集成(使用)方法。使用起来也挺方便。

joyopirate的博客 4948

MoveIt!中的运动学插件ikfast的配置(以aubo_i5机械臂为例)

我在配置过程中踩了不少坑,在此记录一下,既方便自己,也给有需要的人。以下是详细配置步骤: 一、安装ubuntu16.04 建议使用ubuntu16.04,因为在后续配置过程中需要从源码安装openrave,而openrave源码的编译需要boost1.58的支持,ubuntu16.04默认安装boost1.58。我在ubuntu18.04上尝试编译失败,在github上看到有人说是boost版本的...

lucky_chay的博客 3003

moveit_ik_demo.py逆向运动学程序报错,Rviz中机器人不动的解决方法

先尝试了在kinematics.yaml中直接更换求解器,出现如下代码报错。修改过程如下,先点manipulator,再点Edit Selected。查了一些帖子,主要解决方案思路是更换Kinematic求解器。最后重新生成包,我就不放图片了,Rviz正常可执行ik的程序。实际上应该回到Setup_moveit中修改。机械臂逆向运动学规划出现如下报错,在这个页面中选择带ik的求解器。

adba_yun的博客 1373

ubuntu18.04环境下为UR3配置MoveIt!运动学插件IKFAST(二)

前言 昨天已经将OpenRAVE配置好了,接下来就是配置IKFast插件了。 ikfast,机器人运动学的编译器,在Rosen Diankov OpenRAVE运动规划软件提供,是一个强大的逆运动学求解器。不像大多数的逆运动学求解,ikfast可以求解任意复杂运动链的运动学方程,并产生特定语言的文件(如C++)后供使用。最终的结果是非常稳定的解决方案,在最新的处理器能以5微秒的速度完成运算。From:https://www.ncnynl.com/archives/201610/1046.html .

Huster_mse的博客 3175

ubuntu18.04环境下为UR3配置MoveIt!运动学插件IKFAST(一)

目录 前言 一、参考文献 二、安装步骤 1.安装程序 2.安装依赖库 3.安装OpenSceneGraph-3.4 4.安装Flexible Collision Library 0.5.0 5.安装sympy 0.7.1(注意版本,若版本不对会产生错误) 6.删除mpmath 7.安装MoveIt! IKFast 8.安装OpenRAVE 三、修改安装步骤 1.安装程序与依赖库 2.安装OpenSceneGraph-3.4 3.安装Flexible Collision ...

Huster_mse的博客 4466

MoveIt! 学习笔记13 - KDL/IKFAST/TRAC-IK运动学求解器区别

此博文主要是用来记录ROS-Kinetic 中,用于机器人轨迹规划的MoveIt功能包的学习记录。 英文原版教程见此链接:http://docs.ros.org/en/kinetic/api/moveit_tutorials/html/doc/time_parameterization/time_parameterization_tutorial.html 引:这个教程主要是通过Moveit工具箱,并且使用MoveGroup Interface, 同时创建一个moveit_msgs::Grasp...

HarwardWu的博客 9940

从零到一:IKFast插件配置的避坑指南与实战优化

本文详细介绍了从零开始配置IKFast插件的完整流程与实战优化技巧,涵盖环境搭建、依赖安装、URDF转DAE、IKFast代码生成等关键步骤。针对机械臂开发中常见的配置问题和性能瓶颈,提供了实用的避坑指南和优化建议,帮助开发者高效完成ROS+IKFast开发环境部署。

weixin_30352645的博客 519

MoveIt!中的运动学插件

是ROS中一个重要的集成化开发平台,由一系列移动操作的功能包组成,提供运动规划、操作控制、3D感知、运动学等功能模块,是ROS社区中使用度排名前三的功能包,目前已经支持众多机器人硬件平台。比如在下边这张图中,左侧的红点是KDL无法求解的姿态点,但是在右侧使用TRAC-IK是可以求解的。的时候,MoveIt!相比KDL和TRAC-IK,IKFAST的安装过程就比较复杂了,不过就笔者的使用经验来讲,IKFAST的效果还是很推荐的,所以。中的众多功能都使用插件机制集成,其中有一个重要的功能模块——运动学插件。

ZPC8210的博客 1068

MoveIt!运动学配置底层原理与实战指南

运动学配置是机器人操作系统(ROS/ROS 2)中实现机械臂精准位姿控制的基础环节,其本质是将物理机械臂的几何结构与运动约束,通过URDF建模、SRDF语义标注和IK求解器选型三重映射,转化为MoveIt!可理解、可计算的数学模型。该过程直接影响逆运动学求解成功率、路径规划可靠性及碰撞检测准确性。核心涉及URDF连杆坐标系定义、SRDF运动组与末端执行器语义划分、以及KDL/Trac-IK/IKFast等求解器的适用边界与参数调优。本文以UR5e为典型六轴机械臂,系统解析从XML描述到RViz验证的全链路配

anheku1562的博客 508

MoveIt运动学插件IK-FAST文档

IKFAST作者Rosen Diankov的博士论文,里面详细介绍了IKFAST求六自由度机械臂的方法和处理冗余的方法

Ubuntu18.04-IKFAST的配置

ubuntu18.04配置IKFAST IKFAST官网:http://docs.ros.org/en/melodic/api/moveit_tutorials/html/doc/ikfast/ikfast_tutorial.html ROS进阶——MoveIt!运动学插件IKFAST配置 https://blog.youkuaiyun.com/Kalenee/article/details/80740258 ubuntu安装openrave的简单方法https://blog.youkuaiyun.com/weixin_4051

万法自然的博客 3726

STM32 使用SYN6288语音模块

本篇文章带大家学习一下SYN6288语音模块,这个模块可以用于车载设备,语音电子书等众多产品当中,而且这个模块支持多种编码格式,GB2312,GBK等字符编码格式。SYN6288语音合成模块是一种语音合成设备,其可实现文字转语音功能,将输入的文字信息通过内部的处理和合成,输出相对应的语音信息。SYN6288模块具有语音合成质量高、输出音质好、使用方便等特点,因此广泛应用于语音播报、语音提示、语音识别、智能家居、智能家电、安防监控等领域。支持多语言:包括中文、英文、日文、韩文等多种语言。

m0_49476241的博客 2万+

ROS进阶——MoveIt!运动学插件IKFAST配置

一、IKFAST简介 IKFAST是一种基于解析算法的运动学插件,可以保证每次求解的一致性。 二、环境配置 安装程序 sudo apt-get install cmake g++ git ipython minizip python-dev python-h5py python-numpy python-scipy qt4-dev-tools 安装依赖库 sudo apt...

偷得浮生半日闲 1万+

3、流程引擎下载安装与部署

camunda有多种使用方式,此处先使用独立平台的方式部署引擎,这种用法适合分布式,微服务化,多语言异构系统的使用方式。

leyoliu的博客 5522
上一篇: Vue大屏项目实战:5种自适应方案横向评测(含代码对比)
下一篇: STM32独立实现CANOpen主机控制:从配置到实战
Python
博客等级 码龄26年 1973粉丝 1567原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值