使用ROS与Movelt实现myCobot 280运动轨迹规划和控制

news2024/11/18 20:16:36

ROS的技术案例

Introduction

今天这篇文章将记录我使用myCobot 280 M5stack 在ROS当中是如何使用的。为什么使用ROS呢,因为提及到机器人都离不开ROS这个操作系统,今天是我们第一次使用ROS这个系统。

今天我将从ROS的介绍,环境的配置以及mycobot280 在ROS当中的使用。

ROS

ROS(Robot Operating System,机器人操作系统)是一个用于编写机器人软件的灵活的框架。它是一个半开源的项目,为研究人员和开发者提供了一套工具和库,以帮助他们创建各种机器人应用。ROS主要用于研究和开发各种机器人系统,如自动驾驶车辆、服务机器人、工业机器人、无人机等。它使得机器人的开发更加高效,也使得机器人的功能更加强大和灵活。ROS操作系统目前最受关注的两个模块是导航(navigation)和机械臂控制(moveit)其中moveit可以让用户快速建立机械臂模型并实现机械臂的控制,例如建模,运动学求解,运动规划,避障等功能。介于有这么一个强大的系统,我想用它来仿真实现一些机械臂的避障,路径规划等功能。

环境配置

ROS主要支持Ubuntu(Linux),Mac OS(缺少部分的支持)这些操作系统,最常见的还是在ubuntu系统上使用。我电脑安装的是ubuntu18.04版本,Ubuntu18对应的ROS版本是melodic,不同版本的ubuntu对应不同ROS版本。

 ubuntu16.04-kinetic
 ubuntu18.04-melodic
ubuntu20.04-noetic

由于我电脑已经安装好了系统以及ROS环境,这边就不一一记录了,主要还是记录ROS当中的操作。 关于ubuntu系统的安装和ROS环境的搭建大家可以在Google当中搜索,ROS官网也有详细的安装教程。

ROS: Getting Started

我今天使用的场景是moveit控制机械臂,所以对于电脑硬件的需求不高,这边注意如果是使用SLAM雷达导航等功能,可能就需要高配一些的电脑来处理运算能力。

检测自己是否安装完成ROS的标准,打开终端输入“roscore”,出现跟下图一样的内容代表安装成功了。

让我们开始使用ROS吧。

ROS的使用

在ROS当中创建一个机械臂,并且使用一些路径规划的功能需要执行以下步骤。

  1. 创建URDF的文件,也就是机械臂的模型
  2. 将URDF文件加载到ROS服务器当中
  3. 使用RViz进行可视化
  4. 创建MoveIt配置包
  5. 使用MoveIt进行运动规划

创建URDF文件

首先咱得创建机械臂的URDF(Unified Robot Description Format)文件,这个文件至关重要,因为机械臂的3D模型,这个文件描述了机械臂的属性,如关节,链接和传感器。由于该产品是大象机器人的一款机械臂myCobot 280 M5Stack,大象机器人在Github有提供myCobot 280的URDF文件描述了机械臂的一些物理属性。

https://github.com/elephantrobotics/mycobot_ros/tree/noetic/mycobot_description/urdf

如何生成urdf文件:

需要使用CAD软件制作模型,确保制作的3D模型跟实际的机械臂尺寸一致。因为导出的模型要是一个可以被ROS接受的格式,通常是DAE(collada)文件。

将URDF加载到ROS服务器

创建ROS包

创建一个存放URDF文件的包,在终端执行下面的代码

catkin_create_pkg mycobot_description rospy std_msgs sensor_msgs

其中‘rospy’,‘std_msgs'和’sensor_msgs'是ROS的依赖包

将生成的urdf文件添加到mycobot_description/urdf的目录下

创建启动文件

mycobot_description/launch目录下创建一个load_urdf.launch文件,在其中添加以下内容

 <launch>
 <param name="robot_description" command="$(find xacro)/xacro.py $(find mycobot_description)/urdf/mycobot.urdf.xacro" />
 </launch>

启动ROS文件qi

我们在打开终端输入下面的命令。

 roslaunch my_robot_description load_urdf.launch

运行完之后,就可以在RViz当中看到我们创建的模型了。

配置MoveIt

启动MoveIt Setup Assistant:

在终端中,运行以下命令来启动MoveIt Setup Assistant:

roslaunch moveit_setup_assistant setup_assistant.launch

在MoveIT当中加载URDF

在MoveIt Setup Assistant的主界面,点击“Create New MoveIt Configuration Package”按钮。然后,在弹出的对话框中,选择我的URDF文件(在ROS参数robot_description中)。点击“Load Files”按钮来加载你的URDF文件。显示下图就加载成功了。

配置我的机器人

根据自己的需求来配置自己的机器人。这里简要介绍几个配置:

  • Self-Collisions:MoveIt会自动计算你的机器人的自碰撞矩阵。可以点击“Regenerate Default Collision Matrix”按钮来生成默认的自碰撞矩阵。
  • Virtual Joints:可以为你的机器人定义虚拟关节。虚拟关节通常用于连接你的机器人和世界。
  • Planning Groups:可以定义你的机器人的规划组。规划组是一组需要一起移动的关节和链。例如,你可以创建一个包含所有手臂关节的规划组。
  • Robot Poses:可以定义你的机器人的预设姿态。预设姿态可以在规划中被重复使用。

运行moveit

配置完成之后会生成.launch的文件,我们运行它就可以在moveit中使用机械臂了。

我们来看看moveit的功能如何进行路径规划,拖动机械臂末端的坐标,可以对机械臂进行运动的变化,也可以随机生成路径。

物体避障

我们在moveit中添加一个障碍物让机械臂进行避障,添加一个方块,让机械臂在做轨迹的时候绕过它。

除此之外moveit还有许多功能例如,运动规划,可以为多关节的机器人进行路径规划,避免碰撞,并且还可以是用多种运动规划算法RRT,EST,LBKPIECE等;碰撞检测,可以进行复杂的3D碰撞检测,包括子碰撞和环境碰撞(障碍物);仿真,可以于gazebo机器人仿真器继承,进行真实的物理仿真等等功能。

总结

MoveIt提供了一套完整的工具集,可以用于机械臂的运动规划和控制的研究,无需从头开始构建复杂的运动规划系统。这可以使得开发人员将更多的经理集中在实现具体的应用功能上,而不是解决底层的运动规划和控制问题上。总的来说,ROS和MoveIt为机器人技术的发展提供了强大的支持。它们不仅降低了开发难度,提高了开发效率,而且还推动了机器人技术的创新和应用。无论你是机器人技术的研究者,还是实际应用的开发者,ROS和MoveIt都将是你不可或缺的工具。

我在未来也会继续探索更多的机械臂项目,并不定期分享我的发现和成果。如果你发现本文中有一些错误欢迎跟我进行沟通,如果你喜欢这篇文章留下你的点赞和评论是对我最大的支持!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DPU加速AI应用“遍地开花”,中科驭数亮相2023全球AI芯片峰会

9月15日&#xff0c;2023全球AI芯片峰会&#xff08;GACS 2023&#xff09;在深圳举行&#xff0c;聚集了全球AI芯片产业的领军者和中坚力量&#xff0c;共探AI芯片的求新、求变、求索之径。中科驭数高级副总裁张宇应邀在智算中心算力与网络高峰论坛发表题为《基于DPU的高效AI大…

《2023年中国数字孪生行业报告》丨附下载_三叠云

✦ ✦✦ ✦✦ ✦✦ ✦ 随着近年来人工智能、物联网、虚拟现实等技术的持续发展以及元宇宙概念的兴起&#xff0c;数字孪生概念进一步完善&#xff0c;适用范围不断拓宽。然而非业界人士对数字孪生概念仍缺乏统一认知。对此&#xff0c;本报告介绍数字孪生概念、行业情况、市场…

java开发之个微机器人的开发

简要描述&#xff1a; 根据消息回调收到的xml转发文件消息&#xff0c;适用于同内容大批量发送 请求URL&#xff1a; http://域名地址/sendRecvFile 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#…

uniapp 使用subNVue原生子窗体显示弹框或悬浮框

效果展示 在uniapp中&#xff0c;我们可以使用subNVue原生子窗体来解决web-view等原生页面中弹框无法显示的问题。 subNVue原生子窗体是uniapp提供的一种原生组件&#xff0c;可以在uniapp中嵌入原生页面&#xff0c;并且可以与uniapp页面进行通信。我们可以在原生页面中使用…

web浏览器公网远程访问jupyter notebook【内网穿透】

文章目录 前言1. Python环境安装2. Jupyter 安装3. 启动Jupyter Notebook4. 远程访问4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5. 固定公网地址 前言 Jupyter Notebook&#xff0c;它是一个交互式的数据科学和计算环境&#xff0c;支持多种编程语言&#xff0c;如…

leetcode 102.二叉树的层序遍历

⭐️ 二叉树的层序遍历I 题目描述 &#x1f31f; leetcode链接&#xff1a;二叉树的层序遍历I 思路&#xff1a; 使用一个辅助队列来层序遍历二叉树&#xff0c;不同的是需要使用一个二维数组来存放每个节点&#xff0c;而每一层的所有节点又需要是一个一维数组。 而最重要的问…

DNS解析流程

DNS 层次结构如下&#xff1a; 根 DNS 服务器 &#xff1a;返回顶级域 DNS 服务器的 IP 地址顶级域 DNS 服务器&#xff1a;返回权威 DNS 服务器的 IP 地址权威 DNS 服务器 &#xff1a;返回相应主机的 IP 地址 为了提高 DNS 的解析性能&#xff0c;很多网络都会就近部署 DNS …

如何在idea中新建第一个java小程序

如何在idea中新建第一个java小程序 1.打开软件2.新建项目3.找到安装的jdk文件路径4.继续下一步5.创建项目名称并配置项目路径6.点击完成即可。7.在项目文件的src文件夹下创建java类&#xff0c;程序等7.1其他java项目或文件不能运行的原因&#xff1a; 8.新建类并运行程序9.输入…

构建本地Web小游戏网站:Ubuntu下的快速部署与公网用户远程访问

文章目录 前言1. 本地环境服务搭建2. 局域网测试访问3. 内网穿透3.1 ubuntu本地安装cpolar内网穿透3.2 创建隧道3.3 测试公网访问 4. 配置固定二级子域名4.1 保留一个二级子域名4.2 配置二级子域名4.3 测试访问公网固定二级子域名 前言 网&#xff1a;我们通常说的是互联网&am…

数据库 MVCC 详解

目录 1. 什么是 MVCC&#xff1f; 2. MVCC 的好处&#xff1f; 3. 快照读&#xff1f;当前读分别是什么&#xff1f;怎么理解&#xff1f; 3.1 快照读 3.2 当前读 4. 数据库的四种隔离级别 5. MVCC 实现原理 5.1 隐藏字段 5.2 undo log(版本链) 5.3 readView 6. re…

1218. 最长定差子序列

1218. 最长定差子序列 原题链接&#xff1a;完成情况&#xff1a;解题思路&#xff1a;参考代码&#xff1a; 原题链接&#xff1a; 1218. 最长定差子序列 https://leetcode.cn/problems/longest-arithmetic-subsequence-of-given-difference/description/ 完成情况&#x…

低代码平台的坑有哪些?

大部分人/企业在选型的时候只会过分关注低代码平台所提供的功能&#xff0c;却忘记了“服务”同样重要。事实上&#xff0c;低代码的功能各家大差不差&#xff0c;基本都差不多。早前&#xff0c;我曾写过【低代码选型的注意事项】一文&#xff0c;今日不妨再说一嘴。 在研究低…

如何完美通过token获取用户信息(springboot)

1. 什么是Token&#xff1f; 身份验证令牌&#xff08;Authentication Token&#xff09;&#xff1a;在身份验证过程中&#xff0c;“token” 可以表示一个包含用户身份信息的令牌。 例如 Token&#xff08;JWT&#xff09;是一种常见的身份验证令牌&#xff0c;它包含用户的…

APP广告竞价机制:头部竞价与瀑布流

广告引擎竞价原理实际上就是平台如何从利用用户和广告主在平台的产生的活跃度时长&#xff0c;从两者本身产生价值中&#xff0c;赚取利润的原理。即平台在给广告主分发流量的过程中&#xff0c;引入付费广告概念&#xff0c;加速广告内容的曝光。 头部竞价与瀑布流 在瀑布流…

【ELK】日志分析系统概述及部署(ELFK部署实验)

目录 一、ELK概述 1、ELK是什么&#xff1f; 2、ELK的组成部分 2.1 ElasticSearch &#xff08;1&#xff09;分片和副本 &#xff08;2&#xff09;es和传统数据库的区别 2.2 Kiabana 2.3 Logstash &#xff08;1&#xff09;Log Stash主要组件 2.4 可添加的其它组件…

腾讯数据持久化方案MMKV原理分析

提到数据持久化存储的方案&#xff0c;Android提供的手段有很多&#xff0c;在项目中常用的就是SharedPreference(简称SP)&#xff0c;但是SP使用虽然简单&#xff0c;但是存在缺陷&#xff1a; 写入速度慢&#xff0c;尤其在主线程频繁执行写入操作易导致卡顿或者ANR&#xf…

Python 基于PyCharm断点调试

视频版教程 Python3零基础7天入门实战视频教程 PyCharm Debug&#xff08;断点调试&#xff09;可以帮助开发者在代码运行时进行实时的调试和错误排查&#xff0c;提高代码开发效率和代码质量。 准备一段代码 def add(num1, num2):return num1 num2if __name__ __main__:f…

剧情反转 抵制AI音乐的华纳签了位虚拟歌手

从文字、图片、视频到语音、音乐&#xff0c;AIGC已经渗入到人类的视听体验中&#xff0c;即便曾经因为版权问题极力抵制AI音乐的巨头&#xff0c;也不得不转变态度顺应时代产物。 今年9月&#xff0c;华纳音乐签约了首个虚拟歌手Noonoouri&#xff1b;8月&#xff0c;环球音乐…

Reids Cluster集群部署

服务器端口说明 vim /etc/hosts 1.下载、解压、编译Redis $ mkdir -p /opt/redis && cd /opt/redis $ wget http://download.redis.io/releases/redis-6.0.6.tar.gz $ tar xzf redis-6.0.6.tar.gz 请先检查gcc的版本是否低于5&#xff0c;如果是请先升级&#xff0c…

Java基础实战:Java中的引用类型(强软弱虚)

下面是一个在下面引用实战中用到的公共类 public class M {Overrideprotected void finalize() throws Throwable{System.out.println("finalize");} }finalize()方法是执行gc时调用的方法。 一、强引用 强引用是默认的引用类型。当一个对象具有强引用时&#xff…