ROS机械臂 Movelt 学习笔记1 | 基础准备
环境: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。看到机器人模型。

当这个机器人模型被加载出来后,我们就可以继续配置这个机器人。
在左侧自上向下依次设置:
- Global Options中,Fixed Frame 设置为
/panda_link0 - 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
- Robot Description 设置为
4.2 机器人可视化设置
Rviz 中有四种显示模式:
- 机器人在
/planning scene规划环境中的配置(默认情况下处于活动状态)。 - 机器人的规划路径(默认情况下处于活动状态)。
- 绿色:运动规划的开始状态(默认情况下禁用)。
- 橙色:运动规划的目标状态(默认情况下处于活动状态)。
可以通过选择框来打开关闭各个可视化状态:
- 使用 "Scene Robot" 选项卡中的 "Show Robot Visual"显示机器人规划场景。
- 使用 "Planned Path" 选项卡中的 "Show Robot Visual" 复选框显示规划路径。
- 使用 "Planning Request" 选项卡中的 "Query Start State" 复选框显示开始状态。
- 使用 "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 | 基础准备的更多相关文章
- ROS机械臂 Movelt 学习笔记2 | Move Group 接口 C++
Movelt为使用者提供了一个最通用且简单的接口 MoveGroupInterface 类,这个接口提供了很多控制机器人的常用基本操作,如: 设置机械臂的位姿 进行运动规划 移动机器人本体 将物品添加 ...
- ROS机械臂 Movelt 学习笔记4 | Move Group 接口 Python
Python 的使用总是比 C++ 简单许多,Move Group 的 Python 接口更为便捷,也为使用者提供了很多用于操纵机器人和机械臂的函数,能够和 C++ 接口实现相同的功能: 设置机械臂的 ...
- ROS机械臂 Movelt 学习笔记3 | kinect360相机(v1)相关配置
目标是做一个机械臂视觉抓取的demo,在基地里翻箱倒柜,没有找到学长所说的 d435,倒是找到了一个老古董 kinect 360. 前几天就已经在旧电脑上配置好了,现在记录在新电脑上的配置过程. 1. ...
- ROS机械臂 Movelt 学习笔记5 | MoveIt Commander Scripting
前一讲python接口中提到moveit_commander 包.这个包提供了用于运动规划.笛卡尔路径计算以及拾取和放置的接口. moveit_commander 包还包括一个命令行接口程序movei ...
- MyBatis:学习笔记(1)——基础知识
MyBatis:学习笔记(1)--基础知识 引入MyBatis JDBC编程的问题及解决设想 ☐ 数据库连接使用时创建,不使用时就释放,频繁开启和关闭,造成数据库资源浪费,影响数据库性能. ☐ 使用数 ...
- bootstrap学习笔记之基础导航条 http://www.imooc.com/code/3111
基础导航条 在Bootstrap框中,导航条和导航从外观上差别不是太多,但在实际使用中导航条要比导航复杂得多.我们先来看导航条中最基础的一个--基础导航条. 使用方法: 在制作一个基础导航条时,主要分 ...
- Django学习笔记(基础篇)
Django学习笔记(基础篇):http://www.cnblogs.com/wupeiqi/articles/5237704.html
- C#学习笔记(基础知识回顾)之值类型与引用类型转换(装箱和拆箱)
一:值类型和引用类型的含义参考前一篇文章 C#学习笔记(基础知识回顾)之值类型和引用类型 1.1,C#数据类型分为在栈上分配内存的值类型和在托管堆上分配内存的引用类型.如果int只不过是栈上的一个4字 ...
- C#学习笔记(基础知识回顾)之值传递和引用传递
一:要了解值传递和引用传递,先要知道这两种类型含义,可以参考上一篇 C#学习笔记(基础知识回顾)之值类型和引用类型 二:给方法传递参数分为值传递和引用传递. 2.1在变量通过引用传递给方法时,被调用的 ...
随机推荐
- [题解][YZOJ50104] 密码 | 简单计数
同步发表于 Mina! 题目大意 对于满足以下要求的长度为 \(n\) 的序列进行计数: 序列的值域为 \([1,k]\); 对于序列的任意位置 \(p\in[1,n]\),可以找到至少一个 \(i\ ...
- C++进阶-3-5-set/multiset容器
C++进阶-3-5-set/multiset容器 1 #include<iostream> 2 #include<set> 3 using namespace std; 4 5 ...
- TCP 协议有哪些缺陷?
作者:小林coding 图解计算机基础网站:https://xiaolincoding.com 大家好,我是小林. 忽然思考一个问题,TCP 通过序列号.确认应答.超时重传.流量控制.拥塞控制等方式实 ...
- Flutter异步与线程详解
一:前言 - 关于多线程与异步 关于 Dart,我相信大家都知道Dart是一门单线程语言,这里说的单线程并不是说Dart没有或着不能使用多线程,而是Dart的所有API默认情况下都是单线程的.但大家也 ...
- sklearn机器学习-特征提取1
scikit-learn机器学习的特征提取部分较多nlp内容,故学到一半学不下去,看完nltk再来补上 scikit-learn机器学习的特征提取这一章感觉讲的不是特别好,所以会结合着来看 首先是Di ...
- Android 12(S) 图像显示系统 - GraphicBuffer同步机制 - Fence
必读: Android 12(S) 图像显示系统 - 开篇 一.前言 前面的文章中讲解Android BufferQueue的机制时,有遇到过Fence,但没有具体讲解.这篇文章,就针对Fence这种 ...
- 好客租房54-props深入(children属性)
children属性 表示组件标签的子节点 当组件标签有子节点是 props就会有该属性 props中的组件可以是任意属性 都是可以渲染的 //导入react import React fro ...
- unity---射线
射线 Ray ray= Camera.main.ScreenPointToRay(Input.mousePosition);//获得鼠标射向的射线 RaycastHit hit;//射线碰撞物体 if ...
- PyTorch DataSet Normalization torchvision.transforms.Normalize()
特征缩放, 在这种情况下,我们不仅仅考虑是一个值的数据集,我们考虑的是具有多个特征和相关的值的样本或元素的数据集. 假如正在处理一个人的数据集, 归一化数据集有许多不同的 ...
- c++ 超长整数加法 高精度加法
c++ 超长整数加法 高精度加法 实现思路 不能直接使用加法,因为int和long long都已超出最大数据表示范围 数据读入采用string类型,读入后将数据的每一位存储到vector中 vecto ...