ROS1通过rosbridge在局域网中控制turtle进行运动(PC和手机)
通过ROSbridge控制小海龟(turtlesim)的具体案例。使用一个简单的Python脚本通过通过局域网上连接上传ROSbridge服务器,并发送速度指令来控制小海龟的移动
功能包的结构如下:

HTML文件的编写(界面)
html用于存放html文件,内容包含了可以通过前进,后退,左转,右转,停止等动作,在这里已经编写好了,最后的效果如下图:

在这里附上程序源码,将源码复制自己的目录的当中即可,也不一定是要在自己的功能包当中
<!DOCTYPE html>
<html lang="en">
<head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Turtle Control</title> <style> /* 简单的样式 */ body { font-family: Arial, sans-serif; text-align: center; } button { margin: 10px; padding: 10px 20px; font-size: 16px; } </style>
</head>
<body> <h1>Turtle Control</h1> <button id="forwardButton">前进</button> <button id="backwardButton">后退</button> <button id="leftButton">左转</button> <button id="rightButton">右转</button> <button id="stopButton">停止</button> <script src="../js/turtle_control.js"></script>
</body>
</html>
在上述的html文件当中,会用到一个叫turtle_control.js的文件,这个文件就是后续需要通过编写然后给ROS系统传递信息。路径需要自行记住。
JS文件的编写(发送控制消息)
同样的通过编写js文件,语法就是经典的JavaScript,程序源码如下:
下面的程序当中,192.168.31.110要更换成自己的 ip地址,后面的9090要记住,后面调用rosbridge 的时候会用得上。
// WebSocket连接信息
const wsUri = "ws://192.168.31.110:9090";
let socket = new WebSocket(wsUri); // 定义速度消息
function createVelocityCommand(linear, angular) { return JSON.stringify({ op: "publish", type: "geometry_msgs/Twist", topic: "/turtle1/cmd_vel", msg: { linear: { x: linear, y: 0, z: 0 }, angular: { x: 0, y: 0, z: angular } } });
} // 处理WebSocket连接打开
socket.onopen = function(event) { console.log("Connected to ROSbridge");
}; // 处理WebSocket接收到的消息
socket.onmessage = function(event) { console.log("Received:", event.data);
}; // 处理WebSocket错误
socket.onerror = function(error) { console.error("WebSocket Error:", error);
}; // 处理按钮点击事件
document.getElementById('forwardButton').addEventListener('click', function() { socket.send(createVelocityCommand(1, 0)); // 前进
}); document.getElementById('backwardButton').addEventListener('click', function() { socket.send(createVelocityCommand(-1, 0)); // 后退
}); document.getElementById('leftButton').addEventListener('click', function() { socket.send(createVelocityCommand(0, 1)); // 左转
}); document.getElementById('rightButton').addEventListener('click', function() { socket.send(createVelocityCommand(0, -1)); // 右转
}); document.getElementById('stopButton').addEventListener('click', function() { socket.send(createVelocityCommand(0, 0)); // 停止
}); // 可以在这里添加更多的逻辑,比如处理关闭连接等
安装rosbridge_suite包
确保你已经安装了ROS和rosbridge_suite包。你可以通过以下命令安装它们(以ROS Noetic为例):
sudo apt-get install ros-noetic-rosbridge-suite
开始执行
然后,启动ROScore和小海龟仿真器:
roscore
rosrun turtlesim turtlesim_node
接下来,启动ROSbridge WebSocket服务器。你可以使用rosbridge_websocket包来做到这一点:
rosrun rosbridge_server rosbridge_websocket
在这里为了方便,我写成了一个launch文件同时启动这两个节点,程序内容如下:
<?xml version="1.0"?>
<launch><node pkg="turtlesim" type="turtlesim_node" name="turtle1" output="screen"/><node pkg="rosbridge_server" type="rosbridge_websocket" name="rosbridge_server" output="screen"/>
</launch>
接着就可以按部就班的执行了
-
新建一个命令行终端,输入指令
roslaunch web_rosbridge web_rosbridge.launch

-
然后再新建一个命令行终端,接着输入指令
python3 -m http.server 8080



这两个指令的ip地址要区分开rosbridge通信的地址是的localhost:9090,而上传到本地的服务端用到的是8080端口,也就是我们只需要通过查看自己的设备在同一个局域网下的ip地址,后面跟上8080,就可以访问了,还有就是需要注意的就是输入第二个指令执行这个http.server服务的时候,尽量在自己html目录下进行执行,方便打开对应的ip地址直接可以进行查看。
同样的我们通过手机,连接上同样的局域网之后,接着输入自己手机的ip地址到浏览器上,记得加上对应的8080号端口,效果如下:


🌸🌸🌸完结撒花🌸🌸🌸
🌈🌈Redamancy🌈🌈
相关文章:
ROS1通过rosbridge在局域网中控制turtle进行运动(PC和手机)
通过ROSbridge控制小海龟(turtlesim)的具体案例。使用一个简单的Python脚本通过通过局域网上连接上传ROSbridge服务器,并发送速度指令来控制小海龟的移动 功能包的结构如下: HTML文件的编写(界面) html用…...
MQ高级篇---消息可靠性
MQ的一些常见问题 后面内容基于springboot 2.3.9.RELEASE 消息可靠性 生产者确认机制 在publisher微服务中application.yml中添加 spring:rabbitmq:publisher-confirm-type: correlatedpublisher-returns: truetemplate:mandatory: true每个RabbitTemplate只能配置一个Return…...
SpringMVC | SpringMVC中的 “文件上传和下载”
目录: 一、文件上传1.1 文件上传“概述”1.2 文件上传“具体配置” :“前端”中配置“文件上传” ( type“file” 满足3个条件 )“后端”中配置“文件上传” ( 配置id为“CommonsMultipartResolver”的bean 配置“文件上传”的“约束条件” 通过“MultipartFile接口”参数接…...
JVM快速入门(2)HotSpot和堆、新生区、永久区、堆内存调优、JProfiler工具分析OOM原因、GC(垃圾回收)、JVM经典面试笔试题整理
5.6 HotSpot和堆 5.6.1 Hotspot 三种JVM: Sun公司,HotspotBEA,JRockitIBM,J9 VM,号称是世界上最快的Java虚拟机 我们一般学习的是:HotSpot 5.6.2 堆 Heap,一个JVM只有一个堆内存,…...
我的风采——android studio
目录 实现“我的风采”页面要求理论代码生成apk文件 实现“我的风采”页面 要求 要求利用’java框架的边框布局实现“找的风采 ”页而,其中中间为你的生活照,左右和下面为按钮,上面为标签 理论 Java GUI编程是Java程序设计的重要组成部分…...
BMS设计中的短路保护和MOSFET选型(上)
电池管理系统(BMS)是一种能够对电池进行监控和管理的电子装备,是电池与用户之间的纽带。通过对电压、电流、温度以及SOC等数据采集,计算进而控制电池的充放电过程,主要就是为了能够提高电池的利用率,防止电…...
用go实现一个任务调度类 (泛型)
用go实现一个任务调度类 (泛型) 源码地址: https://github.com/robinfoxnan/BirdTalkServer/blob/main/server/core/workmanager.go 1.概述 实现了一个简单的任务管理系统,允许用户定义任务和工作者,并将任务分配给…...
ansible 管理工具以及常用模块
一、前期准备 1、安装 yum install ansible 如果yum源没有ansible,需要提前配置yum源: mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup wget -O…...
javaSSM公司招聘管理系统IDEA开发mysql数据库web结构计算机java编程maven项目
一、源码特点 IDEA开发SSM公司招聘管理系统是一套完善的完整企业内部系统,结合SSM框架和bootstrap完成本系统,对理解JSP java编程开发语言有帮助系统采用SSM框架(MVC模式开发)MAVEN方式加 载,系统具有完整的源代码和…...
蓝桥杯day11刷题日记
P8615 [蓝桥杯 2014 国 C] 拼接平方数 思路:先把数据范围内的平方数打上标记,然后就是遍历这个区间,转成字符串(好拆数据),用substr拆开数据,再强转成整数类型,最后查看拆开的数据是…...
IDEA, Pycharm, Goland控制台乱码
IDEA, Pycharm, Goland控制台乱码 问题描述: 控制台出现����等乱码 复现频率: 总是 解决方案: 以IDEA为例 添加 -Dfile.encodingUTF-8位置 idea64.exe.vmoptions 在安装idea的bin目录idea.vmoptions idea客户端 示意图...
JavaScript单元测试jasmine学习(一)
介绍: jasmine是用于测试JavaScript的一种测试框架,BDD(Behavior Driven Development)行为驱动开发。不依赖于任何其他JavaScript框架,也不需要DOM 准备工作: 1. 首先添加jasmine到自己的项目中 npm install --save-dev jasmine 2. 在项目…...
108、3D Gaussian Splatting for Real-Time Radiance Field Rendering
简介 官网 更少训练时间的同时实现最先进的视觉质量,能在1080p分辨率下实现高质量的实时(≥30 fps)新视图合成 NeRF使用隐式场景表示,体素,点云等属于显示建模方法,3DGS就是显示辐射场。它用3D高斯作为灵活高效的表示方法&…...
PHP之CURL和Socket
文章目录 一、CURL1.基本流程(1)初始化(2)向服务器发送请求(3)向服务器发送请求(4)关闭curl 2.CURLOPT参数记得写一个文件curl上传的例子记得写一个json上传的例子3.CURL批处理 二、…...
【Web】NKCTF 2024 个人wp(部分)
目录 my first cms 全世界最简单的CTF attack_tacooooo 属实太菜了,3/4 my first cms 一眼搜版本2.2.19 CVE -CVE-2024-27622 GitHub - capture0x/CMSMadeSimple 访问/admin/login.php 爆出弱口令,后台登录 admin Admin123 Extensions > User D…...
QT常见布局器使用
布局简介 为什么要布局?通过布局拖动不影响鼠标拖动窗口的效果等优点.QT设计器布局比较固定,不方便后期修改和维护;在Qt里面布局分为四个大类 : 盒子布局:QBoxLayout 网格布局:QGridLayout 表单布局&am…...
政安晨:【深度学习部署】—— TensorFlow Extended(TFX)介绍
政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras实战演绎机器学习 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 前言 TensorFlow Extended(TFX&a…...
宝石与石头
宝石与石头 链接:https://leetcode.cn/problems/jewels-and-stones/description/ 给你⼀个字符串 jewels 代表石头中宝石的类型,另有⼀个字符串 stones 代表你拥有的石头。 stones 中每个字符代表了⼀种你拥有的石头的类型,你想知道你拥有的石头中有多…...
【Vue3之computed属性(四)】
文章目录 前言一、computed属性有缓存二、使用方法三、修改全名 前言 理解computed属性,实现输入姓和名得出全名并双向绑定,区分单向绑定和双向绑定。测试computed属性和方法的区别 一、computed属性有缓存 先引入computed,写箭头函数定义并…...
生产力工具|安装更新R软件(R、studio)
内容介绍: 安装R软件: 下载 R X64 3.5.1: 访问官方R网站 https://cran.r-project.org/。选择适合Windows版本的安装包。将安装包下载到您的计算机。 本地安装: 运行下载的“R-3.5.1-win.exe”文件。按照安装向导,选择安装路径,取消…...
本地语音合成技术全解析:从架构设计到行业落地
本地语音合成技术全解析:从架构设计到行业落地 【免费下载链接】tts-vue 🎤 微软语音合成工具,使用 Electron Vue ElementPlus Vite 构建。 项目地址: https://gitcode.com/gh_mirrors/tt/tts-vue 一、技术价值:为何本地…...
用SystemVerilog约束玩点花的:模拟CPU负载、网络包生成与游戏道具掉落
用SystemVerilog约束玩点花的:模拟CPU负载、网络包生成与游戏道具掉落 在硬件验证领域之外,SystemVerilog的约束随机化机制其实是一把被低估的瑞士军刀。想象一下,你能否用芯片验证的工具来设计一个游戏道具系统?或者用它来生成逼…...
3个颠覆性技巧:NVIDIA Profile Inspector如何释放显卡隐藏性能
3个颠覆性技巧:NVIDIA Profile Inspector如何释放显卡隐藏性能 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector NVIDIA Profile Inspector是一款专业的显卡参数配置工具,能够深度…...
Pixel Language Portal惊艳案例:用Hunyuan-MT-7B将甲骨文识别结果实时译为多语种学术注解
Pixel Language Portal惊艳案例:用Hunyuan-MT-7B将甲骨文识别结果实时译为多语种学术注解 1. 项目概览:当古老文字遇见现代AI Pixel Language Portal(像素语言跨维传送门)是一款基于腾讯Hunyuan-MT-7B大模型构建的创新翻译工具。…...
DeepSeek LeetCode 1210. 穿过迷宫的最少移动次数 public int minimumMoves(int[][] grid)
我来分析 LeetCode 1210 “穿过迷宫的最少移动次数” 的解题思路和实现。 问题分析 我们有一条长度为 2 的蛇,需要从起点 (0,0) 和 (0,1)(水平放置)移动到终点 (n-1, n-2) 和 (n-1, n-1)(仍为水平放置)。蛇可以&#x…...
STM32定时器编码器模式:从ARR寄存器到精准测速的实战解析
1. STM32编码器模式基础认知 第一次接触STM32的编码器接口时,我完全被那些专业术语搞懵了。什么正交解码、自动重装值、计数方向,听起来就像天书。但当我真正用起来才发现,这玩意儿简直就是为电机测速量身定做的神器。 编码器模式本质上就是定…...
OpenClaw+千问3.5-9B数据清洗:Excel复杂表格自动化处理
OpenClaw千问3.5-9B数据清洗:Excel复杂表格自动化处理 1. 为什么需要自动化Excel处理 每次面对上百行的Excel表格时,我总会在合并单元格和异常值上浪费大量时间。作为数据分析师,最痛苦的莫过于收到业务部门发来的"美化版"报表—…...
Geekble测谎模块Arduino库:GSR生理信号采集与多模态反馈
1. 项目概述Geekble_LieDetector 是一款面向嵌入式平台(典型为基于ATmega328P的Arduino兼容控制器)设计的生理信号检测与交互控制库,专用于驱动 Geekble LieDetector 模块。该模块并非传统意义上的“测谎仪”,而是一个以皮肤电导&…...
BIOS更新全攻略:从版本检查到安全升级的实用指南
1. BIOS更新前的必要准备 每次打开电脑时,那个一闪而过的黑底白字界面就是BIOS(基本输入输出系统),它就像是电脑硬件的"总指挥"。我见过太多人因为盲目刷BIOS导致主板报废的案例,所以更新前一定要做好这些准…...
llama-factory || AutoDL || 自定义数据集微调实战指南
1. 从零开始:认识llama-factory与AutoDL 第一次接触llama-factory时,我完全被这个开源项目的设计理念打动了。它就像是为大模型微调量身定制的"乐高积木",把复杂的模型训练过程封装成了可视化的操作界面。而AutoDL作为国内领先的AI…...
