在Mac上使用 Docker 构建一个 noVNC 环境并运行 MyCobot

本文展示了Mycobot 280 M5 上的 Mycobot 280 M5 moveit2 模拟环境,以及详细介绍了使用 Docker 在 macOS(arm64)上构建 moveit2 环境的步骤。

 一、引言

这篇文章主要内容是关于如何在 Ros2 环境中构建在 Mac 上模拟 Mycobot 280 M5 的环境。

我写这篇文章是因为相关可参考的文章不多,希望这篇文章可以给你一些帮助。

由于我是 ROS 新手,关于文章内容如果您有任何指教或补充,欢迎在下方留言和我们沟通。

二、准备工作与技术介绍

 1、硬件组件

Elephant Robotics myCobot-6 DOF collaborative robot

 myCobot 280系列机械臂是专门为研究、教育、技术应用和商业展览而开发的6-DOF协作机器人。

2、环境配置

  • M3 MacBook Air
  • 16GB RAM

三、项目运行

1、搭建ROS2环境

在Docker上搭建ROS2(Humble)环境

可以参考此链接搭建安装了ROS2的Ubuntu图形用户界面环境 https://memoteki.net/archives/2955#index_id3

然后创建一个Docker容器

*如果你的mac使用的是M系列芯片,或者arm64

在设置Dock容器的共享内存时最好进行一些修改——通常共享内存默认是64MB,容量不大,所以建议至少应设置为2GB。

docker run -p 6080:80 --security-opt seccomp=unconfined --shm-size=2G tiryoh/ros2-desktop-vnc:humble-amd64

 成功启动后,访问http://127.0.0.1:6080/ 。此时 Ubuntu 应该已启动。

2、构建 MoveIt2 环境

这一步是通过官方教程来完成的。

教程链接为:https://moveit.picknik.ai/main/doc/tutorials/getting_started/getting_started.html

按顺序执行以下命令:

在 Ubuntu 终端中操作

source /opt/ros/humble/setup.bash

 安装rosdep(可能已安装)

sudo apt install python3-rosdep
sudo rosdep init
rosdep update
sudo apt update
sudo apt dist-upgrade

 安装colcon mixin扩展

sudo apt install python3-colcon-common-extensions
sudo apt install python3-colcon-mixin
colcon mixin add default https://raw.githubusercontent.com/colcon/colcon-mixin-repository/master/index.yaml
colcon mixin update default

安装 vsctool

sudo apt install python3-vcstool

创建colcon工作空间

mkdir -p ~/ws_moveit/src

获取MoveIt源代码

cd ~/ws_moveit/src
git clone -b humble https://github.com/moveit/moveit2_tutorials
vcs import --recursive < moveit2_tutorials/moveit2_tutorials.repos

构建colcon工作空间

sudo apt remove ros-humble-moveit*
sudo apt update && rosdep install -r --from-paths . --ignore-src --rosdistro humble -y

进行构建可能需要几十分钟到一个小时。

关于构建参数:

在Docker环境中,建议指定以下参数,以避免可能出现的内存不足问题。

--executor sequential:逐个进行构建

--parallel - workers 2:指定同时进行构建的数量

如果可以的话,也增加Docker共享内存来加快构建时间。  

cd ~/ws_moveit
colcon build --mixin release

源代码

source ~/ws_moveit/install/setup.bash
echo ‘source ~/ws_moveit/install/setup.bash’ >> ~/.bashrc

3、关于构建中的错误

在构建中可能遇到各种错误,这里写出部分注释以供参考。

pick_ik错误

sudo apt-get remove ros-humble-pick-ik

ament_cmake错误
以特权用户身份运行构建命令

su

4、让mycobot模拟器与moveit2一起工作

参考以下链接来创作
https://www.youtube.com/watch?v=ZOIKEV_BCBE&t=566s
获取ROS2的mycobot源
在ws_moveit/src下克隆

git clone https://github.com/elephantrobotics/mycobot_ros2.git

 5、启动设置助手

选择创建新MoviIt
选择mycobot的URDF并点击loadFile 

mycobot_ros2/mycobot_description/urdf/mhcobot_280_m5/mycobot_280_m5.urdf

机器的型号以及泵头或摄像头是否可用可以根据情况而定。
自碰撞设置(Self collision)
默认生成冲突矩阵。
虚拟关节设置(Virtual joints)
添加虚拟接头,命名后保存它们。

定义规划组(Planning Groups)
添加 Add Group
选择求解器的kdl_kinematics_plugin
Kin. parameters file设置为3 

添加关节
g_base以外,均可添加添加链接
同上,增加g_base添加姿态

使用滑块创建姿态。

也可以之后再添加。设置ROS2控制器

点击“自动添加”设置MoveIt控制器

点击“自动添加”

 

添加作者和邮箱 

生成并保存

保存在colcon工作空间的src目录下 

构建和安装

cd ~/ws_moveit
colcon build --mixin release
. install/setup.bash

启动

ros2 launch mycobot_move_it demo.launch.py

四、总结

通过以上步骤就可以使程序在模拟器中运行了。但是问题在于,在Mac系统上无法通过Docker使用USB,所以无法运行实际设备。如果你有关于本文的内容或者机械臂使用有任何观点和疑问,欢迎留言和我们交流沟通。

* 本文是以下文章的英文翻译版本:DockerでnoVNC環境を構築し、MyCobotをROS2とMoveIt2を使用して動かす #mycobot - Qiita

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

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

相关文章

c语言提供后端,提供页面显示跳转服务

后端代码: #define SERVER_IP_ADDR "0.0.0.0" // 服务器IP地址 #define SERVER_PORT 8080 // 服务器端口号 #define BACKLOG 10 #define BUF_SIZE 8192 #define OK 1 #define ERROR 0#include <stdio.h> #include <stdlib.h> #include <st…

AnaConda下载PyTorch慢的解决办法

使用Conda下载比较慢&#xff0c;改为pip下载 复制下载链接到迅雷下载 激活虚拟环境&#xff0c;安装whl&#xff0c;即可安装成功 pip install D:\openai.wiki\ChatGLM2-6B\torch-2.4.1cu121-cp38-cp38-win_amd64.whl

Sentinel服务保护 + Seata分布式事务

服务保护 【雪崩问题】微服务调用链路中某个服务&#xff0c;引起整个链路中所有微服务都不可用。 【原因】&#xff1a; 微服务相互调用&#xff0c;服务提供者出现故障。服务调用这没有做好异常处理&#xff0c;导致自身故障。调用链中所有服务级联失败&#xff0c;导致整个…

六、Angular 发送请求/ HttpClient 模块

一、应用 HttpClient 模块 angular/common/http 中的 HttpClient 类基于浏览器提供的 XMLHttpRequest 接口。要想使用 HtpClient 模块&#xff0c;就要先导入 Anqular 的 HttpClientModule。大多数 Web 应用程序都会在根模块 AppModule 中导入它。 编辑 src/app/app.module.ts…

CompletableFuture // todo

相比较所有代码都在主线程执行&#xff0c;使用Future的好处&#xff1a;利用服务器多核、并发的优势。 不足&#xff1a; 开启没有返回值的异步线程&#xff1a; 1、runAsync 使用lambda表达式&#xff1a; 开启有返回值的异步线程&#xff1a; 1、supplyAsync 异步任务中的…

css面试常考布局(圣杯布局、双飞翼布局、三栏布局、两栏布局、三角形)

两栏布局 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head> &…

arcgisPro加载天地图(CGCS2000)影像

1、注册天地图账号&#xff1b; 2、申请key&#xff1b; 3、添加WMTS服务器。 这里已经办好了前两步&#xff0c;下面详细介绍最后一步。 添加WMTS服务器。 在天地图网站&#xff0c;找到如下页面&#xff0c; 复制网址&#xff0c;如&#xff1a;http://t0.tianditu.gov.cn…

继承(7)

大家好&#xff0c;今天我们继续来学习一下继承的知识&#xff0c;这方面需要大家勤动脑才能理解&#xff0c;那么我们来看。 1.9 protected关键字 在类和对象章节中&#xff0c;为了实现封装特性,java中引入访向限定符,主要限定:类或者类中成员能否在类外和其他包中被访问. …

ModuleNotFoundError: No module named ‘podm.metrics‘报错等解决方法

ModuleNotFoundError: No module named podm.metrics’报错等解决方法 podm.metrics 在运行时报错&#xff1a; ModuleNotFoundError: No module named ‘podm.metrics’ 安装了podm后还是报错 解决方法&#xff1a; 查看安装位置 查看podm的安装位置&#xff0c;并打开到该…

HDFS异构存储和存储策略

一、HDFS异构存储类型 1.1 冷、热、温、冻数据 通常&#xff0c;公司或者组织总是有相当多的历史数据占用昂贵的存储空间。典型的数据使用模式是新传入的数据被应用程序大量使用&#xff0c;从而该数据被标记为"热"数据。随着时间的推移&#xff0c;存储的数据每周…

sklearn-逻辑回归-制作评分卡

目录 数据集处理 分箱 分多少个箱子合适 分箱要达成什么样的效果 对一个特征进行分箱的步骤 分箱的实现 封装计算 WOE 值和 IV值函数 画IV曲线&#xff0c;判断最佳分箱数量 结论 pd.qcut 执行报错 功能函数封装 判断分箱个数 在银行借贷场景中&#xff0c;评分卡是…

中学综合素质笔记3

第一章职业理念 第三节 教师观 考情提示&#xff1a; 单选题材料分析题 学习要求&#xff1a; 理解、 识记、 运用 &#xff08;一&#xff09;教师职业角色的转变&#xff08;单选材料分析&#xff09; 从教师与学生的关系看——对学生 新课程要求教师应该是学生学习的引…

【Linux】设备驱动中的ioctl详解

在Linux设备驱动开发中&#xff0c;ioctl&#xff08;输入输出控制&#xff09;是一个非常重要的接口&#xff0c;用于用户空间应用程序与内核空间设备驱动之间进行通信。通过ioctl&#xff0c;应用程序可以发送命令给设备驱动&#xff0c;控制设备的行为或获取设备的状态信息。…

linux上使用cmake编译的方法

一、hello 例程仅基于一个cpp文件 C文件或工程进行编译时可以使用g指令&#xff08;需要对每一个程序和源文件分别使用g指令编译&#xff09;&#xff0c;当程序变大时&#xff0c;一个工程文件往往会包含很文件夹和源文件&#xff0c;这时我们需要的编译指令将越来越长&#…

(vue)el-table-column type=“selection“表格选框怎么根据条件添加禁选

(vue)el-table-column type"selection"表格选框怎么根据条件添加禁选 html <el-table:data"tableData"style"width: 100%"><el-table-columntype"selection"width"55":selectable"checkSelectable">…

linux nginx 安装后,发现SSL模块未安装,如何处理?

&#x1f468;‍⚕ 主页&#xff1a; gis分享者 &#x1f468;‍⚕ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕ 收录于专栏&#xff1a;运维工程师 文章目录 前言SSL模块安装 前言 nginx 安装后&#xff0c;发现SSL模块未安装&…

kubeneters-循序渐进Cilium网络(二)

文章目录 概要IP 地址配置接口配置解析结论 概要 接续前一章节&#xff0c;我们还是以这张图继续深入Cilium网络世界 IP 地址配置 通过检查 Kubernetes 集群的当前环境&#xff0c;可以获取实际的 IP 地址和配置信息。这些信息将被补充到之前的网络示意图中&#xff0c;以使…

虚拟机使用MQ及介绍

mq官网&#xff1a;https://www.rabbitmq.com 一、虚拟机与 MQ 的结合优势 隔离与安全&#xff1a;虚拟机为 MQ 的运行提供了一个独立的环境&#xff0c;与宿主机以及其他虚拟机相互隔离。这意味着即使 MQ 所在的虚拟机出现故障或遭受安全威胁&#xff0c;也不会直接影响到宿主…

比亚迪夏直插家用MPV腹地,“迪王”开启全面销冠新征程

文/王俣祺 导语&#xff1a;比亚迪前脚刚收获2024年的全面成功&#xff0c;后脚立刻就开始布局2025年的产品矩阵了。比亚迪夏的横空出世&#xff0c;看来家用MPV市场也要感受“迪王”的恐怖如斯了。 家用MPV市场的“意外之喜” 1月8日&#xff0c;比亚迪夏终于在万众瞩目之下…

c++入门之 命名空间与输入输出

1、命名空间 1.1使用命名空间的原因 先看一个例子&#xff1a; #include <iostream>int round 0;int main() {printf("%d", round);return 0; }请问&#xff0c;这个程序能跑起来吗&#xff1f; 答案是否定的 原因是&#xff0c;当我们想创建一个全局变量 …