结合大象机器人六轴协作机械臂myCobot 280 ,解决特定的自动化任务和挑战!(上)

项目简介

本项目致力于探索和实现一种高度集成的机器人系统,旨在通过结合现代机器人操作系统(ROS)和先进的硬件组件,解决特定的自动化任务和挑战。一部分是基于Jetson Orin主板的LIMO PPRO SLAM雷达小车,它具备自主导航、地图构建和路径规划的能力;另一部分是Mycobot 280 M5机械臂,这是一个具有六自由度、工作半径280mm的紧凑型机械臂,能够进行精确的物品搬运和操作。

通过将这两部分紧密集成,我们创建了一个能够执行复杂任务的复合机器人系统,如自动化物品传送、环境监测、以及其他需要高度自主性和操作灵活性的应用场景。

项目的开发过程中,我们深入探讨了ROS的强大功能,包括但不限于使用move_base实现的自主导航,以及gmappping_ros进行的实时SLAM(同时定位与地图构建).还涉及到机械臂的控制和计算机视觉技术的应用,用于物体识别和环境感知,从而提高机器人的操作智能和适应性。

项目希望能够为技术爱好者、教育工作者和研究人员提供一个实用的参考,激发更多的创新思路和应用探索。

技术和硬件概述

myCobot 280 M5Stack

myCobot 280 是由Elephant Robotics 开发的6自由度的协作形机械臂,设计灵活且功能强大,特别适合用于教育,研究等场景。

myCobot 280 M5支持多种编程和控制方式,适用于各种操作系统和编程语言,包括:

主控和辅控芯片:ESP32

性能:工作半径280mm,

支持蓝牙(2.4G/5G)和无线(2.4G 3D Antenna)

多种输入和输出端口

支持自由移动、关节运动、笛卡尔运动、轨迹录制和无线控制

兼容操作系统:Windows、Linux、MAC

支持编程语言:Python、C++、C#、JavaScript

支持编程平台和工具:RoboFlow、myblockly、Mind+、UiFlow、Arduino、mystudio

支持通信协议:串口控制协议、TCP/IP、MODBUS 

这些特性使myCobot 280 M5成为一个多功能、易于使用且适用于多种应用场景的机器人解决方案。

LIMO Pro

松灵机器人LIMO代表了移动机器人领域的一项创新,将灵活性和强大的功能集成于一个紧凑的平台之中。它是专为机器人教育、功能研发及产品开发而设计的全球首款ROS开发平台,能够适应更广泛的场景并满足行业应用的需求。以下是对Limo Pro硬件和技术特性的详细概述:

运动模态

  • 四轮差速- 阿克曼转向- 履带型移动- 麦克纳姆轮移动

场景适用性

  • 适用于多种实拟教学和测试环境- 从室内平整地面到复杂地形均能灵活应对

处理器

  • NVIDIA Jetson Orin Nano

传感器配置

  • EAI Tmini Pro激光雷达 - 深度相机

主要功能

  • 精确的自主定位 - SLAM建图 - 路线规划 - 自主避障 - 自主倒车入库 - 红绿灯识别

LIMO利用激光雷达和深度相机进行环境感知,结合NVIDIA Jetson Orin Nano的强大计算能力,实现高精度的SLAM建图和自主导航。LIMO不仅作为移动平台执行复杂的导航和搬运任务,其多模态移动能力也大大增强了机器人系统的适用范围和灵活性。结合Mycobot 280 M5机械臂,LIMO为自动化应用提供了一个高效、可靠的解决方案,无论是在机器人教育、研发还是产品开发领域,都展现出了巨大的潜力和价值。

软件架构

软件架构主要分为:导航和建图,目标检测,机械臂控制,以及系统集成和通信。这些部分通过ROS(robot operating system)框架进行整合,利用ROS的通信机制(话题,服务,动作)实现模块间的交互。

ros的通信方式

下图是整个项目的软件架构图,我们来一起来介绍一下具体的功能。

整体主要分为三个模块,一个是LIMO PRO的功能,二是机器视觉功能处理,三是机械臂的功能。

LIMO PRO Function

Gmapping:

Gmapping是基于滤波SLAM框架的常用开源SLAM算法。Gmapping有效利用了车轮里程计信息,对激光雷达的频率要求不高,在构建小场景地图时,所需的计算量较小且精度较高.

建了地图之后就可以在地图上进行定位导航了,这一部分的功能主要运用到机器人定位和路径规划,ROS提供了一下两个功能包:

(1)move_base:实现机器人导航中的最优路径规划。

(2)amcl:实现二维地图中的机器人定位。

在上述的两个功能包的基础上,ROS提供了一套完整的导航框架.

机器人只需要发布必要的传感器信息和导航的目标位置,ROS即可完成导航功能。在该框架中,move_base功能包提供导航的主要运行、交互接口。为了保障导航路径的准确性,机器人还要对自己所处的位置进行精确定位,这部分功能由amcl功能包实现。

在导航的过程中,运用了两种算法DWA和TEB算法,这两种算法分别处理全局路径和局部路径规划,来保证小车能够安全的前进到目的地,避免与障碍物发生碰撞。

myCobot 280 Function

ROS主要支持python和C++两种编程语言。机械臂的控制主要是基于python当中的pymycobot API 库。 这个功能很全面的提供了mycobot 280 的控制方法,下面主要介绍几个常用的方法:

pymycobot API:

下面的两个方法能够控制机械臂关节的角度来控制机械臂运动,能单独控制某个关节的角度,也能够控制全部关节的角度来运动。

send_angle(id,angle,speed)
send_angles(angle_list,speed,mode)

对于要执行一些抓去运动来说,角度的控制是远远不够大的,所以pymycobot还提供了坐标控制,能够控制机械臂末端在空间上的运动。

send_coord(id,coord,speed)
send_coords(coords, speed, mode)

同样是两个控制方法第一个可以单个控制机械臂末端X,Y,Z,RX,RY,RZ方向的姿态,这样可以控制末端机械臂的坐标可以更方便我们做一些抓取的动作。

pymycobot是其中的一种控制方式,比较方便使用。还有一种控制方式是基于ROS框架里边的MoveIt,它是一个功能强大大的机器人运动规划框架,包括路径规划,运动控制,碰撞检测,运动学计算等等。下面是一个在MoveIt当中的演示。

Target Detection

vision_opencv - ROS Wiki

此外我们还要对视觉进行处理,在ROS中,opencv_ros和image_transport是处理图像数据的重要工具和库,它们在机器人视觉系统和图像处理中扮演着关键角色。

实际上,是使用‘cv_bridge’提供了ROS 和OpenCV之间的接口,cv_bridge允许在ROS消息和OpenCV图像格式之间进行转换,从而可以在ROS框架中使用OpenCV进行图像处理。

在ROS中使用OpenCV时,图像数据通常是作为ROS消息通过话题发布和订阅的,因此需要使用cv_bridge来转换数据格式。下面是一个简单的示例,展示了如何在ROS节点中订阅图像话题,并使用OpenCV对图像进行处理:

import rospy
from sensor_msgs.msg import Image
from cv_bridge import CvBridge, CvBridgeError
import cv2

def image_callback(msg):
    try:
        # Convert ROS image messages to OpenCV image format
        cv_image = bridge.imgmsg_to_cv2(msg, "bgr8")
    except CvBridgeError as e:
        print(e)
    
    # Process the image, such as converting it to grayscale
    gray = cv2.cvtColor(cv_image, cv2.COLOR_BGR2GRAY)
    
    # display image
    cv2.imshow("Image window", gray)
    cv2.waitKey(3)

# Initialize ROS node
rospy.init_node('image_listener')

# create CvBridge
bridge = CvBridge()

# Subscribe to image topics
image_sub = rospy.Subscriber("/camera/rgb/image_raw", Image, image_callback)

# Entering the ROS event loop
rospy.spin()

虽然在ROS环境中使用OpenCV进行图像处理引入了数据格式转换和节点通信的额外步骤,但这种方式也带来了更高的模块化和系统集成的灵活性,使得图像处理能够更加方便地与机器人的其他系统和功能集成。

场景介绍

该项目旨在实现一个继承的自动动画系统,其中包括一个LIMO pro 和 一个mycobot 280 M5。系统设计使得Limo Pro能够自主导航至指定位置,到达后,Mycobot 280 M5机械臂执行抓取任务,完成后再返回到起始点或另一个特定位置。

项目流程

  1. 启动与初始化
    1. 系统启动时,先进行自检,包括Limo Pro的导航系统和Mycobot 280 M5机械臂的功能检查。
  2. 导航至目标点
    1. 利用Limo Pro上的SLAM技术和导航算法,根据预设或动态输入的坐标,规划一条到达目标点的最优路径。
    2. Limo Pro自主避开障碍物,沿着规划的路径移动至目标点。
  3. 执行抓取任务
    1. 到达目标点后,使用Limo Pro上的传感器定位目标物体。
    2. Mycobot 280 M5机械臂根据目标物体的位置,执行抓取动作。这一步骤可能涉及精确的运动规划,确保抓取成功。
  4. 返回特定位置
    1. 完成抓取任务后,Limo Pro再次规划路径,返回到起始点或移动至另一个指定的位置,以进行物品交付或完成任务。

总结

本系列文章被划分为两个部分:首篇文章主要介绍了项目的概念设计、系统架构以及关键组件的选择,为读者提供了一个全面的项目概览和技术背景。接下来的文章将深入探讨项目的技术细节,包括软件架构的构建、关键技术的应用、系统调试过程以及在开发过程中遇到的挑战和解决方案。

在下一篇文章中,我们将正式进入项目的技术内核,分享实际的编码实践、调试技巧以及面对项目挑战时的思考和解决策略。敬请期待下篇文章,我们将一起深入这个集成自主导航和机械操作的机器人项目,探索技术的深度与广度。

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-09 22:22:11       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-09 22:22:11       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-09 22:22:11       87 阅读
  4. Python语言-面向对象

    2024-03-09 22:22:11       96 阅读

热门阅读

  1. python3 多进程讲解 multiprocessing

    2024-03-09 22:22:11       38 阅读
  2. flink:自定义数据分区

    2024-03-09 22:22:11       44 阅读
  3. Python中的new和call方法

    2024-03-09 22:22:11       45 阅读
  4. 物联网常见协议篇

    2024-03-09 22:22:11       157 阅读
  5. nginx作为tcp的负载均衡

    2024-03-09 22:22:11       43 阅读
  6. C++从零开始的打怪升级之路(day44)

    2024-03-09 22:22:11       41 阅读
  7. logstash和elasticsearch的几种交互接口

    2024-03-09 22:22:11       42 阅读