1将机械臂移动到等待位置
setNamedTarget()
将当前关节值设置为rememberJointValues()之前记住的值,或者,如果未找到,则将SRDF中指定的名称作为组状态指定。
setPlanningTime();
指定计划时使用的最长时间。
2套抓手
sendGoal(grasp_goal);
向ActionServer发送目标,并注册回调。
waitForResult()
等待ActionServer连接到此客户端。
通常,动作服务器和客户端可能需要一秒钟来协商连接,因此,冒着丢掉前几个目标的风险此调用允许用户等待,直到与服务器的网络连接进行协商注意:。在单线程ROS应用程序或任何未对服务客户端的回调队列进行服务的应用程序中使用此调用将不起作用。如果没有为队列提供服务的单独线程或多线程微调器,则客户端无法判断服务器是否已启动,因为它无法接收状态消息。
3检测框选择点detect_box_pick
target_recognition_client.call(srv)当服务调用成功时
4 create_pick_moves
poseMsgToTF
通过帧ID获得两帧之间的变换
笛卡尔运动规划movemoveit :: planning_interface :: MoveGroupInterface move_group(CONFIG_。GROUP_NAME);
move_group.setPlannerId(PLANNER_ID);//PLANNER_ID 在demo_application 中初始化,指出了使用的规划器
使用MoveGroupInterface :: move()方法将机器人移动到目标
生成半约束轨迹
Python
3 规划路径
AxialSymmetricPt :: getClosestJointPose()的使用,以获得最接近任意关节姿势的机器人的关节值。此外,此步骤允许我们为开始和结束选择单个关节姿势,而不是多个有效关节配置。
调用DensePlanner :: planPath()方法以计算运动计划。
规划成功时,使用DensePlanner :: getPath()方法从计划程序中检索路径并将其保存到output_path变量中。planner_.getPath(output_path);
4 运行机器人路径
将笛卡尔路径转换为MoveIt!轨迹然后将其发送给机器人
fromDescartesToMoveitTrajectory
move_group。setJointValueTarget(start_pose);
move_group。setPlanningTime(10.0f);
move_group。move();
高级笛卡尔运动规划
使用笛卡尔的高级特征来解决由机器人保持的零件的复杂路径,该零件由固定工具处理。
本教程将向您介绍笛卡儿,这是一种“笛卡尔”运动规划器,用于沿着某个过程路径移动机器人。它只是解决此类问题的众多方法之一,但它有一些简洁的属性:
它具有确定性和全局最优性(针对特定的搜索分辨率)。
它可以搜索问题中的多余*度(比如你有7个机器人关节,或者你有一个工具的Ž轴旋转无关紧要的过程)