RoArm-M2-S ROS2 Humble Documentation

来自Waveshare Wiki
跳转至: 导航搜索
RoArm-M2-S
{{{name2}}}
{{{name3}}}
功能简介
特性 RoArm-M2-S 机械臂
' 无特性,不解释
' 无特性,不解释
' 无特性,不解释
' 无特性,不解释
接口 TTL总线舵机控制接口 I2C UART

由于截止到本教程完成为止,Moveit2 还未完成针对 ROS2 最新 LTS 版本 Jazzy 的更新,所以目前我们仍然提供 ROS2 Humble 的教程,后续 Moveit2 更新后,我们会及时制作 ROS2 Jazzy 版本的教程。本教程适用于在 Windows 系统电脑使用虚拟机来运行 ROS2,并参考后续的教程来进行控制机械臂。

1. 新手安装 ROS2 教程

1.1 ROS2 简介

ROS2 的前身是 ROS,ROS 即机器人操作系统(Robot Operating System)。但是 ROS 本身并不是一个操作系统,而是一个软件库和工具集。ROS 的出现解决了机器人各个组件的通信问题,后来越来越多的机器人算法也集成到了 ROS 中,ROS2 继承了 ROS,相比 ROS 更强大更优秀。

主要特征:

  • 多机器人系统:未来机器人一定不会是独立的个体,机器人和机器人之间也需要通信和协作,ROS2 为多机器人系统的应用提供了标准方法和通信机制;
  • 跨平台:机器人应用场景不同,使用的控制平台也会有很大差异,为了让所有机器人都可以运行 ROS2,ROS2 可以跨平台运行于 Linux、Windows、MacOS、RTOS;
  • 实时性:机器人运动控制和很多行为策略要求机器人具备实时性,比如机器人要可靠地在 100 ms 内发现前方的行人,或者稳定地在 1 ms 周期内完成运动学、动力学的解算,ROS2 为类似这样的实时性需求提供了基本保障;
  • 产品化:ROS2 不仅可以用于机器人研发阶段,还可以直接搭载在产品中,走向消费市场,这对 ROS2 的稳定性、强壮性也提出了巨大挑战。


1.2 虚拟机镜像和软件下载

1.2.1 下载配置好 ROS2 环境的 Ubuntu 镜像

使用我们配置好 ROS2 Humble 环境的 Ubuntu 22.04 镜像,无需自行再进行 ROS2 Humble 环境的安装配置,根据后续 ROS2 的教程连接机械臂即可直接进行控制。

下载好后进行解压缩,解压缩后所有的文件都是镜像文件,有一些虚拟机的磁盘文件系统不支持 4G 以上的单独文件,因此将配置好的 Ubuntu 镜像分解成了多个文件。

1.2.2 安装 Oracle VM VirtualBox 虚拟机

下载并安装 Oracle VM VirtualBox,这是一款免费的虚拟机软件,可以让你在自己的电脑上运行虚拟操作系统,我们在 Windows 系统电脑上运行虚拟机来安装 Ubuntu 操作系统,接着在 Ubuntu 操作系统上安装配置 ROS2 来控制机械臂。

需要注意的是,虽然 ROS2 有 Windows 的版本,但是 Windows 版本的 ROS2 相关资料并不多,所以我们默认提供虚拟机的方案来运行 ROS2。

点击 Oracle VM VirtualBox 官方下载链接,安装过程很简单,一直点击下一步即可。如果已安装,则跳过这步。


1.3 镜像加载至虚拟机软件

  1. 在左边工具栏处,点击“新建”。
  2. Ros镜像安装-水印.png

  3. 设置名称,类型设置为“Linux”,版本设置为“Ubuntu(64-bit)”,点击“下一步”。
  4. Ros镜像安装2-水印.png

  5. 内存大小和处理器数量可以自己设置,我这里为默认设置,接着点击“下一步”。
  6. Ros镜像安装3-水印.png

  7. 选择“不添加虚拟硬盘”,点击“下一步”会显示新虚拟电脑的配置,点击“完成”后弹出警告,点击“继续”。
  8. Ros镜像安装4-水印.png
    Ros镜像安装5-水印.png

  9. 选中刚刚创建的虚拟机,选择“设置”。
  10. Ros镜像安装6-水印.png

  11. 选择“存储”,点击控制器最右边的 +号添加虚拟硬盘。
  12. Ros镜像安装7-水印.png

  13. 选择注册,将前面解压缩的 ws.vmdk 镜像文件添加进去后点击右下角的“选择”,确认保存,双击左边的你刚刚创建的虚拟电脑就可以运行了。
  14. Ros镜像安装8-水印.png
    加载ws虚拟镜像.png

2. 机械臂 ROS2 工作空间说明

本教程目前针对 Ubuntu 22.04 镜像的 ROS2 Humble 版本进行说明。根据第一部分安装教程的步骤,此时,您的虚拟机电脑已经运行起来了。在虚拟机电脑中打开 Home 的文件夹,可以看见有个名为 roarm_ws_em0 的文件夹,该文件夹即为机械臂 ROS2 的工作空间。接着可以在 roarm_ws_em0/src 目录下看见有两个功能包。

  • roarm_ws_em0 —— 主要功能包
    • roarm_driver:驱动真实机械臂的通信节点
    • roarm_description:机械臂模型 URDF
    • roarm_moveit:运动学相关配置
    • roarm_moveit_ikfast_plugins:运动学求解器
    • roarm_moveit_cmd:指令控制相关服务
    • roarm_web_app:web端控制
    • moveit_servo:手柄控制
  • roarm_else —— Web 应用相关依赖

该项目的开源链接:roarm_ws_em0,在该开源地址中的 README.md 文件中我们也介绍了教程内容的实现步骤,并且后续如果有功能更新也会更新到该 Github 项目中。


3. 驱动节点控制现实中的机械臂

3.1 查看机械臂连接时的串口设备

  1. 在 Ubuntu 虚拟机电脑中按 Ctrl+Alt+T 打开终端,查看当前 Ubuntu 的串口设备。此时不需要用 USB 线将机械臂与电脑相连。
  2. ls /dev/tty*
  3. 首先将机械臂接通电源,打开机械臂驱动板上的电源开关,用 USB 线将机械臂与电脑连接起来,注意要连接机械臂驱动板中间的 Type-C 接口(边缘的 Type-C 接口是与雷达通信的接口,不与 ESP32 进行通信)。
  4. 点击 Oracle VM VirtualBox 上方的“设备”→“USB”→带有 CP210x 字样的设备名称,该设备名称前出现 ,则代表机械臂连接到虚拟机上。
  5. M2-S连接串口.png
    如果连接机械臂的串口设备时,右边弹出不能挂载到这个设备的提示框,此时将虚拟机的系统关机。
    首先确保你的主机(Windows 系统)可以检测到机械臂的 USB 设备。
    在这个系统镜像的设置里面,找到 USB 设备,勾选 启用 USB 控制器,选择 USB 3.0(xHCI) 控制器,然后点击右侧第二个 icon 添加一个 USB 筛选器,选择带有 CP210x 字样的设备,点击确定。
    再次运行这个镜像,点击窗口上方的 设备 → USB → 查看带有 CP2102N USB 字样的设备前面是否有对号,有则代表挂载成功。
    
  6. 再次在终端中查看当前的 Ubuntu 串口设备,可以看见此时多出来一个 /dev/ttyUSB0 的设备名,这个代表机械臂连接的端口号。
  7. M2-S连接串口1.png


3.2 更改串口设备

在我们的例程中,默认串口设备名称为 /dev/ttyUSB0。如果上一小节查看到的机械臂串口设备名称为 /dev/ttyUSB0,则可以直接跳过本小节,直接进行下一小节的学习。

如果你查到的串口设备名称不是 /dev/ttyUSB0,则需要更改串口设备名称。打开 ~/roarm_ws_em0/src/roarm_main/roarm_driver/roarm_driver/ 这个目录下的 roarm_driver.py 脚本文件,如下图将 /dev/ttyUSB0 改为你的机械臂查看到的串口设备名称。更改完后点击右上角的“Save”保存后关闭该文件。

M2-S更改串口设备名.png


3.3 运行机械臂驱动节点

  1. 在 Ubuntu 中使用 Python 脚本与串口设备通信,需要给串口设备读写权限,在虚拟机终端中输入以下指令来赋予串口权限:
    sudo chmod 666 /dev/ttyUSB0  (密码为系统默认密码:ws)
    如果该指令报错,则参考 3.1 和 3.2 小节确定串口设备号是否正确以及机械臂是否与虚拟机系统连接。
  2. 接着编译机械臂 ROS2 的功能包,编译功能包需要在对应的工作空间下进行编译:
    cd ~/roarm_ws_em0/
    colcon build
    source install/setup.bash
  3. 按 Ctrl+Alt+T 打开一个新的终端窗口,进入机械臂 ROS2 的工作空间,运行 ROS2 的机械臂驱动节点:
    cd ~/roarm_ws_em0/
    ros2 run roarm_driver roarm_driver

    反馈如下即代表运行成功,此时 ROS2 模型关节界面未打开,因此没有其它的反馈:

    M2-S运行机械臂驱动节点.png

成功运行机械臂驱动节点的终端界面不要关闭,接着根据 3.4 小节的内容打开 ROS2 中机械臂模型关节界面。


3.4 查看机械臂模型关节

这里是使用 ROS2 Rviz2 工具来展示机械臂模型和关节角度控制面板的。Rviz2 是 ROS2 的可视化工具,它可以用于展示和调试机器人模型、传感器数据、规划路径等多种信息。通过 Rviz2,我们可以直观地看到机械臂的运动状态和当前位置。此外,Rviz2 还提供了一些工具,如 3D 视图、时间轴、参数调整等,帮助我们更好地理解机器人的行为。

注意:执行该指令后,机械臂将会转动(大臂小臂竖直向上),请勿在机械臂周围放置易碎品,远离儿童。

按 Ctrl+Alt+T 打开一个新的终端窗口,进入机械臂 ROS2 的工作空间,启动 Rviz2 模型界面:

cd ~/roarm_ws_em0/
ros2 launch roarm_description display.launch.py

在启动 Rviz2 后,Rviz2 中的机器人 URDF 会将机械臂的每个关节角度发布到驱动节点中,驱动节点会将这些关节角度编辑为对应 JSON 格式的控制指令发送给机械臂,因此机械臂会转动。同时,也可以看见运行机械臂驱动节点上出现机械臂的每个关节角度信息。

运行机械臂驱动节点和查看机械臂模型关节终端界面,左边为机械臂驱动节点运行界面,右边为查看 Rviz2 机械臂模型关节界面:

M2-S查看模型关节.png

点击左侧的齿轮图标,关节角度控制面板会出现在 Rviz2 模型界面上方:

M2-S查看模型关节1.png

  • 可以通过拖拽控制面板上的滑块,来控制机械臂各个关节转动;
  • Center —— 恢复至 Rviz2 模型界面启动时的初始位置;
  • Randomize —— 机械臂随机运动至某位置。


3.5 Rviz2 中机械臂视角操作

在 Rviz2 中,可以使用鼠标来调整观察机器人模型的视角。

  • 左键点击并拖动,可以在水平面内移动视角。
  • 右键点击并拖动,可以改变观察的方向和角度。
  • 滚动鼠标滚轮,可以调整观察的距离,即放大或缩小视图。
  • 按下鼠标中键(即滚轮键)并拖动,可以在垂直视角方向的平面上移动。

使用这些操作,你可以从任何角度和距离观察机器人模型。


4. Moveit2 中拖拽交互

4.1 Moveit2 简介

MoveIt2 是一个用于机器人运动规划、操作和控制的开源软件。它提供了一套简单的用户接口,可以帮助开发者处理复杂的运动规划问题。

MoveIt2 支持多种算法和策略,包括运动规划、运动执行、运动监控、运动学解析、碰撞检测等。它的强大功能使得它在工业、研究和教育领域都得到了广泛的应用。

MoveIt2 是在 ROS2(Robot Operating System 2)环境下运行的,可以与其他 ROS2 工具和库无缝集成,大大提高了机器人开发的效率和便捷性。

在本教程中,我们将使用 MoveIt2 来控制机械臂的运动。通过拖拽机械臂的末端点,MoveIt2 能够自动计算出机械臂的运动路径,并通过驱动节点控制机械臂的实际运动。


4.2 运行 Moveit2 拖拽交互例程

如果您是跟着前面的教程操作下来的,在运行这个例程之前,需要先关闭前面查看 Rviz2 机械臂模型关节界面,在运行查看 Rviz2 机械臂模型关节的终端窗口中,按 Ctrl+C 进行关闭这个进程。机械臂驱动节点的运行终端不需要进行操作关闭,否则不能控制现实中的机械臂。

注意:执行该指令后,机械臂将会转动(小臂伸向正前方,与水平面平行),请勿在机械臂周围放置易碎品,远离儿童。

接着在关闭运行查看 Rviz2 机械臂模型关节的终端界面中来运行机械臂 Moveit2 拖拽交互的例程,执行以下命令启动 Rviz2:

ros2 launch roarm_moveit interact.launch.py rviz_config:=~/roarm_ws_em0/src/roarm_main/roarm_moveit/config/interact.rviz

启动 Rviz2 后没有显示机械臂,则 更改 Display 窗口内 Fixed Frame 后面的 map,将 map 更改为 base_link,回车确认,如下图。

M2-S拖拽交互.png

接着点击左下角的“Add”,选择“MotionPlanning”,点击“OK”。这样,就可以看到机械臂的模型出行在 Rviz2 可视化界面中了。可以参考 3.5 小节的操作来改变机械臂的视角。

M2-S拖拽交互1.png

现在可以通过拖拽位于机械臂末端的拖拽球或 XYZ 轴来改变机械臂的姿态。拖拽改变姿态之后,需要点击 Rviz2 可视化界面中右侧 Planning 选项卡中的“Plan & Execute”让机械臂按照拖拽的姿态动作执行。执行后需要让机械臂复位至 Rviz2 启动界面的初始位置,则将 Planning 选项卡中的“Goal State”选项更改为“home”,更改后,再次点击“Plan & Execute”让机械臂响应运动。


5. 使用手柄或键盘控制机械臂

本章节介绍如何使用键盘按键或手柄来控制机械臂,该产品 RoArm-M2-S 出厂时并没有附带手柄,您可以自行购买 Xbox 蓝牙手柄,连接至电脑进行控制。

在该章节教程操作之前,需要先关闭上一章节 Moveit2 拖拽交互的例程,在运行Moveit2 拖拽交互例程的终端窗口中,按 Ctrl+C 进行关闭这个进程。机械臂驱动节点的运行终端不需要进行操作关闭,否则不能控制现实中的机械臂。

在关闭 Moveit2 拖拽交互例程的终端界面中输入以下指令开启机械臂控制的相关节点,会打开一个新的 Rviz2 机械臂模型界面:

ros2 launch moveit_servo demo.launch.py


5.1 键盘控制机械臂

按 Ctrl+Alt+T 打开一个新的终端窗口,进入机械臂 ROS2 的工作空间,运行以下命令获取来自键盘的控制指令:

cd ~/roarm_ws_em0/
ros2 run roarm_moveit_cmd keyboardcontrol

保持这个终端窗口为激活状态(即确保操作按键时位于该终端窗口界面),通过以下按键来控制机械臂:

  • 坐标控制
    • 方向键 :X 轴正方向运动;
    • 方向键 :X 轴负方向运动;
    • 方向键 :Y 轴正方向运动;
    • 方向键 :Y 轴负方向运动;
    • ; 键:Z 轴正方向;
    • . 键:Z 轴负方向;
  • 关节控制
    • 数字 1 键:底座关节运动;
    • 数字 2 键:肩关节运动;
    • 数字 3 键:肘关节运动;
    • 数字 4 键:夹爪关节运动;
    • 字母 R 键:切换上述关节控制的运动方向。

最后按字母 Q 键退出操作即可。

M2-S键盘控制.png


5.2 手柄控制机械臂

将手柄接收器接入电脑中,点击 Oracle VM VirtualBox 上方的“设备”→“USB”→带有 XBox 字样的设备名称,该设备名称前出现 √,则代表手柄连接到虚拟机上。可以通过以下手柄按键功能来控制机械臂:

  • 左边的关节控制:
    • 左右按键:底座关节运动;
    • 上下按键:肩关节运动;
  • 右边的关节控制:
    • X、B 按键:肘关节运动;
    • Y、A 按键:夹爪关节运动;
  • XY 轴坐标控制:
    • 左右摇臂:X 轴运动;
    • 上下摇臂:Y 轴运动;


6. 使用 Foxglove 进行 Web 端控制

本章节的 Web 应用基于 Foxglove 提供的组件来实现,你需要注册一个 Foxglove 账号才可以使用,但需要注意的是,有些网络环境受限的地区可能无法访问这个网站,如果无法访问这个网站可以跳过本章教程,可以直接进行第七章节的教程学习,第七章节中的 Web 应用控制机械臂不依赖互联网。


6.1 Foxglove Studio 简介

Foxglove Studio 是一个开源的软件,用于可视化、调试和控制你的机器人。它提供了一个用户友好的界面,让你能够直接与机器人的数据进行交互。Foxglove Studio 支持多种数据格式,包括 ROS(Robot Operating System)消息、JSON、CSV 等。Foxglove Studio 的核心功能包括数据可视化、实时和历史数据查看、布局自定义等。此外,Foxglove Studio 还提供了一个插件系统,允许用户根据需要增加新的功能和工具。


6.2 获取虚拟机 IP 地址并注册 Foxglove 账号

  • 获取虚拟机 IP 地址

在获取虚拟机系统的 IP 地址之前,需要更改虚拟机系统的网络连接方式,点击 Oracle VM VirtualBox 上方的“设备”→“网络”→“网络”,将连接方式改为“桥接网卡”,最后点击“确定”,不能为默认的“网络地址转换(NAT)”,否则查看不到虚拟机系统的 IP 地址。

M2-S改变网络连接方式.png

按 Ctrl+Alt+T 打开一个新终端,获取 IP 地址:

ifconfig

获取设备 enp0s3 中的 inet 后面的 IP 地址,例如:192.168.10.175,记住这个的 IP 地址。

M2-S获取ip地址.png


  • 注册 Foxglove 账号

接着使用与虚拟机同一局域网内的电脑(也可以是运行 VirtualBox 的电脑或者虚拟机系统)访问 Foxglover 账号注册页面


6.3 启动 Foxglove Web 应用

按 Ctrl+Alt+T 打开一个新终端,进入机械臂 ROS2 的工作空间,运行 ROS2 的机械臂驱动节点:

cd ~/roarm_ws_em0/
ros2 run roarm_driver roarm_driver

按 Ctrl+Alt+T 再打开一个新终端,进入机械臂 ROS2 的工作空间,开启机械臂控制的相关节点:

cd ~/roarm_ws_em0/
ros2 launch moveit_servo demo.launch.py

打开第三个新终端,进入机械臂 ROS2 的工作空间,运行 ROS2 中的 Web 应用控制节点:

cd ~/roarm_ws_em0/
ros2 run roarm_moveit_cmd webappcontrol

最后再打开一个新终端,总共需要打开四个终端分别运行不同的工作节点,进入机械臂 ROS2 的工作空间,启动 Foxglove Web 应用:

cd ~/roarm_ws_em0/
ros2 launch foxglove_bridge foxglove_bridge_launch.xml address:=192.168.10.175

需要将上面 address 后的 IP 地址替换成你自己虚拟机系统的 IP 地址(即前面获取到的那个 IP)。


6.4 在 Foxglove Web 应用中实现机械臂模型

这一小节的操作需要在同一局域网内的电脑上,最好是刚刚注册 Foxglove 账号的电脑上,推荐使用谷歌浏览器。

  1. 在Foxglove 的个人用户界面,点击“Open connection”,会弹出一个 Open a new connection 的窗口。 M2-S启动FoxgloveWeb应用.png

  2. 在 Open a new connection 窗口中填写前面获取到的虚拟机 IP 地址。例如:我获取到的虚拟机 IP 地址为 192.168.10.122,则输入以下内容: M2-S启动FoxgloveWeb应用1.png

  3. 在谷歌浏览器地址栏右侧,有一个三角形图标,由于谷歌浏览器默认禁止不安全的脚本运行,所以你需要手动让它允许加载不安全的脚本。 M2-S启动FoxgloveWeb应用2.png

  4. 点击名称为三维的窗口(有网格地面的窗口),左侧会出现三维面板的控制面板,点击该控制面板左侧下方的“自定义图层”,将该列展开,接着再展开 URDF。若将“自定义图层”展开后没有 URDF,则点击“自定义图层”右侧的三个点,选择“添加 URDF”。
    • URDF(Unified Robot Description Format)是一种用于完整描述机器人模型的XML格式。它包括了描述机器人连杆(links)、关节(joints)以及其他物理属性(如摩擦、惯性等)的标签。URDF 在 ROS(机器人操作系统)中被广泛使用,用于3D模型的可视化、碰撞检测、路径规划等功能。
  5. 在 URDF 中的 URL 里填写以下内容,让 Foxglove 直接印用 URDF 文件:
    package://roarm_description/urdf/roarm_description_web_app.urdf
    
  6. 同时确定“自定义图层”中上一个“话题”列表里的“/robot_description”后面的眼睛是关闭状态的(如下图),否则将会现实错误的 URDF 模型(这个是 Foxglove 和 ROS2 通信的一个bug,直接从话题导入 URDF 会导致每个模型会有一个错误的旋转角度)。 M2-S启动FoxgloveWeb应用3.png

这样,在三维窗口中就可以看见现实机器人的模型了,你可以通过鼠标左右键和中键来调整三维窗口中的视图。


6.5 方向盘控制

点击页面左上角的“添加面板”,选择“远程操纵”,会出现一个新的“远程操纵”窗口。

M2-S方向盘控制.png


点击这个“远程操纵”窗口,左侧会出现一个“远程操纵”面板,在“Topic”中选择“/webappcontrol”这个话题。就可以看到在远程操纵窗口内出现一个方向盘的控制按键。

M2-S方向盘控制1.png

注意:如果你的“Topic”里面没有“/webappcontrol”这个话题,你需要在虚拟机内手动关闭 Web 应用控制节点之后再重新运行:ros2 run roarm_moveit_cmd webappcontrol


在左侧的远程操纵面板内,可以分别定义方向盘上下左右按键的功能和方向,然后就可以通过方向盘来控制机械臂了。

  • Field:改变坐标控制的轴
    • linear-x:X 轴方向运动;
    • linear-y:Y 轴方向运动;
    • linear-z:Z 轴方向运动;
  • Value:-1 和 1 这两个值分别代表相反的运动方向,其他值无效。

M2-S方向盘控制2.png


自此,你已经学会了使用 Foxglove Web 应用来控制机械臂了,后续你可以根据 Foxglove 的官方教程再开发其它功能。


7. 基于 ROS2Web_app 的 Web 应用

本章节的 Web 应用与第六章节介绍的 Foxglove 无关,可以关闭除 roarm_driver 机械臂驱动节点以外的全部终端窗口,保证 roarm_driver 节点正常运行。

7.1 ROS2Web_app 项目简介

ROS2Web_app 是一个开源项目,它位于GitHub上。这个项目提供了一个基于 Web 的应用界面,允许用户通过网络浏览器与 ROS2 机器人进行交互。该应用利用了 Web 技术的便利性和广泛性,使得用户无需安装特殊的软件或硬件就能够操作和控制机器人。

ROS2Web_app 的主要功能包括显示机器人的状态信息,接收用户的控制指令,以及发送指令到机器人。此外,它还支持实时视频流,使用户能够实时查看机器人的画面。由于其基于 Web 的特性,ROS2Web_app 可以运行在任何支持现代 Web 浏览器的设备上,包括电脑、平板电脑和智能手机等。

ROS2Web_app 项目的代码开放在 GitHub 上,对于研究人员和开发者来说,这意味着他们可以自由地下载、修改和分发这个项目的代码。这为他们提供了一个强大的工具,用来开发和测试他们自己的ROS2机器人。


7.2 运行 Web 应用

按 Ctrl+Alt+T 打开一个新终端,进入机械臂 ROS2 的工作空间,运行 ROS2 的机械臂驱动节点:

cd ~/roarm_ws_em0/
ros2 run roarm_driver roarm_driver

打开第二个新终端,进入机械臂 ROS2 的工作空间,开启机械臂控制的相关节点:

cd ~/roarm_ws_em0/
ros2 launch moveit_servo demo.launch.py

打开第三个新终端,进入机械臂 ROS2 的工作空间,运行 ROS2 中的 Web 应用控制节点:

cd ~/roarm_ws_em0/
ros2 run roarm_moveit_cmd webappcontrol

打开第四个新终端,进入机械臂 ROS2 的工作空间,运行 ROS2Web 应用的服务器,用于将 Web 应用发布到局域网,同时获取到虚拟机的 IP:

cd ~/roarm_ws_em0/
ros2 web server --no-auth

M2-S运行Web应用.png

打开第五个新终端,进入机械臂 ROS2 的工作空间,运行 Web 应用节点,用于构建应用:

cd ~/roarm_ws_em0/
ros2 run roarm_web_app roarm_web_app

然后在同一局域网的电脑上(也可以是运行虚拟机的电脑),打开谷歌浏览器,在地址栏输入虚拟机的 IP 地址+ :8080/roarm_web_app,例如:

http://192.168.10.104:8080/roarm_web_app

M2-S运行Web应用1.png

可以拖动这个 Web 页面上的圆点,让机械臂进行 XY 轴的控制。我们在这个 Web 页面中实现了比较简单的功能,布置了比较简单的组件,左侧的组件并不能使用上述的 Launch 来控制,用户可根据自己的需求来扩展这些组件的功能。


8. 使用指令控制机械臂

保持 roarm_driver 机械臂驱动节点运行的终端窗口,打开一个新的终端,运行用于指令控制的 Launch 文件,本例程依赖 Moveit2 进行动作规划:

cd ~/roarm_ws_em0/
ros2 launch roarm_moveit_cmd command_control.launch.py rviz_config:=~/roarm_ws_em0/src/roarm_main/roarm_moveit_cmd/config/command_control.rviz

注意:执行该指令后,机械臂将会转动(小臂伸向正前方,与水平面平行),请勿在机械臂周围放置易碎品,远离儿童。

想让 Rviz2 中显示机械臂,可以参考 4.2 运行 Moveit2 拖拽交互例程里面的操作步骤。


8.1 获取当前点位置

开启第三个新的终端,进入机械臂 ROS2 的工作空间,启动用来获取当前位置的节点:

cd ~/roarm_ws_em0/
ros2 run roarm_moveit_cmd getposecmd

再开启第四个终端,进入机械臂 ROS2 的工作空间,调用用来获取当前位置的服务:

cd ~/roarm_ws_em0/
ros2 service call /get_pose_cmd roarm_moveit/srv/GetPoseCmd


8.2 控制机械臂末端运动到指定位置

开启一个新的终端,进入机械臂 ROS2 的工作空间,启动用于运动控制的节点(用于接收目标位置):

cd ~/roarm_ws_em0/
ros2 run roarm_moveit_cmd movepointcmd

再开启一个新的终端,进入机械臂 ROS2 的工作空间,调用用来控制机械臂末端点位置的服务:

cd ~/roarm_ws_em0/
ros2 service call /move_point_cmd roarm_moveit/srv/MovePointCmd {"x: 0.2,y: 0,z: 0"}

xyz 为机械臂目标位置的坐标,单位为 m。你可以通过调用这个服务来控制机械臂运动到目标位置。


8.3 在固定高度上画圆

在 Rviz2 中,点击 Add,添加 RobotModel。

M2-S使用指令画圆.png


在 RobotModel 选项卡内,找到 Description Topic,选择 /robot_description,就会出现 Links 的选项。

M2-S使用指令画圆1.png

在 Links 选项中,找到 link4,展开后勾选 Show Trail,用于查看末端 Link4 的轨迹。

M2-S使用指令画圆2.png

接着在新终端中启动用于画圆的节点:

cd ~/roarm_ws_em0/
ros2 run roarm_moveit_cmd movecirclecmd

调用这个服务,来让机械臂在指定位置画圆:

cd ~/roarm_ws_em0/
ros2 service call /move_circle_cmd roarm_moveit/srv/MoveCircleCmd {"x: 0.2,y: 0,z: 0,radius: 0.1"}

就可以看见 Rviz 2 界面中机械臂画出的圆。


9. 综合使用

9.1 启动相关控制节点

每一个控制节点运行都要在机械臂 ROS2 的工作空间下进行运行。以下节点的运行默认你会在机械臂 ROS2 的工作空间下进行运行,直接说明相关控制节点的运行。

运行机械臂驱动节点:

ros2 run roarm_driver roarm_driver

运行 Moveit2 拖拽交互控制例程:

ros2 launch moveit_servo servo_control.launch.py rviz_config:=/home/ws/roarm_ws_em0/src/roarm_main/roarm_moveit/config/interact.rviz

运行键盘控制节点:

ros2 run roarm_moveit_cmd keyboardcontrol

运行 ROS2 中的 Web 应用控制节点:

ros2 run roarm_moveit_cmd webappcontrol

启动 Foxglove Web 应用:

ros2 launch foxglove_bridge foxglove_bridge_launch.xml address:=本机IP地址

运行 ROS2Web 应用的服务器:

ros2 web server --no-auth

运行 Web 应用节点:

ros2 run roarm_web_app roarm_web_app

9.2 综合使用

9.2.1 拖拽交互

通过拖拽 Rviz2 页面中位于机械臂末端的拖拽球或 XYZ 轴来改变机械臂的姿态。拖拽改变姿态之后,需要点击 Rviz2 可视化界面中右侧 Planning 选项卡中的“Plan & Execute”让机械臂按照拖拽的姿态动作执行。

执行后需要让机械臂复位至 Rviz2 启动界面的初始位置,则将 Planning 选项卡中的“Goal State”选项更改为“home”,更改后,再次点击“Plan & Execute”让机械臂响应运动。

9.2.2 键盘控制

键盘控制需要保持运行键盘控制节点这个终端窗口为激活状态(即确保操作按键时位于该终端窗口界面),通过以下按键来控制机械臂:

  • 坐标控制
    • 方向键 :X 轴正方向运动;
    • 方向键 :X 轴负方向运动;
    • 方向键 :Y 轴正方向运动;
    • 方向键 :Y 轴负方向运动;
    • ; 键:Z 轴正方向;
    • . 键:Z 轴负方向;
  • 关节控制
    • 数字 1 键:底座关节运动;
    • 数字 2 键:肩关节运动;
    • 数字 3 键:肘关节运动;
    • 数字 4 键:夹爪关节运动;
    • 字母 R 键:切换上述关节控制的运动方向。

最后按字母 Q 键退出操作即可。

9.2.3 Web 端控制

Foxglove Web 端控制

在左侧的远程操纵面板内,可以分别定义方向盘上下左右按键的功能和方向,然后就可以通过方向盘来控制机械臂了。

  • Field:改变坐标控制的轴
    • linear-x:X 轴方向运动;
    • linear-y:Y 轴方向运动;
    • linear-z:Z 轴方向运动;
  • Value:-1 和 1 这两个值分别代表相反的运动方向,其他值无效。

M2-S方向盘控制2.png

ROS2Web 应用控制

在同一局域网的电脑上(也可以是运行虚拟机的电脑),打开谷歌浏览器,在地址栏输入虚拟机的 IP 地址+ :8080/roarm_web_app,例如:

http://192.168.10.104:8080/roarm_web_app

M2-S运行Web应用1.png

可以拖动这个 Web 页面上的圆点,让机械臂进行 XY 轴的控制。我们在这个 Web 页面中实现了比较简单的功能,布置了比较简单的组件,左侧的组件并不能使用上述的 Launch 来控制,用户可根据自己的需求来扩展这些组件的功能。

9.2.4 指令控制

具体参考第八章节指令控制的内容


10. Ubuntu 22.04 安装 ROS2 Humble 教程

本章节所介绍的安装方法需考虑网络环境,在网络环境受限的地区本章教程的安装过程大概率不能被正确执行,用户可以尝试更换镜像源来解决,但镜像源质量也存在参差不齐,无法确保能够完美解决问题。因此本章教程不推荐新手使用,建议新手直接使用我们制作好的镜像,参考第一章节 新手安装 ROS2 教程。

不同版本的 Ubuntu 对应不同版本的 ROS2,我们这里安装的 ROS2 是 Humble 版本的,所以 Ubuntu 镜像下载 22.04 版本的。点击 Ubuntu22.04 镜像下载并在 Oracle 上安装,本教程接下来的内容操作都是在 Ubuntu 上的终端里完成的。


10.1 安装 Ubuntu 镜像

默认你已经根据第一章节里的内容安装好了 Oracle VM VirtualBox 虚拟机。

  1. 在左边工具栏处,点击“新建”。
  2. Ros镜像安装-水印.png

  3. 设置名称,类型设置为“Linux”,版本设置为“Ubuntu(64-bit)”,点击“下一步”。
  4. Ubuntu镜像安装-水印.png

  5. 内存大小和处理器数量可以自己设置,我这里为默认设置,接着点击“下一步”。
  6. Ros镜像安装3-水印.png

  7. 选择“现在创建虚拟硬盘”,磁盘空间大小可以自己设置,我这里也是默认,点击“下一步”会显示新虚拟电脑的配置,点击“完成”表示虚拟电脑创建成功。
  8. Ubuntu镜像安装2-水印.png

  9. 双击左边栏中刚刚创建的虚拟电脑启动,启动后会提示“未能启动虚拟电脑,需要加载虚拟光盘安装系统”,在“光驱”位置添加你下载好的 ubuntu22.04 镜像,点击“挂载并尝试启动”。
  10. Ubuntu镜像安装3-水印.png


10.2 ROS 2 Humble 安装

10.2.1 设置源

您需要将 ROS 2 apt 存储库添加到您的系统中。

首先确保 Ubuntu Universe 存储库已启用:

sudo apt install software-properties-common
sudo add-apt-repository universe

现在使用 apt 添加 ROS 2 GPG 密钥:

sudo apt update && sudo apt install curl -y
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg

然后将存储库添加到您的源列表中:

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

10.2.2 安装 ROS 2 软件包

设置存储库后更新 apt 存储库缓存:

sudo apt update

ROS 2 软件包构建在经常更新的 Ubuntu 系统上。始终建议您在安装新软件包之前确保系统是最新的: 设置存储库后更新 apt 存储库缓存:

sudo apt upgrade

安装 ROS 2 Humble 版软件包:

sudo apt install ros-humble-desktop

安装编译器和其它构建 ROS 包的开发工具:

sudo apt install ros-dev-tools

安装 net-tools、moveit2、foxglove,卸载 moveit-servo:

sudo apt install net-tools
sudo apt install ros-humble-moveit-*
sudo apt install ros-humble-foxglove-bridge
sudo apt autoremove ros-humble-moveit-servo-*

添加 ROS 2 到 source 源启动脚本,这样不需要每次打开新的 shell 终端获取 setup 文件:

echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc

更多有关 ROS 2 Humble 的教程可以参考 ROS 2 官方文档

10.2.3 安装机械臂 ROS 2 的工作空间包

安装 git 工具:

sudo apt install git

从 GitHub 上克隆该项目:

git clone https://github.com/DUDULRX/roarm_ws_em0.git

10.2.4 安装 Python3 库

  • 国内环境:
sudo apt install python3-pip
cd ~/roarm_ws_em0
python3 -m pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
  • 国外环境:
sudo apt install python3-pip
cd ~/roarm_ws_em0
python3 -m pip install -r requirements.txt


10.3 编译机械臂 ROS 2 软件包

每一次编译都要在机械臂 ROS 2 的工作空间下才能进行。

10.3.1 初次编译

cd ~/roarm_ws_em0
sudo chmod +x build_first.sh
. build_first.sh

初次编译过程耗时较长,初次编译通过后此时就可以根据前面教程的内容进行使用机械臂了,在编译过程中有些包会有 stder output 可以忽略掉。

10.3.2 后续编译和使用

每次对某个包的代码做了变更后,都需要重新编译后再使用。

cd ~/roarm_ws_em0
. build_common.sh

仅修改了 roarm-web-app 功能包的编译:

cd ~/roarm_ws_em0
. build_roarm_web_app.sh


10.4 Ubuntu 开启 SSH 服务

sudo apt update
sudo apt install net-tools
sudo apt install openssh-server
sudo service ssh start

之后你就可以使用其它设备通过 SSH 远程连接访问这个 Ubuntu 虚拟机了。