UR5 Gazebo仿真配置(不使用MoveIt)

1. Introduction

1.1 动机

最近在看Bruno Siciliano的Robotics Modelling, Planning and Control, 想着把里面运动学相关的算法自己实现一下. 首先有个仿真环境, 因为之前用过ROS, 于是就用ROS-Gazebo来仿真UR5机械臂(因为实验室里用的也是UR5).
网上搜到的机械臂Gazebo仿真一般是使用MoveIt控制的. MoveIt是ROS的第三方工具包, 功能强大, 可以实现运动控制, 运动规划, 避障等功能. 但是MoveIt封装得比较抽象, 用的时候看不太出底层的算法来. 我想的是机械臂控制的接口就只是一个 1 × 6 1\times6 1×6 的关节角向量, 上层的正逆运动学, 运动规划等算法自己实现. 于是打算自己实现一个ROS-Gazebo UR5的仿真包.

1.2 概述

先说一下实现这个包大概需要什么:

  • UR5 机械臂的urdf文件 ROS包ur5_description. 这个包可以直接拿UR-ROS官方的包来用, 主要是用来生成UR5模型.
  • Gazebo相关的ROS包 ur5_gazebo 主要是创建Gazebo世界, 生成机械臂模型, 以及控制的接口.

因为刚开始接触ROS, 有很多东西稀里糊涂的, 看各种教程也没有提到, 后面用了一段时间才明白, 因此本文会分享一些我的见解(个人理解, 如果有错误希望大家指正), 比较面向初学者(比如我). 熟悉的同学可能会觉得讲得啰嗦, 可以按照标题自行选择想要阅读的部分.

1.3 前置技能

建议先看一遍 Gazebo x ROS的教程, 其实本文就是从这些教程讲的知识总结而来的.

建议大家还是多看ROS wiki的教程, 都学了一遍之后, 有具体问题可以再搜索看这些帖子.

2. 机器人模型描述

2.1 URDF

ROS中一般是使用URDF (Unified Robot Description Format) 来描述机器人模型的, URDF本质上是一种xml格式的文件, 长下面这样. ROS当中很多文件, 如xacro, yaml其实都是基于xml格式的.

<robot name="robot">
<link>	... </link>
<link>	... </link>
<joint>	... </joint>
</robot>
<!-- 注释 -->

比如上面的代码里, <robot>标签内的就是机器人本体的定义, 包括了连杆<link> 和 关节<joint>.
具体的语法和定义, 大家可以看XML specifications. 这里不详细说了, 后面会用到<joint>的定义.

2.2 xacro

xacro (xml macro) 其实还是xml, 但是添加了宏定义. 比如机器人urdf文件里的<link> <joint>写起来都是差不多的, 可以首先设一个<link> <joint>的宏定义, 然后后面写起来调用这个宏定义就省劲很多. xacro主要是出于代码复用(偷懒)的目的整出来的. 具体介绍大家看官方的xacro ROS wiki. 下面这段话是他们对xacro的介绍.

We also developed a macro language called xacro to make it easier to maintain the robot description files, increase their readability, and to avoid duplication in the robot description files.

xacro代码长这样, 可以定义常量等.

<!-- xacro 声明 -->
<?xml version="1.0"?>
<robot name="mrobot" xmlns:xacro="http://www.ros.org/wiki/xacro">
<!-- xacro 定义常量 -->
<xacro::property name="PI" value="3.14159"/>
<!-- xacro 调用常量、数学公式 -->
<origin xyz="0 0 0" rpy="${PI/2} 0 0"/>

从用户的角度来看, xacro写起来比urdf方便很多. 其实ROS还是使用urdf文件构建机器人的, 使用的时候调用xacro程序将xacro解析为urdf文件, 并上传到ROS的参数服务器.

<param name="robot_description" command="$(find xacro)/xacro --inorder '$(find mrobot_description)/urdf/mrobot.urdf.xacro'"/>

2.3 UR 模型

UR (Universal Robot) 的ROS package可以直接去GitHub上的Universal Robot repo下载.
对于Ubuntu 16及以前的同学, 可以直接apt install. 但是对于Ubuntu 18及以上就要从源码编译了. 具体过程参见Universal Robot .

~/catkin_ws/src/universal_robot$ tree -L 1
.
├── README.md
├── universal_robot
├── universal_robots
├── ur5_e_moveit_config
├── ur5_moveit_config
├── ur_bringup
├── ur_description
├── ur_driver
├── ur_e_description
├── ur_e_gazebo
├── ur_gazebo
├── ur_kinematics
└── ur_msgs

安装完之后目录大概是这样的(我删掉了一些不需要的包, 比如UR3跟UR10的). ur_description就是UR机械臂的描述文件.

~/catkin_ws/src/universal_robot/ur_description$ tree -L 2
.
├── cfg
│   └── view_robot.rviz
├── CHANGELOG.rst
├── CMakeLists.txt
├── launch
│   ├── ur10_upload.launch
│   ├── ur3_upload.launch
│   ├── ur5_upload.launch
│   ├── view_ur10.launch
│   ├── view_ur3.launch
│   └── view_ur5.launch
├── meshes	# 机器人三维模型
│   ├── ur10
│   ├── ur3
│   └── ur5
├── model.pdf
├── package.xml
└── urdf	# 机器人urdf文件
    ├── common.gazebo.xacro
    ├── ur10_joint_limited_robot.urdf.xacro
    ├── ur10_robot.urdf.xacro
    ├── ur10.urdf.xacro
    ├── ur3_joint_limited_robot.urdf.xacro
    ├── ur3_robot.urdf.xacro
    ├── ur3.urdf.xacro
    ├── ur5_joint_limited_robot.urdf.xacro
    ├── ur5_robot.urdf.xacro
    ├── ur5.urdf.xacro
    ├── ur.gazebo.xacro
    └── ur.transmission.xacro

可以打开ur5.urdf.xacro看一眼ur机械臂的link和joint是如何定义的.
在这里插入图片描述

下面我们从官方包里提取出UR5的描述文件, 自己创建一个ur5_description包.
其实这一步没什么必要, 也可以直接用官方的包.

我主要是不喜欢有多余的东西, 而且后面会对urdf文件有改动, 所以自己新建了一个精简版的ROS package.

2.4 创建精简的ur5_description

首先创建一个ROS package

~/catkin_ws/src/ur_sim$ catkin_create_pkg ur5_description

然后复制UR5的urdf文件夹到自己新建的packageur5_description下, 可以删掉UR3跟UR10相关的文件. meshes也复制过来, 删掉ur3 ur10. 自己创建的package目录应该是这

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值