logo资料库

Notes_Liuyao.pdf

第1页 / 共7页
第2页 / 共7页
第3页 / 共7页
第4页 / 共7页
第5页 / 共7页
第6页 / 共7页
第7页 / 共7页
资料共7页,全文预览结束
Note1
Note2 UR5 添加 robotiq 2 finger gripper (c-model) 1,现在需要为 demo 中的 ur5 更换 gripper,找到了 ros 官网的 robotiq 的 package,github 下载下 来后,在 catkin_ws 目录里的 robotiq 包内,有很多文件夹,其中我需要的是两指的 gripper 模型,即 robotiq_c2_model_visualization 这个包,将其 copy 到 demo_manipulation 下的 src 目录下,即可进 行下一步操作。 2,修改 top xacro 文件,即 ur5_collision_avoidance.xacro 文件,top xacro 文件的标志是: 修改 gripper 模型,我们只需要替换以前 include 的 gripper 模型,修改为: 3,还需要修改其他跟 gripper 有关的地方: 这里 robotiq_c2_model 是 robotiq_c2_model_macro.xacro 文件中提供的 name,prefix 是该文件中 指定的需要的参数: 4,robotiq_c2_model.xacro 是一个 top xacro,它是单独使用 gripper 模型的文件,这里告诉了我们 base_link 的名字。 所以我们还需要修改 joint 的信息: 5,可以通过 moveit setup assistant 的新建 pkg 中,测试一下生成的模型场景,如果 xacro 文件有 错,则会出现 unable to parse 或 unvalid model,下面是效果图:
6,进入 assistant 后,我们需要给 gripper 添加一个 planning groups,如何用一个 joint 控制整个 gripper 的 close & open 呢,我们打开 robotiq 的 robotiq_c2_model_macro.xacro 文件查看一下内 容,其中发现了以下语法: 关于 mimic 的用法,官网有介绍: http://wiki.ros.org/urdf/XML/joint 总之,其他的几个 joint 会根据 robotiq_85_left_knuckle_joint 这个关节做相应的动作,因此我们只需要 在 group 里添加这一个关节,即可控制 gripper 了。 7, important step,update the moveit package: http://wiki.ros.org/Industrial/Tutorials/Create_a_MoveIt_Pkg_for_an_Industrial_Robot#Update_C onfiguration_Files 每次在 assistant 中对模型有配置修改,需要重新 update the package,否则运 行 moveit_planning_execution.launch 会出现 robot status error。 8,配置完成之后,运行 demo_manipulation 的 ur5_setup,发现 rviz 中不显示 gripper
检查了一下 ur5_setup.launch 这个文件,其中加载 rviz 的语句为: 所以找到 rviz_config.rviz 这个文件,修改 link 的语句: 将这个 false 修改为 true,再运行 ur5_setup.launch 文件,gripper 成功显示。
Note3 moveit! controller ros_control http://wiki.ros.org/Industrial/Tutorials/Create_a_MoveIt_Pkg_for_an_Industrial_Robot 上面两图分别是运行 demo.launch 和 planning_execution.launch 后的节点图,其中 demo 是完全模 拟情况下的 moveit 运行情况,joint_state_publisher 发布 robot 的关节信息,这个 demo 是用来检测 moveit PKG 是否成功创建,而如果需要连接到真实 robot 上,还需要创建一个/joint_trajectory_action 节点,它用来向真实的 robot 发布运行轨迹,planning_execution 的作用是模拟真实 robot,这里建立 了一个/industrial_robot_simulator 模拟 robot,用来检测 motion plan 的部分。 在 planning_execution 的 rviz 中执行 plan&execute 指令,robot 会出现两次运动(plan&execute)。 在我目前看来: 根据下面这个图里表示的,moveit 是最右边的 user 控制算法部分,而 robot_simulator 和 joint_trajectory_action 一起扮演了最左边的 robot 角色。 那么 move_group 和 robot 之间的通信部分是谁扮演的呢? move_group 节点中包含了 action_client 的部分, 而 joint_trajectory_action 中包含了 action_server 部分。 而这里的 action_client,action_server 又具体指的什么呢? 从下面的第二张图可以看出来:moveit PKG 中我们配置的 controllers.yaml 文件,就是为了产生 client 的 action 消息,所以 move_group 节点扮演了 action_client 的角色,所以 controllers.yaml 中配置了几个 controller,就会产生几个 action client。 而 joint_trajectory_action 这个节点则是 ros-i core 为我们写的一个 action server,它既能接收 action client 的消息,又能执行 这些控制命令,它能够与 robot 的 interface 连接。 但是有一个问题,这个 action server 只会 joint_trajectory_action 这种 action 类型,所以当我们定义 了其他的 controllers.yaml 时,
也就是有其他 action client 时,这些 client 无法接收自己需要的 action 消息, 会出现"action client not connected" 的问题。 如何解决这个问题? 方法: 当做 simulation 的时候,需要启动 robot_simulator 和 joint_trajectory_action 这两个节点, 当使用真机的时候,则启动 ur_driver 节点即可。 在 simulation 时,我们的一个问题是,系统创建的 joint_trajectory_action 只包含了 server。 当我们 有多个 group,例如 ur5+gripper 时,就需要两个不同的 action server, 这时我们需要 gazebo 了。我们需要在 gazebo 里模拟真实 robot,用来做为 robot 的反馈。 当使用 gazebo 时,如下面第三个图所示,我们需要根据 urdf 的模型,定制多个 controller,然后这些 controller 一方面驱动 robot 的运动,另一方面作为 action server 与 move_group 相连。 到此为止,我们出现了两种 controller,第一种是开始给 moveit 配置的 controller(作为 action client,与 robot 接口交互),第二种 controller 是为 robot 配置的,用来控制 robot 的运动, 并作为 action server 与 move_group 配合。 这里又需要引入 controller manager 和 ros_control 的概念。 controller manager 是用于管理 robot controll 的,ros_control 则是包含了 controller_manager 以及定义了一些 controllers 类型的包。详见:http://wiki.ros.org/ros_control
ps: 使用上面的两个指令,可以监控 robot 的状态和运动指令。 在 planning_execution.launch 中, 这几条语句,运行了两个节点,即 robot_simulation 和 joint_trajectory_action 节点, robot_interface_simulator.launch: pps:在书中找到了 answer,印证了猜想
分享到:
收藏