结合大象机器人六轴协作机械臂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再次规划路径,返回到起始点或移动至另一个指定的位置,以进行物品交付或完成任务。

总结

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/432332.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024-03-05 linux 分区老显示满,Use 100%,原因是SquashFS 是一种只读文件系统,它在创建时就已经被填满,所有空间都被使用。

一、这两天一直纠结一个问题,无论怎么修改,linux 分区老显示满,Use 100%,全部沾满。如下图的oem分区。 二、导致出现上面的原因是:SquashFS文件系统里的空间利用率总是显示为100%。 三、SDK里面也说明SquashFS文件系统…

Linux笔记--make

使用上一节的 main.c、add.c、sub.c文件进行编译,编译的过程有很多步骤,如果要重新编译,还需要再重来一遍,能不能一步完成这些步骤?将这些步骤写到makefile文件中,通过make工具进行编译 一个工程中的源文件不计其数&a…

java-ssm-jsp-大方县粮油购销有限公司粮食收购管理系统

java-ssm-jsp-大方县粮油购销有限公司粮食收购管理系统 获取源码——》公主号:计算机专业毕设大全

Maven【5】在IDEA环境中配置和使用Maven

文章目录 【1】创建父工程1.创建 Project2.开启自动导入 【2】配置 Maven 信息【3】创建 Java 模块工程1.创建2.maven命令操作 【4】创建 Web 模块工程1.创建模块2.Web设定 【1】创建父工程 1.创建 Project 按照idea工程的布局,project相当于父工程,里…

【RISC-V 指令集】RISC-V 向量V扩展指令集介绍(二)-向量元素到向量寄存器状态的映射

1. 引言 以下是《riscv-v-spec-1.0.pdf》文档的关键内容: 这是一份关于向量扩展的详细技术文档,内容覆盖了向量指令集的多个关键方面,如向量寄存器状态映射、向量指令格式、向量加载和存储操作、向量内存对齐约束、向量内存一致性模型、向量…

技术选型思考:分库分表和分布式DB(TiDB/OceanBase) 的权衡与抉择

在当今数据爆炸的时代,数据库作为存储和管理数据的核心组件,其性能和扩展性成为了企业关注的重点。随着业务的发展和数据量的不断增长,传统的单库单表架构逐渐暴露出性能瓶颈和扩展性限制。为了应对这些挑战,企业常常需要在分库分…

【操作系统概念】 第3章:进程

文章目录 0.前言3.1进程概念3.1.1 进程3.1.2 进程状态3.1.3 进程控制块(PCB) 3.2、进程调度3.2.1 调度队列3.2.2 调度程序3.2.3 上下文切换 3.3 进程操作3.3.1 进程创建3.3.2 进程终止 3.4 进程间通信 0.前言 早期的计算机一次只能执行一个程序。这种程序…

Nginx 可视化管理软件 Nginx Proxy Manager

一、简介 Nginx Proxy Manager 是一款开源的 Nginx 可视化管理界面,基于 Nginx 具有漂亮干净的 Web UI 界面。他允许用户通过浏览器界面轻松地管理和监控 Nginx 服务器,可以获得受信任的 SSL 证书,并通过单独的配置、自定义和入侵保护来管理…

备战蓝桥杯---动态规划的一些思想2

话不多说,直接看题: 1.换根DP: 我们肯定不能对每一个根节点暴力求,我们不妨先求f[1],我们发现当他的儿子作为根节点时深度和为f[1](n-cnt[i])-cnt[i](cnt[i]表示以i为根的节点数),这样子两遍DFS…

CSS的三种定位,web前端开发入门学习

正文 js逻辑判断 1)请写出下面的答案? 内存泄漏 1)哪些操作会造成内存泄漏? 2)js内存泄漏的解决方式 dom 1)dom是哪种基本的数据结构? 2)dom操作的常用api有哪些? 3)dom节点的attribute和property有何区别? 4)dom结构操作/ …

相机类型的分辨率长宽、靶面尺寸大小、像元大小汇总

镜头的靶面尺寸大于等于相机靶面尺寸。 相机的芯片长这样,绿色反光部分(我的手忽略): 基本所有像素的相机的靶面大小都可以在这个表格里面找到。 镜头的靶面尺寸在镜头外表上可以找到,选型很重要!

Mysql80服务无法启动请输入Net helpMsg3534以获得更多的帮助

起因&情景: 朋友正在操作数据库,然后电脑突然死机,再重启电脑后启动数据库服务报: 然后朋友尝试各种操作都没有办法正常启动, 一、网上解决方案:(先别操作) 1 删掉&#xff1a…

吴恩达deeplearning.ai:机器学习的开发过程与优化方法

以下内容有任何不理解可以翻看我之前的博客哦:吴恩达deeplearning.ai专栏 我想在接下来分析下开发机器学习系统的过程,这样当你自己动手时,能够做出更加正确的判断。 机器学习开发的迭代 Iterative loop of ML development 决定模型架构 第…

惯性导航 | 测量方程中的噪声模型与离散时间噪声模型

惯性导航 | 测量方程中的噪声模型与离散时间噪声模型 IMU测量方程中的噪声模型IMU的离散时间噪声模型 IMU测量方程中的噪声模型 在大多数系统中,IMU的噪声由两部分组成:测量噪声(Measurement Nosie)与零偏(Bias&#…

【Numpy】给数组增加一个维度

【Numpy】给数组增加一个维度 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到您的订阅和支持~ 💡 创…

【Mining Data】收集数据(使用 Python 挖掘 Twitter 数据)

@[TOC](【Mining Data】收集数据(使用 Python 挖掘 Twitter 数据)) 具体步骤 第一步是注册您的应用程序。特别是,您需要将浏览器指向 http://apps.twitter.com,登录 Twitter(如果您尚未登录)并注册新应用程序。您现在可以为您的应用程序选择名称和描述(例如“Mining Demo”…

第九篇:– 过程发现(Process Discovery)是如何赋能数字化市场营销全过程?- 我为什么要翻译介绍美国人工智能科技巨头IAB公司

IAB平台,使命和功能 IAB成立于1996年,总部位于纽约市。 作为美国的人工智能科技巨头社会媒体和营销专业平台公司,互动广告局(IAB- the Interactive Advertising Bureau)自1996年成立以来,先后为700多家媒体…

MySql、Navicat 软件安装 + Navicat简单操作(建数据库,表)

一、MySql、Navicat 软件安装 及正常使用 MySql下载+安装: 检查安装情况: 配置环境变量: 搞定了!!! 可以登陆试哈哈哈 连接navicat 开始创建数据库 二、 商品种类表 - commoditytype int …

【排序算法】深入理解归并排序算法:从原理到实现

目录 1. 引言 2. 归并排序算法原理 3. 归并排序的时间复杂度分析 4. 归并排序的应用场景 5. 归并排序的优缺点分析 5.1 优点: 5.2 缺点: 6. Java、JavaScript 和 Python 实现归并排序算法 6.1 Java 实现: 6.2 JavaScript 实现&…

Mybatis-Plus——04,自动填充时间(新注解)

自动填充(新注解) 一、数据库添加两个字段二、实体类字段属性上增加注解三、编写填充器四、查看结果4.1 插入结果4.2 修改结果 五、同步修改5.1实体类属性改成 INSERT_UPDATE5.2 在填充器的方法这里加上 updateTime5.3 查看结果————————创作不易…