0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

大象机器人科技 来源:大象机器人科技 作者:大象机器人科技 2024-03-05 15:08 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

LimoPro小车建图导航

引言

前景提要:我们在上文介绍了使用LIMOcobot实现一个能够执行复杂任务的复合机器人系统的应用场景的项目,从以下三个方面:概念设计、系统架构以及关键组件。

本文主要深入项目内核的主要部分,同样也主要分为三个部分:机械臂的视觉抓取,LIMOPro在ROS中的功能,建图导航避障等,以及两个系统的集成。

设备准备

myCobot280M5stack

myCobotAdaptiveGripper

myCobotCameraFlange2.0

LIMOPRO

机械臂视觉抓取

这是机械臂安装AdaptiveGripper,和cameraflange2.0之后的样子。

wKgZomXmtSiAHzpTAApIvYD-Frc334.png

我们是用的cameraflange2.0是一款2D的相机,他并不能够依靠他相机本身来获取到一个物体的三维(长宽高),但我们可以使用标记物来获得到目标物体的都长宽高。常见的有ArUco,STag,AR码,AprilTags。今天我们用STag算法来做视觉识别。

STag标记系统

STag是一个为了高稳定性和精确的三位定位而设计的标记系统。它特别适用于环境中有遮挡和光照变化的情况。

下面有一个视频展示了STag标记码,ARToolKit+,ArUco,RUNE-Tag码在同一个环境下的识别效果。

https://www.youtube.com/watch?v=vnHI3GzLVrY

可以从视频中看出来STag对环境变化的强大适应性和在复杂场景下的高可靠性,使其成为在要求高精度跟踪和定位的应用中的首选。还有一篇论文专门讲解STag稳定的基准标记系统,感兴趣的可以自己点击链接去了解一下。

https://arxiv.org/abs/1707.06292

wKgaomXmtUKAH2EiABAwYsBdoT0414.png

STag系统可以是适配与ROS,有ROS软件包,用的是c++编写的,也能够支持python进行使用。

C++/ROS:GitHub - bbenligiray/stag: STag: A Stable Fiducial Marker System

Python:GitHub - ManfredStoiber/stag-python: Python Package for STag - A Stable, Occlusion-Resistant Fiducial Marker System

用python简单写一个例子

importcv2
importstag
importnumpyasnp

#加载相机参数
camera_params=np.load("camera_params.npz")
mtx,dist=camera_params["mtx"],camera_params["dist"]

#初始化STag检测器
stag_detector=stag.detectMarkers(mtx,dist)

#初始化视频捕获
cap=cv2.VideoCapture(0)
whilecap.isOpened():
ret,frame=cap.read()
    if notret:
        break
    
    #应用相机校正(可选)
frame_undistorted=cv2.undistort(frame,mtx,dist, None,mtx)
    #检测STag标记
    (corners,ids,rejected_corners) =stag.detectMarkers(frame_undistorted, 21)
    #绘制检测到的标记及其ID
stag.drawDetectedMarkers(frame_undistorted,corners,ids)
    #绘制被拒绝的候选区域,颜色设为红色
stag.drawDetectedMarkers(frame_undistorted,rejected_corners,border_color=(255, 0, 0))

    #显示结果
cv2.imshow("STagDetection",frame_undistorted)

    ifcv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()
wKgZomXmuS6AMXEzAAn4aQf7OrY808.png

标记了STag码之后可以获得标记码四个角的参数,

(array([[[257., 368.],
        [185., 226.],
        [345., 162.],
        [420., 302.]]],dtype=float32),)

给定坐标过后,可以用opencv的‘cv2.solvePnP'函数来计算标记相对于相机的旋转和偏移量。这个函数需要标记的3D坐标(在物理世界中的位置)和相应的2D图像坐标(即检测到的角点),以及相机的内参和畸变系数。solvePnP会返回旋转向量(rvec)和平移向量(tvec),它们描述了从标记坐标系到相机坐标系的转换。这样,就可以根据这些参数计算出标记的位置和朝向。

以下是伪代码方便理解。

defestimate_pose(corners):
#DosomecalculationswithPnP,camerarotationandoffset
returnrvec,tvec
    
defconvert_pose_to_arm_coordinates(rvec,tvec):
#将旋转向量和平移向量转换为机械臂坐标系统中的x,y,z,rx,ry,rz
returnx,y,z,rx,ry,rz
    
defconvert_grab(object_coord_list):
#Dosomecalculationstoconvertthecoordinatesintograspingcoordinatesfortheroboticarm
returngrab_position
    
    
cap=cv2.VideoCapture(0)
whilecap.isOpened():
ret,frame=cap.read()
ifnotret:
break
        
    
maker=(corners,ids,rejected_corners)=stag.detectMarkers(image,21)
    
rvec,tvec=stag.estimate_pose(marker)
    
object_coord_list=convert_pose_to_arm_coordinates(rvec,tvec)
grab_position=convert_grab(object_coord_list)
mycobot.move_to_position(grab_position)
机械臂控制

以上的代码就是大概的抓取的流程,比较复杂的部分解决了,接下来我们处理机械臂的运动控制,用到的是pymycobot库

frompymycobotimportMyCobot

#Createaninstanceandlinktheroboticarm
mc=MyCobot('com3',115200)

#Controltheroboticarmwithangle
mc.send_angles(angles_list,speed)

#Controltheroboticarmusingcoordinates
mc.send_coords(coords_list,speed,mode)

#Controlgripper,value-0~100
mc.set_gripper_value(value,speed)
 

因为机械臂的开放接口比较多,我们只需要使用坐标控制,夹爪控制就好了。

wKgZomXmuW6AOwqZABUjJLHliZg392.png

LimoPro建图导航

完成了机械臂抓取部分的功能,接下来我们要实现小车的建图导航模块了。

首先我们要见图,有了地图之后才能够在地图上进行导航,定点巡航等一些的功能,目前有多种建图的算法,因为我们搭建的场景并不是很大,环境相对于静态我们选择使用gmapping算法来实现。

建图

Gmapping是基于滤波SLAM框架的常用开源SLAM算法。Gmapping有效利用了车轮里程计信息,对激光雷达的频率要求不高,在构建小场景地图时,所需的计算量较小且精度较高。这里通过使用ROS封装了的GMapping功能包来实现limo的建图。

注:以下的功能都是封装好的可以直接使用

首先需要启动雷达,打开一个新终端,在终端中输入命令:

roslaunchlimo_bringuplimo_start.launchpub_odom_tf:=false

然后启动gmapping建图算法,打开另一个新终端,在终端中输入命令:

roslaunchlimo_bringuplimo_gmapping.launch

成功启动之后会打开rviz可视化工具,这时候看到的界面如图

wKgZomXmuYKAEZ2RAAJri3skRzM470.png

这时候就可以把手柄调为遥控模式,控制limo建图了。

构建完地图之后,需要运行以下命令,把地图保存到指定目录:

1、切换到需要保存地图的目录下,这里把地图保存到~/agilex_ws/src/limo_ros/limo_bringup/maps/,在终端中输入命令:

cd~/agilex_ws/src/limo_ros/limo_bringup/maps/

2、切换到/agilex_ws/limo_bringup/maps之后,继续在终端中输入命令:

rosrunmap_servermap_saver-fmap1

map1为保存地图的名称,保存地图时应避免地图的名称重复

导航

前面我们用了gmapping来进行建图,我们现在来进行导航。导航的关键是机器人定位和路径规划两大部分。针对这两个核心,ROS提供了以下两个功能包。

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

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

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

wKgaomXmue-Ad4aDAALkwWCCEhs303.png

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

wKgaomXmuhCAa3rRABGjzMDxfUQ376.png

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

(1)首先启动雷达,在终端中输入命令:

roslaunchlimo_bringuplimo_start.launchpub_odom_tf:=false 

(2)启动导航功能,在终端中输入命令:

roslaunchlimo_bringuplimo_navigation_diff.launch

启动成功之后会打开rviz界面,如图

wKgaomXmuhuAU0GLABI9EjtPN-U799.png

​编辑我们需要把刚才建的地图给导进去,请打开limo_navigation_diff.launch文件修改参数,文件所在目录为:~/agilex_ws/src/limo_ros/limo_bringup/launch。把map02修改为需要更换的地图名称。

wKgaomXmvEqADdDgAAPlGNHL-Zg704.png

开启导航之后,会发现激光扫描出来的形状和地图没有重合,需要我们手动校正,在rviz中显示的地图上矫正底盘在场景中实际的位置,通过rviz中的工具,发布一个大概的位置,给limo一个大致的位置,然后通过手柄遥控limo旋转,让其自动校正,当激光形状和地图中的场景形状重叠的时候,校正完成。操作步骤如图:

wKgaomXmvF6ANXcxAKxk9IkGMCw950.png

校正完成后

wKgZomXmvGOAYMsmAA1r9dN8VRE765.png

通过2DNavGoal设置导航目标点

wKgZomXmuhmAMEZVALzzX5L4epo572.png

路径巡检

如果要在一条路上来回运动的话,我们要启用路径巡检功能,后续会使用上这个功能。

(1)首先启动雷达,开启一个新的终端,在终端中输入命令:

roslaunchlimo_bringuplimo_start.launchpub_odom_tf:=false

(2)启动导航功能,开启一个新的终端,在终端中输入命令:

roslaunchlimo_bringuplimo_navigation_diff.launch 

注:如果是阿克曼运动模式,请运行

roslaunchlimo_bringuplimo_navigation_ackerman.launch

(3)启动路径记录功能,开启一个新的终端,在终端中输入命令:

roslaunchagilex_pure_pursuitrecord_path.launch

路径记录结束之后终止路径记录程序,在终端中输入命令为:Ctrl+c

(4)启动路径巡检功能,开启一个新的终端,在终端中输入命令:

注:把手柄调至指令模式

roslaunchagilex_pure_pursuitpure_pursuit.launch

两个系统的集成

上面分布完成了myCobot机械臂视觉的抓取,LIMO的建图导航,路径巡检功能,现在我们需要把它们集成在ROS系统上。我们预设的场景是,LIMO进行定点的巡检,当遇到了标志物的时候停止运动,等待机械臂执行抓取物体,完成之后LIMO移动到下一个点位。

功能节点分布

在ROS(RobotOperatingSystem)中实现一个功能的流程涉及到多个步骤和组件,包括节点(nodes)、话题(topics)、服务(services)、参数服务器(parameterserver)和动作(actions)。根据ROS的功能节点架构,我们确定了节点的分布和它们交互的方式:

1.图像识别节点(ImageRecognitionNode)

职责:持续接收来自摄像头的图像流,使用图像识别算法(如OpenCV或深度学习模型)来检测特定的标记物。

输入:来自摄像头的图像流。

输出:当检测到标记物时,发布一个消息到一个特定的话题(如/marker_detected)。

2.控制节点(ControlNode)

职责:管理机器人的移动,包括启动、停止和继续巡检。

输入:订阅/marker_detected话题以监听图像识别节点的输出。也可能订阅一个专门用于接收手动控制指令的话题(如/control_commands)。

输出:向机器人底层控制系统(如驱动电机的节点)发送控制命令。

3.任务执行节点(TaskExecutionNode)

职责:执行遇到标记物后的特定任务,这些任务可以是数据采集、状态报告等。

输入:监听来自控制节点的指令,这些指令指示何时开始执行任务。

输出:任务完成的状态反馈,可能会发送到控制节点或一个专门的状态话题(如/task_status)。

4.导航和路径规划节点(NavigationandPathPlanningNode)

职责:处理机器人的路径规划和导航逻辑,确保机器人可以在环境中安全移动。

输入:接收来自控制节点的指令,用于启动、停止或调整导航路径。

输出:向机器人底层控制系统发送导航指令,如目标位置、速度和方向。

wKgZomXmxGCAEstUADEmk8qS0h8807.pngwKgZomXmxG-APsVoACYhW-jJV1E822.png

总结

这个场景算是初步完成了,其实还可以添加许多细节的,比如说在行径的过程中增添一些移动的障碍物,又或者设定一个红绿灯之类的物体,更加接近真实的场景。如果你们觉得有什么需要改善的地方,又或者说你想用LIMOcobot来做一些什么,尽管畅所欲言,你的回复和点赞就是我们更新最大的动力!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 机器人
    +关注

    关注

    213

    文章

    30580

    浏览量

    219518
  • 机械臂
    +关注

    关注

    13

    文章

    582

    浏览量

    25962
  • 大象机器人
    +关注

    关注

    0

    文章

    86

    浏览量

    324
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    使用myCobot 280 Jeston Nano进行物体精确识别追踪

    ,以便在实际应用中发挥作用,这个项目涉及到许多技术和算法,包括视觉识别、手眼协同和机械控制等方面。 机械的介绍 mycobot280-J
    的头像 发表于 05-24 18:20 2618次阅读
    使用<b class='flag-5'>myCobot</b> <b class='flag-5'>280</b> Jeston Nano进行物体精确识别追踪

    大象机器人携手进迭时空推出 RISC-V 全栈开源机械产品

    大象机器人成立于2016年,专注协作机器人研发与应用,产品线涵盖轻量级协作机器人、人形
    发表于 04-25 17:59

    工业机器人的主要特点

    6工业机器人在执行不同的作业任务时具有较好的通用性。当然也有专用的工业机器人。4)机电一体:6
    发表于 08-08 11:30

    机器人的发展趋势

    /VALproduct/uniVAL三种编程方法满足集成商、最终用户、设备商的不同需求。可实现多机器人同步,人机协作。)作为一种成本低廉、系统结构简单的自动化机器人系统解决方案,多
    发表于 07-29 06:57

    基于Jetson Nano的协作机械myCobot

    大象机器人致力于为机器人教育及科研机构、商业场景、工业生产提供高柔性的协作机器人、简单易学的操作系统以及智能的
    的头像 发表于 01-24 10:30 6279次阅读

    myCobot机械应用于Unity机器人编程实战课

    ER myCobot 280 Pi ,采用树莓派微处理器,内置ubuntu18.04系统,无需搭配PC主控,链接外设,即可快速构建机械 编程教育、
    的头像 发表于 06-16 14:33 3318次阅读
    <b class='flag-5'>myCobot</b><b class='flag-5'>机械</b><b class='flag-5'>臂</b>应用于Unity<b class='flag-5'>机器人</b>编程实战课

    大象机器人myCobot 280 2023版全新功能展示

    大象机器人mycobot 280 2023版全新功能
    的头像 发表于 03-10 18:46 2076次阅读
    <b class='flag-5'>大象</b><b class='flag-5'>机器人</b><b class='flag-5'>myCobot</b> <b class='flag-5'>280</b> 2023版全新功能展示

    开源机械myCobot 280末端执行器实用案例解析

    使用。 本文中主要介绍4款常用的机械的末端执行器。 Product myCobot 280 M5Stack myCobot
    的头像 发表于 10-16 16:28 2289次阅读
    开源<b class='flag-5'>六</b><b class='flag-5'>轴</b><b class='flag-5'>机械</b><b class='flag-5'>臂</b><b class='flag-5'>myCobot</b> <b class='flag-5'>280</b>末端执行器实用案例解析

    自动化革命:大象机器人的Mercury A1机械

    引言 大象机器人的Mercury系列,是面向工业自动化和智能制造的新型机械产品线。这些机械
    的头像 发表于 01-15 14:41 1339次阅读
    <b class='flag-5'>自动化</b>革命:<b class='flag-5'>大象</b><b class='flag-5'>机器人</b>的Mercury A1<b class='flag-5'>机械</b><b class='flag-5'>臂</b>

    大象机器人协作机械myCobot 320 进行手势识别!

    引言 我是一名专注于机器学习和机器人技术自由者。我的热情始于大学期间的人工智能课程,这促使我探索人机交互的新方法。尤其对于机械的操作,我一直想要简化其复杂性,使之更加直观和易于使用。
    的头像 发表于 01-31 16:17 1771次阅读
    <b class='flag-5'>大象</b><b class='flag-5'>机器人</b><b class='flag-5'>六</b><b class='flag-5'>轴</b><b class='flag-5'>协作</b><b class='flag-5'>机械</b><b class='flag-5'>臂</b><b class='flag-5'>myCobot</b> 320 进行手势识别!

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

    项目简介 本项目致力于探索和实现一种高度集成的机器人系统,旨在通过结合现代机器人操作系统(ROS)和先进的硬件组件,解决特定自动化
    的头像 发表于 03-05 10:52 447次阅读
    <b class='flag-5'>结合</b><b class='flag-5'>大象</b><b class='flag-5'>机器人</b><b class='flag-5'>六</b><b class='flag-5'>轴</b><b class='flag-5'>协作</b><b class='flag-5'>机械</b><b class='flag-5'>臂</b><b class='flag-5'>myCobot</b> <b class='flag-5'>280</b> ,解决<b class='flag-5'>特定</b>的<b class='flag-5'>自动化</b><b class='flag-5'>任务</b>和<b class='flag-5'>挑战</b>!(上)

    大象机器人myCobot 320协作机械用户开箱!

    本篇文章是经过作者はるなし的授权,进行转载编辑,感谢はるなし给我们贡献了一篇很好的开箱文章。 引言 HI,我是はるなし。我是一名医学生,喜欢制作机器人和人工智能。这次我购买了myCobot pro
    的头像 发表于 03-21 15:27 461次阅读
    <b class='flag-5'>大象</b><b class='flag-5'>机器人</b><b class='flag-5'>myCobot</b> 320<b class='flag-5'>六</b><b class='flag-5'>轴</b><b class='flag-5'>协作</b><b class='flag-5'>机械</b><b class='flag-5'>臂</b>用户开箱!

    大象机器人开源协作机械机械接入GPT4o大模型!

    和智能任务,提升了人机协作的效率和效果。我们个人平时接触不太到机械这类的机器人产品,但是有
    的头像 发表于 07-03 14:09 2185次阅读
    <b class='flag-5'>大象</b><b class='flag-5'>机器人</b>开源<b class='flag-5'>协作</b><b class='flag-5'>机械</b><b class='flag-5'>臂</b><b class='flag-5'>机械</b><b class='flag-5'>臂</b>接入GPT4o大模型!

    大象机器人推出myCobot 280 RDK X5,携手地瓜机器人共建智能教育机

    摘要大象机器人全新推出轻量级高性能教育机械myCobot280RDKX5,该产品集成地瓜机器人
    的头像 发表于 04-15 22:05 1090次阅读
    <b class='flag-5'>大象</b><b class='flag-5'>机器人</b>推出<b class='flag-5'>myCobot</b> <b class='flag-5'>280</b> RDK X5,携手地瓜<b class='flag-5'>机器人</b>共建智能教育机

    大象机器人携手进迭时空推出 RISC-V 全栈开源机械产品

    大象机器人成立于2016年,专注协作机器人研发与应用,产品线涵盖轻量级协作机器人、人形
    的头像 发表于 06-06 16:55 1138次阅读
    <b class='flag-5'>大象</b><b class='flag-5'>机器人</b>携手进迭时空推出 RISC-V 全栈开源<b class='flag-5'>六</b><b class='flag-5'>轴</b><b class='flag-5'>机械</b><b class='flag-5'>臂</b>产品