【如何使用ROS和Arduino控制机器人手臂】

1. 前言

在本系列关于机械臂控制的这一部分中,学习使用 Arduino 和 ROS 构建一个非常简单的机械臂。
在这里插入图片描述

机器人操作系统(ROS)是领先的机器人控制中间件/软件。完整的 ROS 生态系统提供了实现机器人运动学、动力学、运动控制、运动规划、感知和仿真算法所需的所有工具。在上一篇文章《如何将Arduino与机器人操作系统(ROS)一起使用》中,我们学习了如何将ROS与Arduino一起使用,并使用ROS模拟虚拟机器人手臂上的随机运动序列。

本文又迈出了一步,使用 Arduino 构建一个非常简单的机器人手臂,并使用 ROS 进行实时机器人控制和运动。

Robotic_Arm_AK_MP_image1.png

本文又迈出了一步,使用 Arduino 构建一个非常简单的机器人手臂,并使用 ROS 进行实时机器人控制和运动。

2. 设计机械臂

我建造了一个简单的5自由度机器人手臂。该机器人只有由SG90低扭矩和廉价的爱好伺服电机驱动的蜗壳关节。这些电机是位置控制的,需要PWM信号才能运动。对于伺服系统的低级控制,使用Arduino Uno。

你可以在我的GitHub上找到代码。此处使用的硬件组件包括:

  1. SG90伺服电机 (5)
  2. Arduino Uno R3 开发板
  3. 用于制造机器人手臂链接的支架
    我构建了机器人的3D CAD模型,用于测量和3D打印。我用纸板制作了机器人,但鼓励读者使用CAD模型并3D打印零件。CAD文件可以在Github存储库中找到。

Robotic_Arm_AK_MP_image5.png

机器人3D模型。第一张图片是机器人的原位(图片来源-原图)

上一篇文章中关于机器人操作系统(ROS)中的机械臂仿真的机器人手臂URDF是一个非常基本的设计。对于这个项目,我使用伺服和接头的粗略近似创建了一个 URDF。读者可以尝试使用存储库中提供的 STL 文件创建 URDF。机器人的虚拟模型具有相同的视觉和碰撞链接。机器人关节被命名为joint_0、joint_1、joint_2、joint_3,并在机器人底座上joint_4 joint_0。

注意: 第一个用于joint_0的伺服器位于圆盘平台内。它在 URDF 中不可见,但可以在 CAD 模型的分解视图中看到。

Robotic_Arm_AK_MP_image4.png

机器人URDF模型。伺服器表示为合并的斑点,蓝色末端执行器仅用于可视化目的。- (图片来源 - 原始)

3. 构建机器人硬件

为了便于制造,我使用了容易获得的纸板。只有几个部分是我用强力胶剪下来组装在一起的。您可以参考 CAD 文件进行测量。

这里使用的SG90伺服电机的角度范围为0-200°。URDF文件中的关节角度限制在家乡以±“90°”为中心。归位偏移量在Arduino代码中完成。

注意: 将连杆安装到舵机时,请确保将舵机驱动到90°的原始位置,以使连杆在任一旋转方向上具有±“90°”运动。

4. 将机械臂与Arduino连接

伺服电机需要PWM信号进行运动,Arduino Uno上的几个数字引脚能够产生PWM信号。这些数字引脚用于连接伺服系统。下图显示了连接。

Robotic_Arm_AK_MP_image6.png

伺服电机与Arduino的连接(图片来源 - Fritzing的原始内容)

5. 设置基础结构

ROS包的文件结构-(图片来源-原始)

cad - 3D 机器人模型的所有 STL 文件。
CMakeLists.txt - CMake 元构建系统的脚本
robot-arm-control-arduino - 与ROS节点通信的Arduino代码
启动 - 包含 Rviz 模拟器的启动文件
src - 包含将联合指令发布到 Arduino 的节点
urdf - 包含机器人的 URDF 模型
rviz - 包含 Rvix 模拟器的默认配置

6. 代码和说明

Robotic_Arm_AK_MP_image3.png

ROS指令流水线(图片来源-原文)

6.1 启动文件

启动文件类似于上一篇文章中使用的启动文件。它启动robot_state_publisher节点,并在 Rviz 上可视化 URDF 模型。它还启动joint_state_publisher节点,该节点创建一个带有滑块的GUI,以控制伺服的每个关节。这些关节指令通过便于通信以控制真实机器人的serial_node发布到robot_state_publisher以及Arduino(以了解机器人所需的关节角度)使用的joint_states主题。

6.2 Arduino Code

Arduino 代码是不言自明的,并且注释很好,但对于想要扩展代码的读者,这里有一些建议:

  • 在 loop() 函数中,调用 node_handle.spinOnce() 是为了确保 ROS 处理所有消息、订阅者回调和其他缓冲区。读者可以使用 node_hanlde.spin() 在 Arduino loop() 方法之外进行无限循环。
  • 在 setup() 方法中,在 node_handle() 上调用 init() 之前设置波特率很重要,否则波特率设置不正确并导致通信问题。
  • 调用 writeServos() 来更新伺服位置直接将伺服位置设置为使用所需的值,从而导致抖动。读卡器可以实现插值或轮廓运动,以实现更平滑的运动。
    此处使用的Arduino Uno具有低缓冲区和内存,当使用多个内存消耗消息时,这会导致性能问题。切换到Arduino Mega以避免这种情况。

6.3 程序执行

通过USB电缆将Arduino Uno连接到笔记本电脑,并确认该板出现在Arduino IDE的可用串行端口列表中。编译代码,选择板类型,并将其上传到板。

上传代码后,同时在机器上的多个终端中执行以下命令。

启动 ROS 主控 - roscore
在机器上运行 rosserial 客户端 - rosrun rosserial_python serial_node.py _port:=/dev/tty<USB# 或 ACM#> _baud:=115200
串行端口在运行时确定为 ttyUSB 或 ttyACM。 可以找到确切的端口号
来自 Arduino IDE 或使用 dmesg | grep tty。
运行启动文件以模拟和控制机器人。- ROS发射机器人-手臂-控制-ROS模拟发射
Arduino现在可以看到joint_states主题以及GUI发布到它的数据,从而控制机器人上的伺服系统。

7. 结论

将Arduino和ROS与实际应用程序接口是非常有趣的,它为探索ROS中的严格软件开发提供了机会。在本文之前,我们控制机器人处于联合状态以进行远程操作,但机器人手臂控制的真正本质在于使用系统的运动学和动力学。

  • 1
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ros_arduino_bridge 是一个 ROS 软件包,它可以将 Arduino 板与 ROS 系统进行通信。下面是关于 ros_arduino_bridge 的安装和使用步骤: 安装: 1. 首先,在你的系统上安装 Arduino IDE。你可以从 Arduino 官方网站下载并安装适合你操作系统的版本。 2. 确保你的系统上已经正确安装了 ROS. 如果没有,请按照 ROS 官方网站的说明进行安装。 3. 在 ROS 中创建一个工作空间,可以使用以下命令: ``` mkdir -p ~/ros_arduino_bridge_ws/src cd ~/ros_arduino_bridge_ws/src catkin_init_workspace ``` 4. 将 ros_arduino_bridge 软件包克隆到你的工作空间中的 src 目录下: ``` git clone https://github.com/hbrobotics/ros_arduino_bridge.git ``` 5. 使用以下命令编译并安装软件包: ``` cd ~/ros_arduino_bridge_ws catkin_make source devel/setup.bash ``` 使用: 1. 首先,打开 Arduino IDE,并将你的 Arduino 板连接到电脑上。 2. 使用 Arduino IDE 打开 ros_arduino_bridge 软件包中的 Arduino 代码文件。代码文件位于 ros_arduino_firmware 文件夹中。 3. 在 Arduino IDE 中按下上传按钮将代码上传到你的 Arduino 板上。 4. 在终端中,使用以下命令启动 ros_arduino_bridge: ``` roslaunch ros_arduino_bridge arduino.launch ``` 5. 现在,你可以通过发布 ROS 消息来与 Arduino 板进行通信。例如,可以使用 rostopic 命令发布消息。可以通过查看软件包文档了解更多关于 ROS 消息和话题的信息。 以上就是关于安装和使用 ros_arduino_bridge 的简要步骤。通过这个软件包,你可以在 ROS 系统中与 Arduino 板进行通信并控制各种传感器和执行器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值