实验编号: 上游充通大 实验指导书 实验项目: 机械臂规划Move it 所属课程: R0S机器人操作系统基础与实战 课程代码: 面向专业: 机电专业 课程负责人: 朱笑笑 年月 日 -2-
- 2 -
实验目的 让学生熟悉机械臂运动规划的概念,并能够利用Moveit的工具为的机器人模 型生成Moveit的配置文件,并进行规划实验。 二、 实验内容 1. Moveit的安装 2. Moveit模型的配置 3. 在rviz中利用Moveit配置包进行运动规划 三、 实验过程或其他示意图 1. Moveit的安装 安装Moveit非常方便,只要一行代码。 sudo apt-get install ros-kinetic-moveit-full 2. Moveit模型的配置 这里我们用一个已有的机器人模型,来进行Moveit实验,该模型如下所示, 是一个7自由度的机械臂。 hPet。 2.1开启Setup Assistant tool -3
- 3 - 一、 实验目的 让学生熟悉机械臂运动规划的概念,并能够利用Moveit的工具为的机器人模 型生成Moveit的配置文件,并进行规划实验。 二、 实验内容 1. Moveit的安装 2. Moveit模型的配置 3. 在rviz中利用Moveit 配置包进行运动规划 三、 实验过程或其他示意图 1. Moveit的安装 安装Moveit非常方便,只要一行代码。 $ sudo apt-get install ros-kinetic-moveit-full 2. Moveit模型的配置 这里我们用一个已有的机器人模型,来进行 Moveit 实验,该模型如下所示, 是一个 7 自由度的机械臂。 2.1 开启Setup Assistant tool
运行一下代码启动Setup Assistant tool roslaunch moveit setup_assistant setup_assistant.launch Moveit Setup Assistant Movelt Setup Assistant Self.Colbsions the Movelt s Asistanti ThesDmmth file and OMPL plar configurat tion involves creating launch fies for move groupsOM Virtual Joints er,planning contexts and the planning warehouse Pianning Groups >Movelt! Robot Poses End Elfectors Choose mode: All settings for Movelt are stored in a Moveit configuration package.Here you have the option to create a new Contiguration Fles configuration package,or load an existing one.Note:any changes to a Movelt configuration package outside this setup assistant will likely be overwritten by this tool. ::ROS ●● Assistant Load a URDF or COLLADA Robot Model Soecify the location of ao existina unlversal Robot Description Format or COLLADA File for vour robot.The robot model will be loaded to the parameter server for you Browse Load Files 点击Create New Movelt:Configuration Package。 这时将会出现一个新的窗口询问机器人URDF模型的地址,我们可以设置到 mastering_ros_robot_description_pkg/urdf/seven_dof_arm.xacro.。这里我们用的是 xacro,实际上软件会自动将其转换为URDF文件。 如果模型载入成功将出现一下画面。 -4
- 4 - 运行一下代码启动Setup Assistant tool $ roslaunch moveit_setup_assistant setup_assistant.launch 点击Create New MoveIt! Configuration Package。 这时将会出现一个新的窗口询问机器人URDF模型的地址,我们可以设置到 mastering_ros_robot_description_pkg/urdf/ seven_dof_arm.xacro。这里我们用的是 xacro,实际上软件会自动将其转换为URDF文件。 如果模型载入成功将出现一下画面
Movelt Setup Assistant Movelt Setup Assistant Welcome to the Movelt Setup Assistant!These tools will assist you in creating a Self-Collisions Movelt configuration package that is required to run Movelt.This includes generating a Semantic Robot Description Format(SRDF)file,kinematics configuration file and OMPL planning configuration file.it also involves creating Virtual Joints launch files for move groups,OMPL planner,planning contexts and the planning Planning Groups Robot Poses Movelt! End Effectors Passive Joints Choose mode: All settings for Movelt are stored in a Moveit configuration package.Here you Configuration Fdes have the option to create a new configuration package,or load an existing one. Note:any changes to a Movelt configuration package outside this setup assistant will likely be overwritten by this tool Create New moveit Configuration Package Configuration Package Load a URDF or COLLADA Robot Model Specify the location of an existing Universal Robot Description Format or COLLADA File for your robot The robot model will be loaded to the parameter server for you. nastering ros robot description pkg/urdf/seven_dof arm.xacro Browse Success!Use the left navigation pane to continue. 00% Load Files 2.2 生成自碰撞矩阵 在这一步,Moveiti可以自动去搜索模型中Link,并让你选择哪两个之间是要 做碰撞检测。一般情况下需要把邻接的Lik取消检测,否则会出现问题。 Movelt Setup Assistant Start Optimize Self-Collision Checking Sef-Collisons The Defau on Matrix Generator will search for pairs of links on the robot that cking,decreas planning. en the adi nt to Virtual Joints ron the kinematic chain.Sa mpling density specifies how many random robot positions to check for self collision.Higher densities require more computation time. Planning Groups Robot Poses Sampling Density:Low High 10000 End Efeclors Regenerate Default Collision Matrix Link A Disabled Reason To Disable Passive Joints base_link bottom_link Adjacent Links Configuration Fles 2 base_link elbow_roll_link Never in Collision 3 base_link grasping_frame Never in Collision 4 base link gripper_finger_link1 Never in Collision s base_link gripper_Finger_link2 Never in Collision 6 base_link gripper_roll_link Never in Collision 7 base_link shoulder_pan_link Adjacent Links 8 base_link wrist pitch_link Never in Collision 9 base_link wrist_roll_link Never in Collision 10 bottom_link elbow_roll_link Never in Collision Show Non-Disabled Link Pairs Min.colllslons for “always-colliding pairs:95%日 -5-
- 5 - 2.2 生成自碰撞矩阵 在这一步,Moveit可以自动去搜索模型中Link,并让你选择哪两个之间是要 做碰撞检测。一般情况下需要把邻接的Link取消检测,否则会出现问题
采样密度是检查自我碰撞的随机位置的数量。如果密度大,计算将会很高, 但会自我碰撞会少一些。默认值是10,000。我们可以看到禁用的链接对 按下Regenerate Default Collision Matrix按钮;这将需要一个几秒钟来 列出禁用的链接对。 2.3添加虚拟关节 虚拟关节将机器人连接到世界。静态不是强制性的机器人不动。我们需要 虚拟关节时的基准位置的手臂是不固定的。例如,如果机器人手臂固定在 移动机器人上,我们应该定义一个关于odom框架的虚拟联合。 在本次实验中我们不设置虚拟关节 2.4添加规划组 一个规划组大致上是一个机器人手臂中的一组关节/链接它们一起规划以达 到一个链接或目标的目标位置效应。我们必须建立两个规划小组,一个是 机械臂组,一个是抓手组。 Planning Groups gastngpoepfocpiobotnrdompateoioedoa,iakeoriomtooatmn Edit Planning Group'arm' Knematic Solven kdl kinematics pluginy/DLinematicsPlugin nSearch feanlution: 0.00s E on.Search Timeout (cect 0.0s t dndis Delete Croup Smve Cencel 点击添加组按钮并添加相应的组。在这里,我们给组名称作为am,而运动求解器作为 kdl kinematics plugin/KDLKinematicsPlugin,这是默认的数值IK解决与MoveIt.我们 可以保留其他参数作为默认值。 在arm组里,首先我们要添加一个运动链。我们必须补充base link作为 grasping_.frame的第一个链接。 添加一个名为gripperf的组,我们不需要运动求解器为夹子组。在这个组里 面,我们可以添加关节和链接夹子。下面显示这些设置: -6-
- 6 - 采样密度是检查自我碰撞的随机位置的数量。如果密度大,计算将会很高, 但会自我碰撞会少一些。 默认值是10,000。 我们可以看到禁用的链接对 按下Regenerate Default Collision Matrix按钮; 这将需要一个几秒钟来 列出禁用的链接对。 2.3 添加虚拟关节 虚拟关节将机器人连接到世界。 静态不是强制性的机器人不动。 我们需要 虚拟关节时的基准位置的手臂是不固定的。 例如,如果机器人手臂固定在 移动机器人上,我们应该定义一个关于odom框架的虚拟联合。 在本次实验中我们不设置虚拟关节 2.4 添加规划组 一个规划组大致上是一个机器人手臂中的一组关节/链接它们一起规划以达 到一个链接或目标的目标位置效应。 我们必须建立两个规划小组,一个是 机械臂组,一个是抓手组。 点击添加组按钮并添加相应的组。在这里,我们给组名称作为arm,而运动求解器作为 kdl_kinematics_plugin / KDLKinematicsPlugin,这是默认的数值IK解决与MoveIt !. 我们 可以保留其他参数作为默认值。 在arm组里,首先我们要添加一个运动链。 我们必须补充base_link作为 grasping_frame的第一个链接。 添加一个名为gripper的组,我们不需要运动求解器为夹子组。 在这个组里 面,我们可以添加关节和链接夹子。 下面显示这些设置:
Movelt Setup Assistant Start Planning Groups Ser-Collisions e2prha2g8eorourobotasedoaetolecdonskeoletoas Virtual Joints Current Groups arm Plannmg Groups joints Links Chain Robot Poses base link>grasping frame Subgroups Passive Joints finger_joint1-Prismatic nger_joint2.Prismatic Configuration Fles Links ripper_finger_link1 gripper_finger_link2 Chain Subgroups Expand All Collapse All Delete Selected Edit Selected Add Group 2.5 添加机器人位姿 在这一步中,我们可以在机器人配置中添加一些固定的姿势。例如,我们可 以指定一个home位置或一个拾取/放置位置这一步。优点是在用MoveItAPI 编程时!,我们可以直接调用这些姿势,也称为组状态。这有许多应用程 序在拾取和放置和抓取操作。机器人可以切换到固定的姿势没有任何麻烦。 2.6设置机器人末端执行器 >在这一步中,我们命名机器人末端执行器并分配末端执行器组,父链接和 父组。 >我们可以添加任意数量的末端执行器到这个机器人。在我们的情况下, 这是一个抓取器设计用于拾取和放置操作。 >单击添加末端效应器按钮,并将末端效应器命名为robot eef,作为我们 已经创建的抓手的计划组,父母链接为grasping frame,父母组为arm。 -7-
- 7 - 2.5 添加机器人位姿 在这一步中,我们可以在机器人配置中添加一些固定的姿势。例如,我们可 以指定一个home位置或一个拾取/放置位置这一步。 优点是在用MoveItAPI 编程时! ,我们可以直接调用这些姿势,也称为组状态。 这有许多应用程 序在拾取和放置和抓取操作。机器人可以切换到固定的姿势没有任何麻烦。 2.6 设置机器人末端执行器 在这一步中,我们命名机器人末端执行器并分配末端执行器组,父链接和 父组。 我们可以添加任意数量的末端执行器到这个机器人。 在我们的情况下, 这是一个抓取器设计用于拾取和放置操作。 单击添加末端效应器按钮,并将末端效应器命名为robot_eef,作为我们 已经创建的抓手的计划组,父母链接为grasping_frame,父母组为arm
Movelt Setup Assistant End Effectors Self-Collisions Setup grippers and other end your robot End Effector Name Group Name Parent Link Parent Group Virtual Joints robot eef gripper grasping_frame arm Planning Groups Robot Poses End ERecots Passive Joints Configuration Fies Edit Selected Delete Selected Add End Effector 2.7 添加被动关节 在这个步骤中,我们可以指定机器人中的被动关节。被动关节意味着接头 没有任何执行器。脚轮是其中之一被动关节的例子。策划者在此期间将忽 略这些关节运动计划。 2.8 生成配置文件 >我们差不多完成了!我们正处于最后阶段,那就是生成配置文件。在这 一步中,该工具将生成一个配置包其中包含接口MoveIt!所需的文件。 >单击“浏览”按钮找到保存配置文件的文件夹这将由“安装助理”工具生 成。在这里我们可以看到文件在名为seven dof configt的文件夹内生 成。您可以添加_config或generatedl以及配置的机器人名称包。 >点击Generate Package:按钮,它将生成文件到给定文件夹。 >如果过程成功,我们可以点击退出设置助理,这将会退出我们的工具。 >以下是生成过程的屏幕截图: -8-
- 8 - 2.7 添加被动关节 在这个步骤中,我们可以指定机器人中的被动关节。 被动关节意味着接头 没有任何执行器。 脚轮是其中之一被动关节的例子。 策划者在此期间将忽 略这些关节运动计划。 2.8 生成配置文件 我们差不多完成了! 我们正处于最后阶段,那就是生成配置文件。 在这 一步中,该工具将生成一个配置包其中包含接口MoveIt!所需的文件。 单击“浏览”按钮找到保存配置文件的文件夹这将由“安装助理”工具生 成。 在这里我们可以看到文件在名为seven_dof_config的文件夹内生 成。 您可以添加_config或_generated以及配置的机器人名称包。 点击Generate Package按钮,它将生成文件到给定文件夹。 如果过程成功,我们可以点击退出设置助理,这将会退出我们的工具。 以下是生成过程的屏幕截图:
Movelt Setup Assistant Start Generate Configuration Files Self-Colisions changes to them.Files in orange have been automatically detected as changed. Virtual Joints Configuration Package Save Path Specify the desired directory for the Moveit configuration package to be generated. Planning Groups Overwriting an existing configuration package directory is acceptable.Example: /u/robot/ros/pr2_moveit_config Robol Poses /home/lentin/seven_dof_arm_ws/src/seven_dof_arm_config Browse End Effectors Files to be generated:(checked) ☑package.xml Defines a ROS package Passive Joints CMakeLists.txt config/ Configuration Fles config/seven_dof_arm.srdf config/ompl_planning.yaml config/kinematics.yaml config/joint_limits.yaml config/fake controllers.yaml launch/ launch/move_group.launch launch/planning_context.launch launch/moveit_rviz.launch launch/ompl planning pipeline.launch.xml launch/planning_pipeline.launch.xml Generate Package Exit Setup Assistant 生成MoveIt)后!配置包,我们可以把它复制到我们的catkin.工作区并使用 catkin make命令构建它。在下一节中,我们将要使用这个包。 3. 在rviz中利用Moveit配置包进行运动规划 MoveIt!为RViz提供了一个插件,允许它创建新的规划场景机器人在哪里 工作,生成运动计划,添加新的对象,可视化计划输出,并可以直接与可视 化机器人进行交互。 MoveIt!配置包由配置文件和启动文件组成在RViz中开始运动规划。 在包 中有一个演示启动文件供您探索这个包的所有功能。 以下是调用演示启动文件的命令: roslaunch seven_dof_arm_config demo.launch 如果一切正常,我们将得到正在加载的RViz的以下屏幕MoveIt:提供的 MotionPlanning插件!: -9
- 9 - 生成MoveIt后! 配置包,我们可以把它复制到我们的catkin工作区并使用 catkin_make命令构建它。 在下一节中,我们将要使用这个包。 3. 在rviz中利用Moveit 配置包进行运动规划 MoveIt! 为RViz提供了一个插件,允许它创建新的规划场景机器人在哪里 工作,生成运动计划,添加新的对象,可视化计划输出,并可以直接与可视 化机器人进行交互。 MoveIt! 配置包由配置文件和启动文件组成在RViz中开始运动规划。 在包 中有一个演示启动文件供您探索这个包的所有功能。 以下是调用演示启动文件的命令: $ roslaunch seven_dof_arm_config demo.launch 如果一切正常,我们将得到正在加载的RViz的以下屏幕MoveIt提供的 MotionPlanning插件!:
白rma价mCnr:国t◆一。 91 +》Motionpianning Context anning Maripulation Scene objects stored scenes stored tes status Planning Libeary OMPL sunspecined. :Publish currentscene H0tt27801 Port:33829.coonect 宽use Collison-Aware Re Left-clice Rotate.Midde-ctice Meve XY.Right-CUck:MoveZh More optons 3.1 使用rviz的MotionPlanning插件 从前面的图11中,我们可以看到RViz-Motion Planning插件是加载在屏 幕的左侧。运动计划有几个选项卡窗口,如上下文,规划等。默认选项卡 是“上下文”选项卡我们可以看到默认的规划库为OMPL,显示为绿色。它 表明MoveIt!成功加载了运动规划库。如果不是加载,我们不能执行运动 计划。 接下来是规划选项卡。这是用来分配的常用选项卡之一开始状态,目 标状态计划路径,并执行路径。接下来显示的是GUI规划选项卡: Motion Planning Context Planning Manipulation Scene Objects Stored Scenes Stored States Status Commands Query Options Plan Select Start State: Planning Time (s):5.00 Execute Select Goal State: Planning Attempts:10.00 Plan and Execute Velocity Scaling:1.00 Update □Allow Replanning Allow Sensor Positioning □Allow External Comm. Path Constraints: Workspace Center (XYZ):0.00 None 0.00 0.00 Goal Tolerance: 0.00 Size (XYZ): 2.00 2.00 2.00 Clear octomap 我们可以在查询面板下指定机器人的开始状态和目标状态。 -10-
- 10 - 3.1 使用rviz 的MotionPlanning 插件 从前面的图11中,我们可以看到RViz-Motion Planning插件是加载在屏 幕的左侧。 运动计划有几个选项卡窗口,如上下文,规划等。 默认选项卡 是“上下文”选项卡我们可以看到默认的规划库为OMPL,显示为绿色。 它 表明MoveIt! 成功加载了运动规划库。 如果不是加载,我们不能执行运动 计划。 接下来是规划选项卡。 这是用来分配的常用选项卡之一开始状态,目 标状态计划路径,并执行路径。 接下来显示的是GUI规划选项卡: 我们可以在查询面板下指定机器人的开始状态和目标状态
使用“planning”按钮,我们可以规划从开始到目标状态的路径,如果计划 是成功的,我们可以执行它。默认情况下,执行是伪造的控制器。我们可以将 这些控制器更改为轨迹控制器来执行在Gazeboi计划的轨迹或真正的机器人。我们 可以通过设置机器人末端执行器的起始位置和目标位置交互式标记附着在手臂 抓手上。 我们可以翻译和旋转的标记姿势,如果有计划的解决方案,我们可以看到一 个橙色的手臂。在某些情况下,即使末端执行器标记姿势移动,手臂也不会移动, 如果手臂没有来到标记位置,我们可以假设没有IK解决方案。我们可能需要更 多的自由度才能到达那里或者可能会有链接之间有些冲突。 以下是有效的目标姿势和无效的目标姿势的截图: 30 20 fp 绿色的手臂代表手臂的起始位置,橙色代表目标的位置。在第一个图中,如果 我们按计划按钮,MoveIt!计划从开始到目标的路径。在第二个图像中,我们 可以观察两件事。首先,橙色的手臂的一个链接是红色的,这意味着目标姿势在 一个自相撞的状态。其次,看最终效应器的标志:这远远不够实际末端执行器 也变红了。 我们也可以使用随机有效的选项来进行一些快速运动计划开始国家和目标国家。 如果我们选择目标状态作为随机有效和按下更新按钮,它会产生一个随机有效的 目标姿势。点击计划按钮,我们可以看到运动规划。 -11-
- 11 - 使用“planning”按钮,我们可以规划从开始到目标状态的路径,如果计划 是成功的,我们可以执行它。 默认情况下,执行是伪造的控制器。 我们可以将 这些控制器更改为轨迹控制器来执行在Gazebo计划的轨迹或真正的机器人。我们 可以通过设置机器人末端执行器的起始位置和目标位置交互式标记附着在手臂 抓手上。 我们可以翻译和旋转的标记姿势,如果有计划的解决方案,我们可以看到一 个橙色的手臂。在某些情况下,即使末端执行器标记姿势移动,手臂也不会移动, 如果手臂没有来到标记位置,我们可以假设没有IK解决方案。 我们可能需要更 多的自由度才能到达那里或者可能会有链接之间有些冲突。 以下是有效的目标姿势和无效的目标姿势的截图: 绿色的手臂代表手臂的起始位置,橙色代表目标的位置。 在第一个图中,如果 我们按计划按钮,MoveIt!计划从开始到目标的路径。 在第二个图像中,我们 可以观察两件事。首先,橙色的手臂的一个链接是红色的,这意味着目标姿势在 一个自相撞的状态。 其次,看最终效应器的标志; 这远远不够实际末端执行器 也变红了。 我们也可以使用随机有效的选项来进行一些快速运动计划开始国家和目标国家。 如果我们选择目标状态作为随机有效和按下更新按钮,它会产生一个随机有效的 目标姿势。 点击计划按钮,我们可以看到运动规划