项目简介
本项目致力于探索和实现一种高度集成的机器人系统,旨在通过结合现代机器人操作系统(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硬件和技术特性的详细概述:
运动模态 |
|
场景适用性 |
|
处理器 |
|
传感器配置 |
|
主要功能 |
|
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机械臂执行抓取任务,完成后再返回到起始点或另一个特定位置。
项目流程
- 启动与初始化:
- 系统启动时,先进行自检,包括Limo Pro的导航系统和Mycobot 280 M5机械臂的功能检查。
- 导航至目标点:
- 利用Limo Pro上的SLAM技术和导航算法,根据预设或动态输入的坐标,规划一条到达目标点的最优路径。
- Limo Pro自主避开障碍物,沿着规划的路径移动至目标点。
- 执行抓取任务:
- 到达目标点后,使用Limo Pro上的传感器定位目标物体。
- Mycobot 280 M5机械臂根据目标物体的位置,执行抓取动作。这一步骤可能涉及精确的运动规划,确保抓取成功。
- 返回特定位置:
- 完成抓取任务后,Limo Pro再次规划路径,返回到起始点或移动至另一个指定的位置,以进行物品交付或完成任务。
总结
本系列文章被划分为两个部分:首篇文章主要介绍了项目的概念设计、系统架构以及关键组件的选择,为读者提供了一个全面的项目概览和技术背景。接下来的文章将深入探讨项目的技术细节,包括软件架构的构建、关键技术的应用、系统调试过程以及在开发过程中遇到的挑战和解决方案。
在下一篇文章中,我们将正式进入项目的技术内核,分享实际的编码实践、调试技巧以及面对项目挑战时的思考和解决策略。敬请期待下篇文章,我们将一起深入这个集成自主导航和机械操作的机器人项目,探索技术的深度与广度。