做机械臂导航时遇到的问题9:用IKFast进行运动学求解(报错的解决办法)

在用moveit进行机械臂的运动学求解时,我们一般选择的是KDL求解器,但KDL求解器求解运动学问题时会有很多缺点,如求解速度慢、精确度低等。今天我们选择用IKFast求解器来代替KDL,提高求解速度。

看考http://docs.ros.org/kinetic/api/moveit_tutorials/html/doc/ikfast_tutorial.html

翻译https://www.ncnynl.com/archives/201610/1046.html

一、MoveIt! IKFast 安装

sudo apt-get install ros-indigo-moveit-ikfast

二、OpenRAVE 安装

sudo apt-get install ros-indigo-openrave

三、创建Collada文件

rosrun collada_urdf urdf_to_collada <myrobot_name>.urdf <myrobot_name>.dae

把<myrobot_name>换成自己的你机器人名称,下句也是一样

rosrun moveit_kinematics round_collada_numbers.py <myrobot_name>.dae <myrobot_name>.rounded.dae 5

四、生成IK解决方案(具体参数一定要参考篇首的官网与翻译介绍)

python `openrave-config --python-dir`/openravepy/_openravepy_/ikfast.py --robot=<myrobot_name>.dae --iktype=transform6d --baselink=1 --eelink=8 --savefile=<ikfast_output_path>

这里的myrobot_name是rounded后的文件:myrobot_name.rounded.dae

--baselink=1 --eelink=8中的1和8根据自己的机械臂参考官网来定义

<ikfast_output_path>是生成一个cpp文件的文件名,我的是savefile=./ikfast06_arm.cpp

五、创建插件

1、创建包含IK插件的包,包名自己定义一个

cd ~/catkin_ws/src
catkin_create_pkg <moveit_ik_plugin_pkg>

2、编译

cd ~/catkin_ws
catkin_make

3、创建插件源码 ,<myrobot_name>是urdf中的机械臂的名字, <planning_group_name> 配置moveit时机械臂的规划组名,我的是arm,<moveit_ik_plugin_pkg>上句生成的包, <ikfast_output_path>,给新生成的cpp文件定义名字与路径,如 /home/xs/ikfast/ikfast61_arm.cpp

rosrun moveit_kinematics create_ikfast_moveit_plugin.py <myrobot_name> <planning_group_name> <moveit_ik_plugin_pkg> <ikfast_output_path>

这步完成后,在src/目录会生成新的源码<myrobot_name>_<planning_group_name>_ikfast_moveit_plugin.cpp文件

4、再次编译,生成插件

cd ~/catkin_ws
catkin_make

此时会报错,解决方法如下

六、报错的解决办法

1、在创建的ik插件的包内的src中的robot6dof_with_eye_arm_ikfast_solver.cpp文件中,搜索isinf,在前面加上std::。


2、在创建的ik插件的包内的src中的robot6dof_with_eye_arm_ikfast_moveit_plugin.cpp文件中,查找lookupparam,将string中的robot名称直接赋值。


3、在创建的ik插件的包内的src中的robot6dof_with_eye_arm_ikfast_moveit_plugin.cpp文件中,将robot_model 的urdf文件直接赋值


4、再次编译,生成插件

cd ~/catkin_ws
catkin_make

这会生成新插件库lib<myrobot_name>_<planning_group_name>_moveit_ikfast_moveit_plugin.so,让MoveIt使用,在catkin_ws中build中可以看见。


5、使用

你可以在当初配置机器人moveit文件时生成的kinematics.yaml文件中,通过改kinematics_solver参数,在KDL和ikfast求解器之间切换

<planning_group_name>:
  kinematics_solver: <myrobot_name>_<planning_group_name>_kinematics/IKFastKinematicsPlugin
-INSTEAD OF-
  kinematics_solver: kdl_kinematics_plugin/KDLKinematicsPlugin
6、打开逆运动学求解文件测试



  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
机械臂的逆运动学问题是指通过给定末端位置和姿态,求解机械臂各个关节的角度。在 MATLAB 中,可以使用 Robotics System Toolbox 来解决机械臂的逆运动学问题。下面是一个简单的 MATLAB 代码示例,演示如何使用 Robotics System Toolbox 求解机械臂运动学问题: ```matlab % 创建机械臂模型 robot = robotics.RigidBodyTree; % 添加机械臂连接点(关节) body1 = robotics.RigidBody('body1'); joint1 = robotics.Joint('joint1', 'revolute'); body1.Joint = joint1; addBody(robot, body1, 'base'); body2 = robotics.RigidBody('body2'); joint2 = robotics.Joint('joint2', 'revolute'); body2.Joint = joint2; addBody(robot, body2, 'body1'); % 设置机械臂末端的目标位置和姿态 target_pose = robotics.Pose([0.1, 0.2, 0.3], quat2rotm([0.1, 0.2, 0.3])); % 创建逆运动学对象 ik = robotics.InverseKinematics('RigidBodyTree', robot); % 配置逆运动学求解器参数 ik.SolverParameters.MaxIterations = 100; ik.SolverParameters.SolutionTolerance = 1e-6; % 求解运动学问题 initial_guess = robot.homeConfiguration; % 设置初始猜测 [config, solutionInfo] = ik('end_effector', target_pose, initial_guess); % 显示求解结果 disp('关节角度:'); disp(config); % 显示求解信息 disp('求解信息:'); disp(solutionInfo); ``` 请注意,上述代码仅演示了如何使用 Robotics System Toolbox 进行机械臂的逆运动学求解。在实际应用中,你可能需要根据你的具体机械臂模型和控制要求进行相应的调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值