六自由度机械臂逆运动学解析解原理-备忘

六自由度机械臂原理图如下


       c      d         e
       o------||------- o
     /                  |
   /                    == f
  o b                   |     (|rz /ry
  |                     p       --rx)
  == a                ( px py pz)
  |
 ///

其中a b c d e f是六个绕轴选择关节;
///是固定基座,符号o和||和==都表示的旋转轴;
p为连接在轴f上的末端执行器的世界空间坐标系,可能是激光头,夹爪,铣刀头,喷头等等,它有平移translate(px,py,pz)和旋转rotate(rx ry rz三个坐标系)两个部分,俗称位姿;
杆a-b,b-c,c-d,d-e,e-f,f-p为固定长度;
当p已知,实际上po方向为rz,则可以计算出e点f点位置,从而俯视视角,a的转角就能确定;
由于b-c-e实际是在一个竖直平面上的,可以计算出c的位置(也有可能无解,例如e点太远导致b-c-e怎么转都到达不了),世界坐标系下每个关节的位置都确定了,这样a b c d e f的转角都能求出来(也有可能求出的转角超过每个转角的范围,也是无解的),这就是六轴机械臂逆运动学空间解析几何解法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
7自由度机械臂逆运动学解析非常复杂,需要用到复杂的数学方法和算法,但是可以通过一些库和工具来简化决过程。 以下是一个使用 ROS 中的 MoveIt! 库决 7 自由度机械臂逆运动学的示例代码: ```c++ #include <ros/ros.h> #include <moveit/move_group_interface/move_group_interface.h> #include <moveit/planning_scene_interface/planning_scene_interface.h> #include <moveit_msgs/DisplayTrajectory.h> #include <moveit_msgs/RobotTrajectory.h> #include <moveit_msgs/RobotState.h> #include <moveit_msgs/Constraints.h> #include <moveit_msgs/JointConstraint.h> #include <moveit_msgs/MoveGroupActionResult.h> #include <moveit_msgs/PlanningScene.h> #include <moveit/kinematics_plugin_loader/kinematics_plugin_loader.h> #include <moveit/robot_state/conversions.h> #include <moveit/robot_trajectory/robot_trajectory.h> int main(int argc, char** argv) { ros::init(argc, argv, "moveit_ik_demo"); ros::NodeHandle node_handle; ros::AsyncSpinner spinner(1); spinner.start(); static const std::string PLANNING_GROUP = "arm"; moveit::planning_interface::MoveGroupInterface move_group(PLANNING_GROUP); moveit::planning_interface::PlanningSceneInterface planning_scene_interface; const robot_state::JointModelGroup* joint_model_group = move_group.getCurrentState()->getJointModelGroup(PLANNING_GROUP); // 设置目标位置 geometry_msgs::Pose target_pose; target_pose.orientation.w = 1.0; target_pose.position.x = 0.4; target_pose.position.y = -0.2; target_pose.position.z = 0.4; move_group.setPoseTarget(target_pose); // 执行规划和移动 moveit::planning_interface::MoveGroupInterface::Plan my_plan; bool success = (move_group.plan(my_plan) == moveit::planning_interface::MoveItErrorCode::SUCCESS); ROS_INFO("Visualizing plan 1 (pose goal) %s", success ? "" : "FAILED"); move_group.move(); ros::shutdown(); return 0; } ``` 该示例代码中,首先设置了机械臂的规划组和目标位置,然后调用 MoveIt! 库中的 `plan()` 方法进行运动规划,最后调用 `move()` 方法执行运动。这样,就可以实现机械臂的自动逆运动学解析

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值