环境:Ubuntu18.04 + ROS Melodic

1. 安装ROS

官网下载安装步骤:http://wiki.ros.org/melodic/Installation/Ubuntu

一键安装的快捷方式:

wget http://fishros.com/install -O fishros && bash fishros

保证自己的ROS可以使用。可以按照官网进行小乌龟测试。

2. 安装 movelt

Movelt 并没有直接附带在 ROS中,需要自行安装:

sudo apt install ros-melodic-moveit

如果是更高版本(其他版本)则安装对应的moveit. 比如Ubuntu20.04对应的是ROS Noetic .也可以直接从源码下载:https://moveit.ros.org/install/source/

3. 下载例程

如果你的手头没有现成的素材,可以从tutorial下载,首先我们建立一个工作空间用于 ROS程序的开发。后面会介绍ROS文件空间的结构。

mkdir ~/ARM/ws_moveit/src
cd ~/ARM/ws_moveit/src
git clone https://github.com/ros-planning/moveit_tutorials.git -b melodic-devel
git clone https://github.com/ros-planning/panda_moveit_config.git -b melodic-devel

安装一些必要的依赖:

cd ~/ARM/ws_moveit/src
rosdep install -y --from-paths . --ignore-src --rosdistro melodic

设置工作空间

cd ~/ARM/ws_moveit
catkin config --extend /opt/ros/${ROS_DISTRO} --cmake-args -DCMAKE_BUILD_TYPE=Release
catkin build

刷新工作空间,使其能够正常工作:

source ~/ARM/ws_moveit/devel/setup.bash

也可以将这句话写入 bashrc 文件,使其自动执行,就不需要每次都 source 了:

echo 'source ~/ARM/ws_moveit/devel/setup.bash' >> ~/.bashrc

4. Rviz 初试

上手 MoveIt 的最快方法就是通过 RViz 插件。Rviz 是 ROS 中的主要可视化工具,也是调试机器人非常有用的工具。MoveIt Rviz插件可以设置虚拟环境(场景),以交互方式创建机器人的开始和目标状态,测试各种运动规划器,并以可视化的方式输出。

在前3步中我们已经做好了初始化的准备,下面我们看一看rviz插件的相关操作。

4.1 Launch the Demo and Configure the Plugin

运行 panda_moveit_config 的 demo launch文件:

cd ~/ARM/ws_moveit
source devel/setup.bash
roslaunch panda_moveit_config demo.launch rviz_tutorial:=true

这里我们提前使用 panda_moveit_config 包,这个包是封装了机械结构和运动动力学的机器人模型,后面会将介绍这个包是怎么来的。

如果是第一次运行,将会看到以下界面:

点击左下角的 Add,选择 MotionPlanning,点击 OK。看到机器人模型。

当这个机器人模型被加载出来后,我们就可以继续配置这个机器人。

在左侧自上向下依次设置:

  1. Global Options中,Fixed Frame 设置为 /panda_link0
  2. MotionPlanning 中
    • Robot Description 设置为 robot_description
    • Planning Scene Topic 设置为 /planning_scene
    • Planning Request 中,将 Planning Group 设置为 panda_arm
    • Planning Path 中,将 Trajectory Topic 设置为 /move_group/display_planned_path

4.2 机器人可视化设置

Rviz 中有四种显示模式

  1. 机器人在 /planning scene 规划环境中的配置(默认情况下处于活动状态)。
  2. 机器人的规划路径(默认情况下处于活动状态)。
  3. 绿色:运动规划的开始状态(默认情况下禁用)。
  4. 橙色:运动规划的目标状态(默认情况下处于活动状态)。

可以通过选择框来打开关闭各个可视化状态:

  1. 使用 "Scene Robot" 选项卡中的 "Show Robot Visual"显示机器人规划场景
  2. 使用 "Planned Path" 选项卡中的 "Show Robot Visual" 复选框显示规划路径
  3. 使用 "Planning Request" 选项卡中的 "Query Start State" 复选框显示开始状态
  4. 使用 "Planning Request" 选项卡中的 "Query Goal State" 复选框显示目标状态

通过这些选项卡的打开关闭可以显示不同的可视化效果。

4.3 与Panda机械臂交互

接下来我们只打开 Planned Path、Start State 以及 Goal State. 不打开 Scene Robot 。现在可以看到机械臂呈现橘色。

即作如下的可视化勾选设置:

  • 勾选Planned Path-Show Robot Visual
  • 取消勾选Scene Robot-Show Robot Visual
  • 勾选Planning Request-Query Goal State
  • 勾选Planning Request-Query Start State

现在应该有两个交互标记 (interactive markers):

  • 橙色手臂标记用于表示运动规划的“目标状态”,

  • 绿色手臂标记用于表示运动规划的“开始状态”。

  • 如果看不到交互标记,请按RViz顶部菜单中的 "Interact".

    注意:某些工具可能是被隐藏了,请按顶部菜单中的 "+" 以添加交互工具。

现在,就能够使用这些标记来拖动手臂并更改其状态:比如拖动手臂到达某个位置:

4.3.1 碰撞状态

Collision. 当试图移动机械臂的某个关节与其他部分发生碰撞时,碰撞的两个部分将变为红色。

在 "Planning" 选项卡下的 MotionPlanning 插件中找到的 "Use Collision-Aware IK" 复选框允许您切换IK解算器的行为。勾选该复选框后,解算器将不断尝试为所需末端效应器位姿寻找无碰撞解决方案

会比之前优雅很多,但还是会碰撞,只是少了很多可能。

未选中这个选项卡时,解算器会允许有碰撞的解。

无论复选框的状态如何,碰撞的两个部分依然以红色显示。

4.3.2 移出可达工作空间

由于joint的角度限值和关节的固定长度,目标点局限在一个有效的空间(workspace)内, 对于出界的目标点,求解器将无法求出解。

4.4 使用 Motion Planning

现在可以通过 Motion Planning 让机械臂规划运动。

  • 点中Start State 拖到想要的起始位置;
  • 点中Goal State 拖到想要的目标位置;
  • 检查起始和目标状态下都没有碰撞;
  • 确保在Planned Path选项卡中勾选Planned Path;

在 MotionPlanning 插件的 Planning 中点击Plan按钮, 可以看到机械臂运动的轨迹。

4.5 查看轨迹点

在 Rviz 中通过 slider 查看运动轨迹点。

  • Panels菜单中选择MotionPlanning - Slider,在左边会出现一个滑块。

    Panels在Rviz中最上面的file那一行。

  • 设置目标状态,点击Plan

  • 拖动滑块可以查看轨迹点。

注意,当你把机械臂放到一个新的目标时,先执行 Plan 再执行 slider 中的 Play,否则看到的还是上一次执行的轨迹点。

4.6 保存设置

File->Save Config

这样下次打开Rviz,可以通过File->Open 调用保存的配置。

ROS机械臂 Movelt 学习笔记1 | 基础准备的更多相关文章

  1. ROS机械臂 Movelt 学习笔记2 | Move Group 接口 C++

    Movelt为使用者提供了一个最通用且简单的接口 MoveGroupInterface 类,这个接口提供了很多控制机器人的常用基本操作,如: 设置机械臂的位姿 进行运动规划 移动机器人本体 将物品添加 ...

  2. ROS机械臂 Movelt 学习笔记4 | Move Group 接口 Python

    Python 的使用总是比 C++ 简单许多,Move Group 的 Python 接口更为便捷,也为使用者提供了很多用于操纵机器人和机械臂的函数,能够和 C++ 接口实现相同的功能: 设置机械臂的 ...

  3. ROS机械臂 Movelt 学习笔记3 | kinect360相机(v1)相关配置

    目标是做一个机械臂视觉抓取的demo,在基地里翻箱倒柜,没有找到学长所说的 d435,倒是找到了一个老古董 kinect 360. 前几天就已经在旧电脑上配置好了,现在记录在新电脑上的配置过程. 1. ...

  4. ROS机械臂 Movelt 学习笔记5 | MoveIt Commander Scripting

    前一讲python接口中提到moveit_commander 包.这个包提供了用于运动规划.笛卡尔路径计算以及拾取和放置的接口. moveit_commander 包还包括一个命令行接口程序movei ...

  5. MyBatis:学习笔记(1)——基础知识

    MyBatis:学习笔记(1)--基础知识 引入MyBatis JDBC编程的问题及解决设想 ☐ 数据库连接使用时创建,不使用时就释放,频繁开启和关闭,造成数据库资源浪费,影响数据库性能. ☐ 使用数 ...

  6. bootstrap学习笔记之基础导航条 http://www.imooc.com/code/3111

    基础导航条 在Bootstrap框中,导航条和导航从外观上差别不是太多,但在实际使用中导航条要比导航复杂得多.我们先来看导航条中最基础的一个--基础导航条. 使用方法: 在制作一个基础导航条时,主要分 ...

  7. Django学习笔记(基础篇)

    Django学习笔记(基础篇):http://www.cnblogs.com/wupeiqi/articles/5237704.html

  8. C#学习笔记(基础知识回顾)之值类型与引用类型转换(装箱和拆箱)

    一:值类型和引用类型的含义参考前一篇文章 C#学习笔记(基础知识回顾)之值类型和引用类型 1.1,C#数据类型分为在栈上分配内存的值类型和在托管堆上分配内存的引用类型.如果int只不过是栈上的一个4字 ...

  9. C#学习笔记(基础知识回顾)之值传递和引用传递

    一:要了解值传递和引用传递,先要知道这两种类型含义,可以参考上一篇 C#学习笔记(基础知识回顾)之值类型和引用类型 二:给方法传递参数分为值传递和引用传递. 2.1在变量通过引用传递给方法时,被调用的 ...

随机推荐

  1. 【面试普通人VS高手系列】说说缓存雪崩和缓存穿透的理解,以及如何避免?

    听说10个人去互联网公司面试,有9个人会被问到缓存雪崩和缓存穿透的问题. 听说,这9个人里面,至少有8个人回答得不完整. 而这8个人里面,全都是在网上找的各种面试资料去应付的,并没有真正理解. 当然, ...

  2. 【Python情感分析】用python情感分析李子柒频道视频热门评论

    一.事件背景 今天是2021.12.2日,距离李子柒断更已经4个多月了,这是我在YouTube李子柒油管频道上,观看李子柒2021年7月14日上传的最后一条视频,我录制了视频下方的来自全世界各国网友的 ...

  3. 生成器对象(自定义迭代器),自定义range方法,模块

    自定义迭代器 一 .生成器与yield ''' 我们得到一个迭代器通常都是调用可迭代对象的__iter__方法 ,例如 list.iter() 得到一个迭代器, 但是当list很大时候,就违背了pyt ...

  4. HDFS High Availability(HA)高可用配置

    高可用性(英语:high availability,缩写为 HA) IT术语,指系统无中断地执行其功能的能力,代表系统的可用性程度.是进行系统设计时的准则之一. 高可用性系统意味着系统服务可以更长时间 ...

  5. Redis设计与实现3.1:主从复制

    主从复制 这是<Redis设计与实现>系列的文章,系列导航:Redis设计与实现笔记 SLAVEOF 新旧复制功能 旧版复制功能 旧版复制功能的实现为 同步 和 命令传播: 当刚连上Mas ...

  6. Java 15 新特性:隐藏类

    什么是隐藏类 隐藏类,是一种不能被其他类直接使用的类.引入隐藏类的主要目的是给框架来使用,使得框架可以在运行时生成类,并通过反射间接使用它们.可能有点抽象,不要紧,下面我们通过一个例子来直观的认识它! ...

  7. WTF表单验证

    WTF表单验证可分为3个步骤: ①导入wtf扩展提供的表单验证器.(from wtforms.validators import DataRequired,EqualTo) ②定义表单类 # 定义表单 ...

  8. 【Axure】母版引发事件

    引发事件是指你将母版中某一元件的事件从母版中提升出来,以使其在页面的级别可用. 通过引发事件,可以对在不同页面上母版实例的同一个元件设置不同的交互. 设置引发事件 打开一个母版: 选择其中一个组件: ...

  9. README.exe 是的,你看错是EXE

    SmartIDE让你的README变成可执行文档,再也不用编写无用的文档,再也不必操心环境问题.   作为开发者,拿到一个新的代码库的时候一般都会先去看README文件,通过这个文件可以知道这套代码所 ...

  10. Unity中通过深度优先算法和广度优先算法打印游戏物体名

    前言:又是一个月没写博客了,每次下班都懒得写,觉得浪费时间.... 深度优先搜索和广度优先搜索的定义,网络上已经说的很清楚了,我也是看了网上的才懂的,所以就不在这里赘述了.今天讲解的实例,主要是通过自 ...