ROS IkFast运动学插件
ikFast运动学插件生成
- 环境
- 安装ROS依赖
- 安装openrave依赖
- 下载依赖代码
- 工具使用
- urdf转dae
- 设置精度
- 查看模型关节
- 生成代码
- 代码测试
- 生成插件
环境
- ubuntu 20.04
- ROS版本:noetic
安装ROS依赖
sudo apt-get install -y ros-noetic-desktop ros-noetic-collada-urdf ros-noetic-movit*
安装openrave依赖
sudo apt-get install -y --no-install-recommends build-essential cmake doxygen \g++ git octave python-dev python-setuptools wget mlocate qt5-default minizip \ann-tools libann-dev libassimp-dev libavcodec-dev libavformat-dev libeigen3-dev libfaac-dev \libflann-dev libfreetype6-dev liblapack-dev libglew-dev libgsm1-dev \libmpfi-dev libmpfr-dev liboctave-dev libode-dev libogg-dev libpcre3-dev \libqhull-dev libswscale-dev libtinyxml-dev libvorbis-dev libx264-dev \libxml2-dev libxvidcore-dev libbz2-dev libsoqt520-dev libccd-dev \libcollada-dom2.4-dp-dev liblog4cxx-dev libminizip-dev octomap-tools \libboost-all-dev libboost-python-dev
pip install ipython h5py numpy scipy wheel pyopengl==3.1.5 -i https://mirrors.aliyun.com/pypi/simple/
下载依赖代码
- 下载依赖代码
根据提供的编译脚本直接编译即可
可参考:https://github.com/crigroup/openrave-installation
工具使用
参考视频
注意:以下部分的操作均需要在ROS工程目录下,否则会报错
urdf转dae
- rosrun collada_urdf urdf_to_collada urdf名 dae名
rosrun collada_urdf urdf_to_collada robot.urdf robot.dae
设置精度
- rosrun moveit_kinematics round_collada_numbers.py dae名 生成dae名 精度值
rosrun moveit_kinematics round_collada_numbers.py robot.dae robot.dae 2
查看模型关节
openrave-robot.py dae名 --info links
openrave dae名
生成代码
python /usr/local/lib/python2.7/dist-packages/openravepy/_openravepy_/ikfast.py --robot=robot.dae \--iktype=Transform6D --baselink=0 --eelink=6 --savefile=./ikfast.cpp --lang=cpp
其中:
- –baselink --eelink的值中 openrave-robot.py dae名 --info links 关节的值
代码测试
- 拷贝openravepy的头文件 ikfast.h 到当前目录下
cp /usr/local/lib/python2.7/dist-packages/openravepy/_openravepy_/ikfast.h ./
- 编译cpp
g++ ikfast.cpp -llapack -std=c++11 -o ikfast
– 编译错误问题解决
ikfast.cpp:146155:15: error: ‘x30365’ was not declared in this scope; did you mean ‘x30369’?
原因:在生成代码时会加 {}导致变量的作用域有问题
修改:在变量定义的地方把外部 {}删除。可通过查询变量的位置,进行删除,可参考报错范围,并不一定所有的地方都需要修改。如果有更好的办法,欢迎分享。
生成插件
- catkin_create_pkg 功能包 # 创建功能包
catkin_create_pkg ikfast_plugin
- rosrun moveit_kinematics create_ikfast_moveit_plugin.py 机器人名1 规划组名2 功能包3 规划起点 规划末端 ikfast.cpp --moveit_config_pkg=规划配置包名称4
rosrun moveit_kinematics create_ikfast_moveit_plugin.py myrobot arm ikfast_plugin base_link tool \ikfast.cpp --moveit_config_pkg=myrobot_srdf
- 编译生成库
catkin_make
机器人名: urdf文件中 robot节点的 name字段的值 ↩︎
规划组名称:srdf 规划组group 节点的name 字段的值 ↩︎
功能包:生成的代码在该功能包下 ↩︎
规划配置包名称:srdf规划的工程包,自动会在工程包下找config/kinematics.yaml 也不修改规划组的关联算法 ↩︎