Ubuntu18.04-IKFAST的配置

IKFAST官网
ROS进阶MoveIt!运动学插件IKFAST配置
ubuntu安装openrave的简单方法
OpenRAVE Documentation
openrave-installation
reuleaux wiki

一、安装IKFAST步骤

快速配置ikfast

export MYROBOT_NAME="x3plus"
export IKFAST_PRECISION="5"  
export PLANNING_GROUP="arm_group"
export BASE_LINK="0"
export EEF_LINK="6"
export IKFAST_OUTPUT_PATH=`pwd`/"$MYROBOT_NAME"_ikfast.cpp
export MOVEIT_IK_PLUGIN_PKG="$MYROBOT_NAME"_ikfast_plugin 

rosrun xacro xacro --inorder -o "$MYROBOT_NAME".urdf "$MYROBOT_NAME".urdf.xacro
rosrun collada_urdf urdf_to_collada "$MYROBOT_NAME".urdf "$MYROBOT_NAME".dae
cp "$MYROBOT_NAME".dae "$MYROBOT_NAME".backup.dae

openrave-robot.py "$MYROBOT_NAME".dae --info links # 验证BASE_LINK和EEF_LINK是否正确

rosrun moveit_kinematics round_collada_numbers.py "$MYROBOT_NAME".dae "$MYROBOT_NAME".dae "$IKFAST_PRECISION"
python2 `openrave-config --python-dir`/openravepy/_openravepy_/ikfast.py --robot="$MYROBOT_NAME".dae --iktype=transform6d --baselink="$BASE_LINK" --eelink="$EEF_LINK" --savefile="$IKFAST_OUTPUT_PATH"
cd ~/catkin_ws/src
catkin_create_pkg "$MOVEIT_IK_PLUGIN_PKG"    
rosrun moveit_kinematics create_ikfast_moveit_plugin.py "$MYROBOT_NAME" "$PLANNING_GROUP" "$MOVEIT_IK_PLUGIN_PKG" "$BASE_LINK" "$EEF_LINK" "$IKFAST_OUTPUT_PATH"

ur5

export MYROBOT_NAME="ur5"
export PLANNING_GROUP="manipulator"
export BASE_LINK="0"
export EEF_LINK="9"
export IKFAST_PRECISION="5"
export IKFAST_OUTPUT_PATH=`pwd`/"$MYROBOT_NAME"_ikfast.cpp
export MOVEIT_IK_PLUGIN_PKG="$MYROBOT_NAME"_ikfast_plugin 

rosrun xacro xacro --inorder -o "$MYROBOT_NAME".urdf "$MYROBOT_NAME"_joint_limited_robot.urdf.xacro
rosrun collada_urdf urdf_to_collada "$MYROBOT_NAME".urdf "$MYROBOT_NAME".dae
cp "$MYROBOT_NAME".dae "$MYROBOT_NAME".backup.dae

openrave-robot.py "$MYROBOT_NAME".dae --info links # 验证BASE_LINK和EEF_LINK是否正确

rosrun moveit_kinematics round_collada_numbers.py "$MYROBOT_NAME".dae "$MYROBOT_NAME".dae "$IKFAST_PRECISION"
python2 `openrave-config --python-dir`/openravepy/_openravepy_/ikfast.py --robot="$MYROBOT_NAME".dae --iktype=transform6d --baselink="$BASE_LINK" --eelink="$EEF_LINK" --savefile="$IKFAST_OUTPUT_PATH"

cd ~/catkin_ws/src
catkin_create_pkg "$MOVEIT_IK_PLUGIN_PKG"    
rosrun moveit_kinematics create_ikfast_moveit_plugin.py "$MYROBOT_NAME" "$PLANNING_GROUP" "$MOVEIT_IK_PLUGIN_PKG" "$BASE_LINK" "$EEF_LINK" "$IKFAST_OUTPUT_PATH"

1、方式一

git clone https://github.com/crigroup/openrave-installation
cd openrave-installation
./install-dependencies.sh
proxychains ./install-osg.sh
proxychains ./install-fcl.sh
proxychains ./install-openrave.sh

查看openrave-installation中的每个文件发现其实跟前面的步骤差不多,只是对于ubuntu18.04,cmake时有些区别,但因为每个安装文件其实是在调用github下载安装,而github限速太明显,而采用gitee下载则明显快速很多。因此根据第二大节中的安装步骤参考上述的文件做相应更改。若需要下载速度加快,将git clone时github地址改为自己的gitee地址就行。

直接测试

openrave.py --example graspplanning

2、方式二

1、安装程序与依赖库
sudo apt-get install cmake g++ git ipython minizip python-dev python-h5py python-numpy python-scipy qt4-dev-tools libassimp-dev libavcodec-dev libavformat-dev libavformat-dev libboost-all-dev libboost-date-time-dev libbullet-dev libfaac-dev libglew-dev libgsm1-dev liblapack-dev liblog4cxx-dev libmpfr-dev libode-dev libogg-dev libpcrecpp0v5 libpcre3-dev libqhull-dev libqt4-dev libsoqt-dev-common libsoqt4-dev libswscale-dev libswscale-dev libvorbis-dev libx264-dev libxml2-dev libxvidcore-dev

此处安装依赖库时,会出现依赖包libjasper-dev无法安装的问题,解决办法如下:

sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu/ trusty main universe restricted multiverse"
sudo apt update
sudo apt install libjasper1 libjasper-dev
2、安装OpenSceneGraph-3.4

其中将{OSG_COMMIT}替换成1f89e6eb1087add6cd9c743ab07a5bce53b2f480,对于ubuntu14.04的用户,直接使用cmake …就行了,但是对于ubuntu16.04/18.04/20.04的用户,均为cmake -DDESIRED_QT_VERSION=4 …

git clone https://github.com/openscenegraph/OpenSceneGraph.git
cd OpenSceneGraph
git reset --hard {OSG_COMMIT}
mkdir build
cd build
cmake -DDESIRED_QT_VERSION=4 ..
sudo make install_ld_conf
make -j `nproc`
sudo make install
3、安装Flexible Collision Library 0.5.0
git clone https://github.com/flexible-collision-library/fcl
cd fcl
git reset --hard 0.5.0
mkdir build
cd build
cmake ..
make -j `nproc`
sudo make install
4、安装 collada-dom
git clone https://github.com/rdiankov/collada-dom.git
cd collada-dom && mkdir build && cd build
cmake ..
make -j8
sudo make install
5、安装sympy 0.7.1(注意版本,若版本不对会产生错误)

注意是否下载了anaconda,安装前请退出,不然会报错,conda deactivate

pip install --upgrade --user sympy==0.7.1
6、删除mpmath
sudo apt remove python-mpmath
7、安装MoveIt! IKFast
git clone https://github.com/ros-planning/moveit.git

ubuntu系统下安装rapidjson

首先clone源代码:https://github.com/Tencent/rapidjson/
执行 git submodule update --init
创建build目录:mkdir build
进入build执行
cmake ..
make
make test执行测试
make install安装rapidjson到系统中
在CMake 项目使用rapidjson,在 CMakeLists.txt 加入find_package(RapidJSON)即可
8、安装OpenRAVE
git clone --branch latest_stable https://github.com/rdiankov/openrave.git
cd openrave && mkdir build && cd build
cmake .. -DOSG_DIR=/usr/local/
make -j8
sudo make install

添加环境变量 ~/.bashrc

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(openrave-config --python-dir)/openravepy/_openravepy_
export PYTHONPATH=$PYTHONPATH:$(openrave-config --python-dir)

注:添加了环境变量后,使用 Anaconda 环境可能会报出以下错误,解决办法是将 PYTHONPATH 那一行注释,用 openrave 的时候直接在命令行中添加环境变量,使当前终端有效即可。

ImportError: This package should not be accessible on Python 3. Either you are 
trying to run from the python-future src folder or your installation of 
python-future is corrupted.

测试

openrave.py --example hanoi

在这里插入图片描述

附录

在安装OpenRAVE前请根据2.5,2.6和2.7安装sympy 0.7.1,删除mpmath和安装MoveIt! IKFast。然后安装OpenRAVE:

对于ubuntu14.04/16.04/18.04(RAVE_COMMIT=7c5f5e27eec2b2ef10aa63fbc519a998c276f908)

git clone https://github.com/rdiankov/openrave.git

对于ubuntu20.04(RAVE_COMMIT=2024b03554c8dd0e82ec1c48ae1eb6ed37d0aa6e)

git clone -b production https://github.com/rdiankov/openrave.git
cd openrave
git reset --hard {RAVE_COMMIT}
git reset --hard 7c5f5e27eec2b2ef10aa63fbc519a998c276f908
mkdir build
cd build

{RAVE_COMMIT}换成与自己版本对应的值

对于ubuntu14.04/16.04

cmake -DODE_USE_MULTITHREAD=ON -DOSG_DIR=/usr/local/lib64/ ..

对于ubuntu18.04

cmake -DODE_USE_MULTITHREAD=ON -DCMAKE_CXX_STANDARD=11 -DBoost_NO_SYSTEM_PATHS=TRUE -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/boost ..

对于ubuntu20.04

cmake -DODE_USE_MULTITHREAD=ON -DOSG_DIR=/usr/local/lib64/ -DUSE_PYBIND11_PYTHON_BINDINGS:BOOL=TRUE -DBoost_NO_BOOST_CMAKE=1 ..

已经将OpenRAVE配置好了。

二、ur5配置IKFast插件

ikfast,机器人运动学的编译器,在Rosen Diankov OpenRAVE运动规划软件提供,是一个强大的逆运动学求解器。不像大多数的逆运动学求解,ikfast可以求解任意复杂运动链的运动学方程,并产生特定语言的文件(如C++)后供使用。最终的结果是非常稳定的解决方案,在最新的处理器能以5微秒的速度完成运算。

安装

sudo apt install ros-melodic-joint-trajectory-controller ros-melodic-collada-urdf ros-melodic-effort-controllers ros-melodic-collada-urdf

克隆UR机械臂源码

git clone https://ghproxy.com/https://github.com/ros-industrial/universal_robot

设置机器人名字

export MYROBOT_NAME="ur5"   

1、将xacro文件转为urdf文件

这里的xacro为需要转化的机器人模型的描述文件,urdf是新生成的.urdf文件的名称。

rosrun xacro xacro --inorder -o "$MYROBOT_NAME".urdf "$MYROBOT_NAME".urdf.xacro

用法

xacro [options] <input>
  -h, --help         # 帮助文档
  -o FILE            # 文件写入输出到文件,而不是标准输出
  -i, --inorder      # 按读取顺序使用处理[默认]
  --check-order      # 检查订单检查文档以进行订单处理
  --deps             # 打印文件依赖项
  --xacro-ns         # xacro N要求xacro标记使用xacro命名空间前缀
  -q                 # 安静操作抑制警告
  -v                 # 增加冗长
  --verbosity=level  # 详细程度=级别设置详细程度级别
                     0: # 安静,正在抑制警告
                     1: # 默认值,显示警告和错误位置
                     2: # 显示堆栈跟踪
                     3: # 在顶层记录属性定义和用法
                     4: # 记录所有级别的属性定义和使用情况

2、将urdf转为dae文件

rosrun collada_urdf urdf_to_collada "$MYROBOT_NAME".urdf "$MYROBOT_NAME".dae

3、设置机器人精度

设置的精度会影响IKFAST的生成,设置过小会导致无法生成或求解精度过低,过大也会导致无法生成或者求解变慢,可以根据需求调整精度。这里设置精度为小数点后5位,并备份生成的dae文件,方便以后调整使用。

cp "$MYROBOT_NAME".dae "$MYROBOT_NAME".backup.dae
export IKFAST_PRECISION="5"  
rosrun moveit_kinematics round_collada_numbers.py "$MYROBOT_NAME".dae "$MYROBOT_NAME".dae "$IKFAST_PRECISION"

4、查看关节数据

openrave-robot.py "$MYROBOT_NAME".dae --info links

在这里插入图片描述

5、查看关节模型

openrave "$MYROBOT_NAME".dae

6、生成IKFAST文件

设置运动规划组(与Setup Assistant配置出来的group要一致,manipulator为例)

export PLANNING_GROUP="manipulator"

设置运动规划的关节组,以上面的模型关节数据为基础设置

export BASE_LINK="0"
export EEF_LINK="9"

若关节数量大于6需设置一自由关节,若无则无需设置

export FREE_INDEX="1"

设置IKFAST输出路径

export IKFAST_OUTPUT_PATH=`pwd`/ikfast_"$MYROBOT_NAME".cpp

这里的dae是之前第二步转化你得到的名字,baselink和eelink的值根据你之前查看的关节数据以及自己在setup assistant里面配置Planning Group里面的设置。由于我采用的无论是UR3还是UR5都是6DOF,所以直接默认transform6d就行,最后的savefile是你想保存的路径和名称。

  • 6轴
python2 `openrave-config --python-dir`/openravepy/_openravepy_/ikfast.py --robot="$MYROBOT_NAME".dae --iktype=transform6d --baselink="$BASE_LINK" --eelink="$EEF_LINK" --savefile="$IKFAST_OUTPUT_PATH"
  • 7轴
python2 `openrave-config --python-dir`/openravepy/_openravepy_/ikfast.py --robot="$MYROBOT_NAME".dae --iktype=transform6d --baselink="$BASE_LINK" --eelink="$EEF_LINK" --freeindex="$FREE_INDEX" --savefile="$IKFAST_OUTPUT_PATH"

在这里插入图片描述

7、测试IKFAST求逆解

此处需要将【ikfast.h】和【ikfast_"$MYROBOT_NAME".cpp】放在同一个文件夹下。生成可执行文件。

g++ ikfast_"$MYROBOT_NAME".cpp -o ikfast_"$MYROBOT_NAME" -llapack -std=c++11

由于目前网上只有UR5的配置作参考,为了验证成功配置,因此还用UR5来验证,成功得到了8组逆解

./ikfast_ur5 0.04071115 -0.99870914 0.03037599 0.4720009 -0.99874455 -0.04156303 -0.02796067 0.12648243 0.0291871 -0.02919955 -0.99914742 0.43451169

在这里插入图片描述

8、生成IKFAST插件功能包

export MOVEIT_IK_PLUGIN_PKG="$MYROBOT_NAME"_ikfast_"$PLANNING_GROUP"_plugin 
cd ~/catkin_ws/src
catkin_create_pkg "$MOVEIT_IK_PLUGIN_PKG"    
rosrun moveit_kinematics create_ikfast_moveit_plugin.py "$MYROBOT_NAME" "$PLANNING_GROUP" "$MOVEIT_IK_PLUGIN_PKG" "$BASE_LINK" "$EEF_LINK" "$IKFAST_OUTPUT_PATH"

用法:

create_ikfast_moveit_plugin.py [-h] [--search_mode SEARCH_MODE]
                               [--srdf_filename SRDF_FILENAME]
                               [--robot_name_in_srdf ROBOT_NAME_IN_SRDF]
                               [--moveit_config_pkg MOVEIT_CONFIG_PKG]
                               robot_name planning_group_name
                               ikfast_plugin_pkg base_link_name
                               eef_link_name ikfast_output_path
- 位置参数:
  robot_name            # 你的机器人的名字
  planning_group_name   # 生成IKFast解决方案的计划组的名称
  ikfast_plugin_pkg     # 要创建/更新的IKFast运动学插件
  base_link_name        # 生成IKFast解决方案时使用的基本链接的名称
  eef_link_name         # 生成IKFast解决方案时使用的末端效应器链接的名称
  ikfast_output_path    # 指向ikfast输出的分析IK解决方案的完整路径
- 可选参数:
  -h, --help            # 帮助
  --search_mode         # 用于为超过6个自由度的机器人解算IK的搜索模式
  --srdf_filename       # 机器人的名称。默认设置为<robot_name>。srdf
  --robot_name_in_srdf  # 在srdf中定义的机器人名称。默认为<robot_name>
  --moveit_config_pkg   # 机器人moveit_config 的配置包。默认为<robot_name>_moveit_config    
  • 自动生成

按照步骤catkin_make就行,之后可以查看自己的kinematics.yaml,发现已经变成了ikfast。

在这里插入图片描述

然后可以roslaunch自己相应的config包里面demo.launch来对比改变前后的区别。

  • 手动修改

    cd到"$MYROBOT_NAME"_moveit_config功能包的config文件目录下,修改该目录下的kinematics.yaml文件或者采用下面方式找到该文件。

rosed "$MYROBOT_NAME"_moveit_config kinematics.yaml

修改内容如下

<planning_group>:
  kinematics_solver: <myrobot_name>_<planning_group>_kinematics/IKFastKinematicsPlugin
-INSTEAD OF-
  kinematics_solver: kdl_kinematics_plugin/KDLKinematicsPlugin
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值