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在变量通过引用传递给方法时,被调用的 ...
随机推荐
- C++基础-4-封装(构造函数与析构函数,深拷贝与浅拷贝,静态成员,this,友元,const修饰成员函数)
4. 封装 4.1.1 封装的意义 1 #include<iostream> 2 #include<string> 3 using namespace std; 4 5 con ...
- Linux磁盘和文件系统知识总结
硬盘操作 为什么要给硬盘分区? 如果你需要在一块硬盘上用到多个文件系统,那么你就需要对硬盘进行分区,以便用不同的分区支持不同的文件系统.(但一个硬盘只能有一个分区表!)反过来说,如果你整块硬盘都用同样 ...
- Linux Troubleshooting 超实用系列 - Disk Analysis
笔者历史文章: https://github.com/CarlJi/words 关于磁盘的使用,实际生产中以下问题会较为常见: No space left on device - 空间不足 Disk ...
- 技术分享 | 云原生多模型 NoSQL 概述
作者 朱建平,TEG/云架构平台部/块与表格存储中心副总监.08年加入腾讯后,承担过对象存储.键值存储,先后负责过KV存储-TSSD.对象存储-TFS等多个存储平台. NoSQL 技术和行业背景 No ...
- Python技法:用argparse模块解析命令行选项
1. 用argparse模块解析命令行选项 我们在上一篇博客<Linux:可执行程序的Shell传参格式规范>中介绍了Linux系统Shell命令行下可执行程序应该遵守的传参规范(包括了各 ...
- Servlet表单数据
1.GET 方法 GET 方法向页面请求发送已编码的用户信息.页面和已编码的信息中间用 ? 字符分隔,如下所示: http://www.test.com/hello?key1=value1&k ...
- 利用SignalR创建即时消息
1. 什么是SignalR? SignalR 是一个及时消息推送,它与.NET 的 WCF ,WebAPI类似 是客户端和服务器进行消息交换的一种工具 2.SignalR 的作用? 它可以实时同步在线 ...
- [OCWA 模拟赛ADay1] 钢铁侠的逃离
Description 给定 \(A,B,N\) ,求 \(\sum\limits_{i=1}^{N} popcount(B+i*A)\) ,其中 \(popcount\) 是指数 \(x\) 在二进 ...
- vs2022+resharper创建模板——实现在新建文件的时候自动生成防卫式声明和自定义语句
在网上找了很久如何让visual studio新建文件的时候自动生成注释和防卫式声明,虽然防卫式声明可以用#proga once替代,但是在clion里可以自动生成vs里面没法自动生成还是觉得难受,于 ...
- 面试突击54:MySQL 常用引擎有哪些?
MySQL 有很多存储引擎(也叫数据引擎),所谓的存储引擎是指用于存储.处理和保护数据的核心服务.也就是存储引擎是数据库的底层软件组织.在 MySQL 中可以使用"show engines& ...