当前位置: 首页 > news >正文

Hadabot:从网络浏览器操作 ROS2 远程控制器

一、说明  

           Hadabot          Hadabot是一个学习ROS2和机器人技术的机器人套件。使用 Hadabot,您将能够以最小的挫败感和恐吓来构建和编程物理 ROS2 机器人。Hadabot套件目前正在开发中。它将仅针对ROS2功能,并强调基于Web的用户界面。

        随着开发的进展,我将每周以黑客示例和解释的形式发布一到两次更新。


在这篇文章中,我们将执行以下操作:

  1. 重新总结基于 Web 的全新 Hadabot 体验界面背后的基本原理。

  2. 展示适用于 ROS2 的 Hadabot 基于 Web 的远程控制器。

  3. 解释远程控制器的工作原理。

  4. 解释远程控制器如何与 Hadabot 开发工作相吻合。

二、全新 Hadabot 体验的 Web 界面

        我的目标是创建一个简单、无挫折的机器人套件来构建和编程支持 ROS2 的机器人。

        通过只关注用户界面的 Web 浏览器,我可以确保更一致的用户体验,尽管使用了各种底层操作系统和开发环境。

        为了简化设置,Hadabot 利用 Docker 容器来启动预烘焙工具和 ROS2 环境。容器本质上在安全的沙盒环境中运行,可以轻松关闭和重新启动,而不会污染主机系统。


2.2. 使用基于 Web 的 ROS2 远程控制器

        遥控或遥控控制器是一种遥控操纵杆,用于控制另一个物理实体,例如机器人、遥控车、相机等。我们计划最终将此远程控制器用于 Hadabot(稍后会详细介绍)。

        让我们启动一个基于 Web 的 ROS2 远程控制器进行展示和讲述。


2.3 一.更新,启动/重新启动Hadabot软件堆栈,启动Web-bash ROS2终端

 

        7 年 2020 月 <> 日更新:我们不再需要设置 web-bash,因为我们现在在基于 Web 浏览器的 VSCode 环境中使用 bash 终端功能。

 

        刚开始使用哈达机器人?

        我们需要(a)设置Docker,(b)克隆Hadabot存储库,然后(c)启动一个web-bash ROS2终端。

         

        如果您是回归的哈达机器人黑客

        您已经克隆了 hadabot_main.git 存储库,并且正在运行 Hadabot Docker 堆栈(通过 docker-compose)。

        在主机系统上使用以下命令停止您可能正在运行的 Docker 堆栈,获取最新的 Hadabot 存储库代码,然后使用最新更改重新启动 Docker 堆栈。

  • $ cd hadabot_main/docker
    $ docker-compose down -v
    $ git fetch
    $ git merge origin/master
    $ docker-compose build
    $ docker-compose up -d

            然后选择步骤以 (c) 在 Web 浏览器中启动 bash 终端。


        2.4.运行我们的引导式脚本以启动远程控制器

        此时,您应该已经准备好了一个网络bash终端。

In the web-bash terminal you created above, run our guided script and follow the simple instructions:

root@id:/# python3 content/pt2/step_1.py

Upon completing the instructions from the guided script, you should have 2 browser windows open that showcases the operation of the Hadabot teleop controller running on ROS2.


三、远程控制器在做什么

ROS系统由节点组成(即单个机器人进程,如果你愿意的话)。ROS节点主要通过发布者-订阅者方式传递消息来相互通信。

我们启动的远程控制器发布消息,可以命令机器人如何移动。具体而言,发布了 geometry_msgs/msg/Twist 消息类型。Twist 指示 6 自由度机器人如何在 x、y、z 方向上移动,以及如何沿其 x、y 和 z 轴旋转。

单击相应的箭头按钮后,远程控制器将被硬编码,以通过 Twist 消息将移动命令发布到 /base_controller/command 主题。

在我们的 web-bash 终端中,我们使用 ros2 主题回显 /base_controller/command 在按下远程控制器上的按钮时回显并验证已发布的消息。

当按下向上/向下箭头按钮时,我们希望在 x 方向上向前/向后移动,因此我们发布一个正/负线性 X 值的 Twist 消息。

当按下左/右时,我们要绕 z 轴旋转。

松开按钮后,我们发送 Twist 消息以停止所有移动。


四、 远程操作 ROS2 示例如何工作

虽然 ROS 节点以分布式方式运行,但它本身并不在 Web 浏览器环境中运行。相反,我们利用了一个web-to-ROS桥接服务器,又名ros2-web-bridge,由Robot Web Tools创建和开源。

这个 ros2-web-bridge 服务器通过 docker-compose 作为 Docker 容器运行,允许非 ROS 应用程序使用基于 JSON 的接口将 ROS 主题发布到底层 ROS 系统。

Hadabot teleop controller是一个javascript应用程序(主要受这个keyboardteleopjs项目的启发),它与ros2-web-bridge服务器创建websocket连接。然后,远程控制器使用该基于 JSON 的接口通过 websocket 连接到 ros2-web-bridget 发布 ROS Twist 消息。

当 ros2-web-bridge 收到基于 JSON 的 Twist 消息(通过与 teleop 控制器 Web 应用程序的 websockets 连接)时,它会将它们本地发布到 ROS2 系统上,该系统可用于 ros2 主题 echo... 命令和任何其他要处理的 ROS 节点。

ros2网桥如何发布ROS消息?ros2-web-bridge作为websocket服务器(与客户端连接(如我们的teleop控制器)以及ROS2节点运行。

在 web-bash ROS2 终端中,如果您列出节点(不要忘记首先源 /opt/ros/eloquent/setup.bash 以激活 ROS2):

root@id:/# ros2 node list

...您将看到 /ros2_web_bridge 节点正在运行。


五、 远程控制器如何与 Hadabot 的发展相吻合

Twist 消息过度概括为命令只有 2 个自由度的轮式机器人,例如汽车或差速器驱动机器人 - 它只能向前和向后移动并向左和向右旋转。汽车不能线性地向左或向右移动,也不能向上或向下飞行。出于所有实际目的,它不能像飞机或无人机那样俯仰或滚动。

正在开发的新Hadabot套件将由ROS2驱动的差速器驱动机器人。因此,如前所述,差速驱动机器人将具有2个自由度 - 能够沿Hadabot的x轴(即向前和向后)移动,以及沿其z轴左右转动。

我们计划提供示例和代码来展示自主规划和运动。但作为自主行为的垫脚石,我们需要有一种手动远程控制 Hadabot 的方法。我们将使用此远程控制器来做到这一点。

此外,我们提到新的 Hadabot 将基于 ESP32 微控制器。ros2-web-bridge服务器将帮助我们连接ROS2到ESP32,ESP<>控制物理Hadabot平台上的电气元件。


6.六、 结论

        要从 hadabot_main/docker 停止并清理正在运行的 Docker 容器,请执行以下操作:

$ docker-compose down -v

恭喜您启动了在 ROS2 上运行的基于 Web 的远程控制器!在这篇文章中,我们介绍了以下内容:

  1. 启动基于 Web 的远程控制器,用于发布 ROS2 Twist 消息。

  2. 解释了远程控制器如何与作为 Docker 容器在本地运行的 ROS2 系统配合使用。

  3. 将这个远程控制器示例与正在进行的 Hadabot 开发联系起来,目标是创建一个简单、无挫折的机器人套件来构建和学习 ROS2 和机器人技术。

        像往常一样,如果您有建议,意见,或者只是想打个招呼,请不要犹豫,伸出援手 - 你好AT hadabot DOT com。

        你的好奇心被进一步激起了吗?通过上方导航栏中的保持联系按钮或下方页脚,随时了解 Hadabot 的未来发展。与其他黑客和机器人专家分享哈达机器人。

相关文章:

Hadabot:从网络浏览器操作 ROS2 远程控制器

一、说明 Hadabot Hadabot是一个学习ROS2和机器人技术的机器人套件。使用 Hadabot&#xff0c;您将能够以最小的挫败感和恐吓来构建和编程物理 ROS2 机器人。Hadabot套件目前正在开发中。它将仅针对ROS2功能&#xff0c;并强调基于Web的用户界面。 随着开发的进展&a…...

Kotlin 协程

Kotlin 协程&#xff08;Coroutines&#xff09;是一种轻量级的并发编程解决方案&#xff0c;旨在简化异步操作和多线程编程。它提供了一种顺序和非阻塞的方式来处理并发任务&#xff0c;使得代码可以更加简洁和易于理解。Kotlin 协程通过提供一套高级 API&#xff0c;使并发代…...

maven 从官网下载指定版本

1. 进入官网下载页面 Maven – Download Apache Maven 点击下图所示链接 2. 进入文件页&#xff0c;选择需要的版本 3. 选binaries 4. 选文件&#xff0c;下载即可...

数据结构---串(赋值,求子串,比较,定位)

目录 一.初始化 顺序表中串的存储 串的链式存储 二.赋值操作&#xff1a;将str赋值给S 链式表 顺序表 三.复制操作&#xff1a;将chars复制到str中 链式表 顺序表 四.判空操作 链式表 顺序表 五.清空操作 六.串联结 链式表 顺序表 七.求子串 链式表 顺序表…...

WPF CommunityToolkit.Mvvm

文章目录 前言ToolkitNuget安装简单使用SetProperty&#xff0c;通知更新RealyCommandCanExecute 新功能&#xff0c;代码生成器ObservablePropertyNotifyCanExecuteChangedForRelayCommand其他功能对应关系 NotifyPropertyChangedFor 前言 CommunityToolkit.Mvvm&#xff08;…...

Vue开发中如何解决国际化语言切换问题

Vue开发中如何解决国际化语言切换问题 引言&#xff1a; 在如今的全球化时代&#xff0c;应用程序的国际化变得越来越重要。为了让不同地区的用户能够更好地使用应用程序&#xff0c;我们需要对内容进行本地化&#xff0c;以适应不同语言和文化环境。对于使用Vue进行开发的应用…...

基于springboot+vue的流动人口登记系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…...

Stable Diffusion的使用以及各种资源

Stable Diffsuion资源目录 SD简述sd安装模型下载关键词&#xff0c;描述语句插件管理controlNet自己训练模型 SD简述 Stable Diffusion是2022年发布的深度学习文本到图像生成模型。它主要用于根据文本的描述产生详细图像&#xff0c;尽管它也可以应用于其他任务&#xff0c;如…...

Redis 分布式锁的实现方式

一般来说&#xff0c;在对数据进行“加锁”时&#xff0c;程序首先需要通过获取&#xff08;acquire&#xff09;锁来得到对数据排他性访问的能力&#xff0c;然后才能对数据执行一系列操作&#xff0c;最后还要将锁释放&#xff08;release&#xff09;给其他程序。 对于能够…...

VMware上搭建的虚拟机突然本地无法连接服务器

长时间没有使用VMware 虚拟机了&#xff0c;今天突然登录上去&#xff0c;启动虚拟服务器后发现本地等不了了&#xff0c; 经过排查发现是开启了&#xff1a;VirtualBox Host-Only Network 关闭之后就本机就可以直连服务器了...

JDBC回顾

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 JDBC回顾 前言一、JDBC1.JDBC是什么&#xff1f;2.如何使用&#xff1f;&#xff08;1&#xff09;注册驱动&#xff08;2&#xff09;获取连接&#xff08;3&#xff09;操作…...

mq 消息队列 mqtt emqx ActiveMQ RabbitMQ RocketMQ

省流&#xff1a; 十几年前&#xff0c;淘宝的notify&#xff0c;借鉴ActiveMQ。京东的ActiveMQ集群几百台&#xff0c;后面改成JMQ。 Linkedin的kafka&#xff0c;因为是scala&#xff0c;国内很多人不熟。淘宝的人把kafka用java写了一遍&#xff0c;取名metaq&#xff0c;后…...

沃尔玛卖家必看!解决订单被Kan、Feng号问题的终极方案!

近期有很多沃尔玛卖家和工作室联系到我提到说在沃尔玛平台上下单&#xff0c;买家号出现副款义常订单被k掉&#xff0c;是什么原因、我们该如何去解决呢&#xff1f; 以下是一些可能导至你的测评订单被k单的原因&#xff1a; 1.技术问题&#xff1a;有时&#xff0c;网站或系…...

浅谈日常使用的 Docker 底层原理-三大底座

适合的读者&#xff0c;对Docker有过简单了解的朋友&#xff0c;想要进一步了解Docker容器的朋友。 前言 回想我这两年&#xff0c;一直都是在使用 Docker&#xff0c;看过的视频、拜读过的博客&#xff0c;大都是在介绍 Docker 的由来、使用、优点和发展趋势&#xff0c;但对…...

前端面试:【DOM】编织网页的魔法

嘿&#xff0c;亲爱的代码魔法师&#xff01;在JavaScript的奇幻世界里&#xff0c;有一项强大的技能&#xff0c;那就是DOM操作。DOM&#xff08;文档对象模型&#xff09;操作允许你选择、修改和创建网页元素&#xff0c;就像是在编织一个魔法的网页。 1. 什么是DOM&#xff…...

基于MATLAB开发AUTOSAR软件应用层Code mapping专题-part 2 Inport和Outports 标签页介绍

上篇我们介绍了Function页的内容,这篇我们介绍Inports和Outports页的内容,这里我们再次强调一个概念,code mapping是以simulink的角度去看的,就是先要在模型中建立simulink模块,在code mapping里映射他要对应的autosar的元素,之后生成代码时的c语言的名字是以Autosar的元…...

第9步---MySQL的索引和存储引擎

第9步---MySQL的索引和存储引擎 1.索引 1.1分类 索引可以快速的找出具有特定值的行。不用从头开始进行寻找了。 类别 hash和btree hash 根据字段值生生成一个hash的值 快速的进行定位到对应的行的值 可能会出现相同的值&#xff0c;找到对应的空间会出现对应的值 btree树…...

Numpy入门(3)—线性代数

线性代数 线性代数&#xff08;如矩阵乘法、矩阵分解、行列式以及其他方阵数学等&#xff09;是任何数组库的重要组成部分&#xff0c;NumPy中实现了线性代数中常用的各种操作&#xff0c;并形成了numpy.linalg线性代数相关的模块。本节主要介绍如下函数&#xff1a; diag&am…...

php的openssl_encrypt是不是自动做了PKCS5Padding?

在PHP中&#xff0c;openssl_encrypt函数默认使用的是PKCS7填充&#xff08;不是PKCS5填充&#xff09;。PKCS7填充实际上是PKCS5填充的扩展&#xff0c;用于对不同块大小的数据进行填充。 当你使用openssl_encrypt函数进行加密时&#xff0c;如果你没有显式指定填充模式和填充…...

在本地创建repository及上传至github

文章目录 本地管理设定git的用户名与邮箱初始化添加修改提交修改设定分支问题一:error: insufficient permission for adding an object... 数据同步创建SSH keys创建并关联远程仓库上传改动至github问题二:Failed to connect to github.com port 443: Connection timed out问题…...

基于树莓派与开源硬件的虾类养殖水质监控系统设计与实践

1. 项目概述&#xff1a;一个开源的虾类养殖监控系统最近在翻看GitHub上的开源项目&#xff0c;偶然发现了一个挺有意思的仓库&#xff0c;叫“openshrimp”。光看名字&#xff0c;你可能会觉得这是个跟海鲜或者生物相关的项目&#xff0c;但实际上&#xff0c;它是一个面向水产…...

抖音内容采集技术方案深度解析:架构设计与企业级应用实战指南

抖音内容采集技术方案深度解析&#xff1a;架构设计与企业级应用实战指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallbac…...

GPU加速的时序驱动布局优化方法解析

1. 时序驱动布局优化&#xff1a;GPU加速的关键路径分析方法在超大规模集成电路(VLSI)物理设计流程中&#xff0c;布局阶段的质量直接影响芯片的时序收敛和最终性能。传统布局算法主要关注线长和拥塞优化&#xff0c;对时序指标的考虑相对间接。随着工艺节点不断进步&#xff0…...

特征工程:从数据到特征

特征工程&#xff1a;从数据到特征 1. 技术分析 1.1 特征工程流程 特征工程是机器学习的核心环节&#xff1a; 特征工程流程数据理解 → 特征提取 → 特征选择 → 特征转换 → 特征验证1.2 特征类型 类型描述处理方法数值型连续数值归一化、标准化分类型类别标签独热编码、…...

算法时代,技术人如何寻找自己的 “人生硬代码”

前言&#xff1a;我们优化了代码&#xff0c;却常常忽略了人生系统在 AI 日新月异、信息密度持续升高的时代&#xff0c;很多人比过去更忙&#xff0c;却也更容易迷茫。作为技术人&#xff0c;我们熟悉架构设计、性能优化、代码重构和系统调优。面对一个工程问题时&#xff0c;…...

白嫖使用 Claude Opus 4.7 一个月,新手保姆级教程

挖槽&#xff0c;最近亚马逊做了一次大善人&#xff0c;为它自家的 Kiro 做拉新活动&#xff0c;新注册账号可以直接获得一个月的 Kiro Pro 会员&#xff0c;价值 20 美刀。 教程非常详细&#xff0c;所以有点长&#xff0c;想看最短流程版的可以直接划到文章末尾。 Kiro 是什…...

基于MCP协议的CalDAV/CardDAV集成:AI智能体统一管理日历与通讯录

1. 项目概述与核心价值最近在折腾智能体&#xff08;Agent&#xff09;和自动化工作流时&#xff0c;发现一个痛点&#xff1a;很多强大的工具和数据源&#xff0c;比如日历、邮件、云盘&#xff0c;它们都有自己独立的API&#xff0c;但要让AI智能体去理解和操作这些分散的系统…...

基于MCP协议与Docker为Claude Code构建Brave搜索服务器Argus

1. 项目概述&#xff1a;为Claude Code打造一个“全视之眼” 如果你和我一样&#xff0c;日常重度依赖Claude Code来辅助编程、查资料、写文档&#xff0c;那你一定遇到过这样的痛点&#xff1a;当Claude需要联网搜索时&#xff0c;要么得手动复制粘贴&#xff0c;要么得依赖一…...

AI代理如何通过MCP协议实现DeFi自动化操作与安全交互

1. 项目概述&#xff1a;当DeFi遇上AI代理&#xff0c;一场链上金融的自动化革命如果你和我一样&#xff0c;在DeFi&#xff08;去中心化金融&#xff09;世界里摸爬滚打了好几年&#xff0c;从早期的流动性挖矿到后来的各种收益聚合器&#xff0c;一个深刻的体会是&#xff1a…...

5个关键步骤:在PC上部署高性能yuzu Switch模拟器

5个关键步骤&#xff1a;在PC上部署高性能yuzu Switch模拟器 【免费下载链接】yuzu 任天堂 Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/yu/yuzu yuzu是一款开源的任天堂Switch模拟器&#xff0c;让玩家能够在Windows、Linux和macOS系统上流畅运行Swi…...