了解IKFAST(OpenRAVE官网)
生成前注意事项!!!
这篇文章初衷是怕自己以后忘了生成的操作,所以代码不基于项目,即 不可粘贴即用,仅提及包功能及函数使用方法,需要对ROS有一定了解,时间紧张,不好意思
由于配置环境会下载很多库,如果失败后续可能会用不到并且占用空间,因此强烈建议配置前设置系统快照,便于退回初始状态
生成方法一:
须先安装openrave环境,因为多年没人维护,配置非常困难,下面大佬通过脚本配置环境,但对我个人无效,可参考
方法就按readme里依次执行四个脚本,注意版本支持
生成方法二:
如果方法一不成功,试试鱼香ROS 鱼哥的DOCKER镜像
可能有地方没抄对,总之值得参考,第三个方法也是结合这一方法
生成方法三:
这个方法我摸索很多次成功了,感谢上面鱼香ROS中鱼哥的镜像及评论区中乐于助人的大佬提供的命令及网址及工具
第一步:安装DOCKER
wget http://fishros.com/install -O fishros && . fishros
第二步:在urdf文件所在工作空间运行DOCKER镜像
-
如果有sw模型,但没对应urdf文件:参考以下视频导出urdfSolidWorks模型导出urdf (古月居老师)_哔哩哔哩_bilibili
-
如果已有urdf文件,退回到urdf的工作空间,执行以下代码
xhost + && sudo docker run -it --rm -v /tmp/.X11-unix:/tmp/.X11-unix --device /dev/snd -e DISPLAY=unix$DISPLAY -v `pwd`:`pwd` -w `pwd` fishros2/openrave
其中--rm选项是指在容器退出后自动删除,防止文件堆积,按需求删留,其他默认即可
第三步:在DOCKER中安装依赖
依次执行以下命令,来安装rosdepc,一定要给sudo权限,在sudo apt update时有概率失败,多次尝试即可(还不行就换个时间段,先干别的)
sudo apt update
sudo apt install python3-pip
sudo pip3 install elirobots transforms3d pytest rosdepc
sudo rosdepc init
sudo rosdepc update
rosdepc更新提示成功后,进行依赖检查
rosdepc install --from-path src --ignore-src -y -r
此时会列出编译此工作空间需要但目前没有的依赖,依次复制所有依赖包,以空格间隔依次加在下面命令之后
sudo apt-get install
安装成功后再次检查依赖,会发现依赖已全部安装,可以进行下一步
rosdepc install --from-path src --ignore-src -y -r
第四步:编译工作空间
执行以下命令,编译工作空间,如果提示缺少依赖包(撑死一两个),安装后重新编译即可
catkin_make
编译成功后,source环境
source devel/setup.bash
第五步:生成机械臂dae描述文件
在这个DOCKER镜像的终端中cd到urdf所在文件夹,可通过配合ls命令实现,也可参照图形化文件夹
在目标urdf所在文件夹中执行以下命令,xxx为你的urdf文件名称,yyy为你要生成的dae文件名称
rosrun collada_urdf urdf_to_collada xxx.urdf yyy.dae
设置dae文件的精度,建议设5或以上,表示小数点后4位精度,我设3在后续生成cpp代码时会失败
rosrun moveit_kinematics round_collada_numbers.py yyy.dae yyy.dae 5
第六步:生成ikfast的cpp文件
现在可以在终端中输入exit退出DOCKER镜像了,同时复制设置好精度的dae文件到电脑本机上(在虚拟机的浏览器跑cpp也行),打开网址
IKFast Generatorhttps://www.hamzamerzic.info/ikfast_generator/
导入dae文件上传,会出现下图link索引及其父link的列表,如果没有或出错则需要检查urdf文件与dae文件的正确性
分别输入运动链的基座link和末端执行器link,列出自由link的索引(在求解时不需要考虑到的link),然后选择solver方法,根据调整自由索引之后的自由度来选,具体定义参考官网,随后点击生成
第七步:生成ikfast插件
在urdf文件所在的工作空间内的src文件夹下创建一文件夹,名称自拟,能知道是ik插件包即可,比如ikfast_plugin
在生成前需要完成两件事:
- 把生成的cpp文件放到这个文件夹里
- 下载cpp所需头文件ikfast.h,同样放到文件夹里,头文件下载网址:ikfast.h
使用moveit的工具生成插件,其中:
- robot_name是机器人的名称,以urdf文件中定义为准
- arm为规划组的名称,以srdf文件中定义为准
- ikfast_for_urdf为一会生成文件夹的名称,随意定义,能区分出来就好,反正会在ikfast_plugin里
- base_link为机器人运动链的起始link,以srdf文件中定义为准
- link为机器人运动链的结束link,以srdf文件中定义为准
- ikfast_create_code.cpp为你生成cpp文件的名字,注意.cpp和其.h文件一定要在当前文件夹
rosrun moveit_kinematics create_ikfast_moveit_plugin.py robot_name arm ikfast_for_urdf "base_link" "link6" ikfast_create_code.cpp
第八步:配置ikfast插件
进入生成的ikfast_for_urdf(生成插件时自己定义的)文件夹中,进入 xxx_xxx_arm_moveit_ikfast_plugin_description.xml 文件,复制这个插件名
打开之前使用moveit助手配置好的功能包,进入config文件夹,打开kinematics.yaml文件
替换插件名
第九步:生成ikfast.cpp可执行文件 (可忽略)
进入.cpp与.h所在文件夹,执行以下命令:
- ikfast_create_code.cpp为你生成cpp文件的名字,注意.cpp和其.h文件一定要在当前文件夹
- -o后面的ikbest为欲生成的可执行文件名称,我命名为ikbest
g++ ikfast_creat_code.cpp -o ikbest -llapack -std=c++11
成功后,运行可执行文件,并给出3x3的旋转矩阵和一个3x1的平移矩阵,以空格间隔,运行后即可求逆解,即各个关节的角度,每个机器人工作空间不一样,输入参数按自己的来
./ikfast 1 0 0 0.04 0 1 0 0.03 0 0 1 4.2
最后:对比 kdl数值法 与 ikfast解析法 在笛卡尔空间画圆的速度
kdl求解器:
ikfast求解器: