机械臂URDF模型配置Moveit和Rviz、Gazebo联合仿真

绪论

在上一篇文章中,我们成功实现了SolidWorks模型到URDF格式的转换。本文将重点介绍如何配置MoveIt,并将转换后的URDF模型与Rviz、Gazebo进行联合仿真。本文基于Ubuntu 20.04-ros-noetic环境展开若文中存在任何疏漏或不当之处,欢迎指正交流,让我们共同探讨、共同进步。

目录

绪论

MoveIt运动规划

1.MoveIt简介

2.MoveIt的安装与配置

2.1安装MoveIt

2.2配置MoveIt

2.2.1.启动设置向导

2.2.2配置自碰撞检测

2.2.3添加虚拟关节

2.2.4.创建运动规划组

2.2.5.预设机器人姿态

2.2.6.设置末端执行器(End Effectors)

2.2.7.设置消极关节(Passive Joints)

2.2.8.设置ROS Control

2.2.9.Simulation

2.2.10.构建3D信息(Setup 3D Perception Sensors)

2.2.11.添加作者信息

2.2.12.生成配置文件

3.运行演示程序

3.1预设置

3.2启动rviz

3.3Rviz和Gazebo仿真联合


MoveIt运动规划

1.MoveIt简介

MoveIt 是一个开源的机器人运动规划框架,主要用于机械臂的运动规划、操作、3D感知、运动学、控制以及导航等功能。它是ROS (Robot Operating System) 生态系统中最广泛使用的运动规划软件之一。

MoveIt的核心功能如下:

  • 运动规划:为机械臂寻找从起点到目标点的无碰撞路径
  • 逆运动学求解:计算使末端执行器达到目标位形所需的关节角度
  • 碰撞检测:利用3D传感器数据或环境模型检测潜在碰撞
  • 抓取生成:自动生成抓取物体的策略
  • 运动执行:将规划好的轨迹发送给机器人控制器执行
  • 可视化:通过Rviz插件实时查看机械臂模型、路径规划结果、目标位置等

2.MoveIt的安装与配置

2.1安装MoveIt

MoveIt依赖于ROS,因此需要先安装ROS(安装ros的过程这里就不进行赘述了,后期有时间会补充到博客)

# 更新ROS包列表
sudo apt update

# 安装MoveIt
sudo apt install ros-<ros_distro>-moveit

<ros_distro> 代表你的 ROS 发行版名称

#这里是ros-noetic版本
sudo apt install ros-noetic-moveit
 

这里可以用下面的命令查看是否安装成功,并查看moveit!的版本

moveit_version

有版本的输出证明安装成功了!!!

2.2配置MoveIt

2.2.1.启动设置向导

在新建的工作空间中,首先启动MoveIt Setup Assistant。在此之前,需要确保roscore已运行,并执行source命令刷新一下环境变量。这一步骤至关重要,因为后续操作需要从功能包中选择urdf文件,若文件不在功能包中,将导致操作失败。

roscore

source devel/setup.bash

rosrun moveit_setup_assistant moveit_setup_assistant

执行rosrun moveit_setup_assistant moveit_setup_assistant后会出现下面的界面:

可以看到有两个选择:新建MoveIt配置包(Create New MoveIt Configuration Package)或修改现有MoveIt配置包(Edit Existing MoveIt Configuration Package),这里我们选择新建MoveIt配置包。

然后这里选择自己文件夹下面的urdf后缀的文件点击Load Files

如果出现类似报错是因为没有在工作空间下的devel里面刷新环境变量(一般是这个问题)

在Workspace的devel目录下,打开终端并执行source setup.bash命令,即可将文件路径加载至当前命令行环境。

重新运行 rosrun moveit_setup_assistant moveit_setup_assistant 命令,即可启动 MoveIt! Setup Assistant 工具,可看到在右边出现了我们机械臂模型,我们的鼠标也可以随意拖动它进行位置调整。


 

2.2.2配置自碰撞检测

这里点击Generate Collision Matrix会自动配置好选项

2.2.3添加虚拟关节

为建立虚拟关节与外部参考系的连接,请按以下步骤操作:

  • 点击"Add Virtual Joints"按钮

  • 在名称栏输入"virtual_joint"
  • 在Child Link选项中选择"base_link"
  • 将Parent Frame Name设置为"world"(即世界坐标系)
  • 选择关节类型为"Fixed"
  • 选择“Save”进行保存

2.2.4.创建运动规划组
  • 点击 Add Group 按钮。

  • Group Name :中输入 "damiao" 作为组名(这里大家可以随机,我是因为使用的达妙的电机)。
  • Kinematic Solver(运动学求解器):这里采用kd_kinematics_plugin/KDLKinematicsPlugin进行运动学计算,该插件基于KDL(Kinematics and Dynamics Library)开发。KDL作为一款广泛使用的开源运动学库,能够高效完成正运动学(Forward Kinematics)和逆运动学(Inverse Kinematics)的计算任务。

  • Kin. Search Resolution: 0.005 rad,作为运动学搜索分辨率参数,直接影响逆运动学求解的精度与效率。该值越小,计算精度越高,但相应的计算时间也会增加。

  • Kin. Search Timeout (sec): 0.005 运动学求解超时时间(单位:秒)若在此时间内未找到可行解,求解器将终止运算。

  • Goal Joint Tolerance (m|rad): 0.0001,这是关节空间目标容差,对于平移关节单位是米(m),对于旋转关节单位是弧度(rad),当实际关节位置与目标位置的差小于此值时认为达到目标。

  • Goal Position Tolerance (m): 0.0001,末端执行器位置容差,单位米(m),允许的末端执行器位置与目标位置之间的最大距离。

  • Goal Orientation Tolerance (rad): 0.0010,末端执行器方向容差,单位弧度(rad),允许的末端执行器方向与目标方向之间的最大角度差。

  • Kin. parameters file:运动学参数文件路径(此处为空)可以指定包含运动学参数的外部配置文件。

  • OMPL规划参数

  • Group Default Planner: RRTConnect

    • 默认的运动规划算法,这里使用的是RRTConnect

    • RRTConnect是一种双向快速扩展随机树算法,适合解决高维空间的运动规划问题

    • 它在起点和目标点同时生长两棵树,直到它们连接

接下来,为上述规划配置选择相应的关节(Joints),点击"Add Kin.Chain"按钮可直接添加运动链。
在设置中,选择"base_link"作为基链接(Base Link),并选择"link_3"作为末端链接(Tip Link),然后点击"保存"按钮,通过以上步骤,即可成功生成一个规划组。

保存后就会和下图显示的一样

2.2.5.预设机器人姿态

点击 "Add Pose" 按钮,为机械臂设置两个姿态:up 和 down。大家可根据需求自定义姿态名称和具体位置,但通常我们习惯采用这两个默认设置。其中,将所有角度为 0 的位姿定义为 up 姿态,设置完成后点击 "Save" 保存。

这里和上述步骤一样只不过需要修改名字和关节位置

2.2.6.设置末端执行器(End Effectors)

可以设置夹爪,我这里没有夹爪,有夹爪的可以设置一下

2.2.7.设置消极关节(Passive Joints)

这个就是进行轨迹规划时候不让运动的关节,我这里三个关节都需要运动所以没有设置

2.2.8.设置ROS Control

ROS通过ROS Control框架中的Controller接口,与Gazebo仿真环境或实际硬件设备建立连接。在配置过程中,点击"Auto Add FollowJointTrajectory..."选项,系统将自动为五个关节配置相应的Controller,其类型应为FollowJointTrajectory(若类型不符,需手动调整为该类型)。

选择“FollowJointTrajectory”

这里我也解释一下这个几种控制器有什么区别:

1. effort_controllers/JointTrajectoryController
控制方式: 使用“力/力矩”来控制每个关节。

典型应用: 如果你的机器人底层驱动支持力矩控制(例如某些高端机器人或使用了扭矩传感器的系统)。

优点: 可用于高精度控制或力控任务。

缺点: 对硬件要求较高,调试难度大。

2. velocity_controllers/JointTrajectoryController
控制方式: 通过设定“关节速度”来驱动关节运动。

典型应用: 电机只能接受速度命令,且内部会处理位置控制。

优点: 控制简单,系统响应速度快。

缺点: 精度和轨迹跟踪能力通常不如位置控制。

3. position_controllers/JointTrajectoryController
控制方式: 通过设定“关节位置”来控制每个关节。

典型应用: 适用于大多数机器人,特别是舵机控制系统。

优点: 精度高,易于实现。

缺点: 对关节之间协同控制能力要求高。

4. FollowJointTrajectory
控制方式: MoveIt 常用的标准接口类型(不直接控制底层,而是将轨迹传递给控制器)。

用途: 这是一个 动作服务器(action server),用于接收来自 MoveIt 的轨迹,并由底层 JointTrajectoryController 实现。

说明: 实际上你仍需要在底层使用 effort/velocity/position_controllers/JointTrajectoryController 之一,它们实现轨迹的执行。

5. GripperCommand
控制方式: 专门用于末端执行器(例如夹爪)。

接口: 通常通过设定“开合位置”和“力矩限制”等参数来控制夹爪。

典型应用: 控制夹爪开合程度,适用于 Robotiq 等支持 GripperCommand 接口的夹爪。

使用需求	                     推荐控制器类型

标准位置控制机械臂	         position_controllers/JointTrajectoryController
只接受速度命令的系统	         velocity_controllers/JointTrajectoryController
高级机器人,支持力控	         effort_controllers/JointTrajectoryController
MoveIt 与控制器的桥接接口	 FollowJointTrajectory
控制夹爪	                     GripperCommand

点击Save保存

点击 "Add Controller"

在控制器配置中添加一个名为 controller_gazebo 的控制器,将其类型设置为 position_controller/JointTrajectoryController。接着,配置该控制器接收信息的关节,点击 "Add Planning Group Joints" 以完成设置。

把damiao添加进来,点击 Save 保存

我们新增了一组Controller模块:上层的Controller负责将MoveIt生成的运动数据发送出去,下层的Controller则负责接收这些数据并驱动Gazebo中的仿真机械臂执行相应动作。这套机制同样适用于实际机械臂的控制。

2.2.9.Simulation

该工具可自动生成包含Gazebo仿真属性的URDF模型,便于将机械臂模型直接导入Gazebo进行仿真。操作时,请点击"Overwrite original URDF"按钮,将生成的代码覆盖至robot_urdf_1.urdf文件中。

需要注意的是,由于我们先前已建立position_controller,需将代码中的EffortJointInterface统一修改为PositionJointInterface。

2.2.10.构建3D信息(Setup 3D Perception Sensors)

若配备3D感知功能的相机可以设置一下,此处我暂时跳过。

2.2.11.添加作者信息

根据自己相应信息填写就可以

2.2.12.生成配置文件

catkin_ws01/src 工作空间下新建一个名为 damiao_moveit_config 的文件夹(务必确保路径正确,否则后续程序运行将出现问题图中这个我建错了!!)。接着,选择该目录作为 Package Save Path,最后点击 Generate Package 完成创建。

弹出以下窗口是因为没添加末端执行器,直接点ok就行

最后点击 Generate Package 完成创建

3.运行演示程序

3.1预设置

运行之前我们进行一些预设置,不设置后面可能会报错,在原本的urdf文件里面添加一段:

<link name="base_footprint">
    </link>
    <joint name="base_footprint_joint" type="fixed">
        <parent link="base_footprint" />
        <child link="base_link" />
    </joint>

如下:

还需要修改config下.srdf文件里面的child_link="base_footprint"

这个时候我们就可以启动了:

#进入到自己的工作空间里面

#刷新一下环境变量
source ./devel/setup.bash

#启动launch文件
roslaunch damiao_moveit_config demo.launch
这里你们根据自己的进行启动

3.2启动rviz

打开后会看到这个界面

勾选这俩个就可以拖动中间的圆球了

在Joints里面也可以拖动调节关机的位置

点击Plan & Execute可以看到成功的进行了轨迹规划

3.3Rviz和Gazebo仿真联合

这需要启动另外一个launch文件:demo_gazebo.launch

执行以后会看到同时打开了rviz和gazebo

拖动rviz里面的机械臂进行轨迹规划会看到Gazebo里面的机械臂也在同步运动,至此我们rviz和Gazebo联合成功!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值