云迹机器人底盘调用

云迹机器人底盘调用还是比较友好的,就是纯socket收发指令就能实现,今天实现一个底盘移动到指定点位功能。底盘的默认IP是192.168.10.10通讯端口是31001,测试机与底盘接入统一网络后直接发指令即可。本文给出两种语言调用源码,选择一种使用即可。

python调用源码:

import socket
import jsonyunji_ip = "192.168.10.10"#设定地盘ip地址,需要根据机器人实际ip地址修改#底盘-移动到指定为止
def YunjiGo(target):print(f"---------------------YunjiGo:{target}---------------------")port = 31001command = "/api/move?marker=" + target + "&distance_tolerance=0&theta_tolerance=0"client = socket.socket()client.connect((yunji_ip, port))print(f"command:{command}")client.send(command.encode())while True:try:data = client.recv(1024)if not data:print("Socket closed by peer.")return Nonestr_data = data.decode('utf-8')split_data = [s for s in str_data.split('\n') if s]for s in split_data:try:json_data = json.loads(s)print(json_data.get("description"))# 检查条件:任务完成且目标匹配if (json_data.get("description") == "The move task is finished."and "data" in json_dataand "target" in json_data["data"]and json_data["data"]["target"] == target):print("Task finished successfully!")client.close()  # 关闭 socketreturn True     # 返回成功except json.JSONDecodeError:print("Invalid JSON data, continue waiting...")continueexcept socket.timeout:print("Timeout reached, no matching data received.")return Noneexcept Exception as e:print(f"Error occurred: {e}")client.close()  # 确保异常时关闭 socketreturn None
YunjiGo("huahua")#移动到点位huahua

JAVA调用源码:(需要下载org.json-20161124.jar)

package examples;
import java.io.*;
import java.net.*;
import org.json.JSONObject;
import org.json.JSONException;/*
依赖安装:
sudo apt update
sudo apt install language-pack-zh-hans  # 简体中文
sudo apt install fonts-noto-cjk        # 中文字体
sudo apt install default-jdk*///make:
/*
cd /home/java
javac -encoding UTF-8 -cp .:\
org.json-20161124.jar \
examples/RobotControl.java
*/
//run : 
/*
cd /home/java
java -Dfile.encoding=UTF-8 -cp .:\
org.json-20161124.jar \
examples.RobotControl
*/public class RobotControl {String yunji_ip  = "192.168.10.10";  // 底盘ip地址int yunji_port = 31001;//底盘通讯端口private static RobotControl mInstance =null;public static synchronized RobotControl getInstance() {if (mInstance == null) {mInstance = new RobotControl();}return mInstance;}//底盘移动public void YunjiGo(String target) throws Exception{String command = "/api/move?marker=" + target + "&distance_tolerance=0.01&theta_tolerance=0.01";try {Socket client = new Socket(yunji_ip, yunji_port);//System.out.println("command:" + command);OutputStream out = client.getOutputStream();out.write(command.getBytes());out.flush();InputStream in = client.getInputStream();BufferedReader reader = new BufferedReader(new InputStreamReader(in));String strData;while ((strData = reader.readLine()) != null) {//System.out.println("strData:" + strData);try {JSONObject jsonData = new JSONObject(strData);System.out.println(jsonData.optString("description"));// 检查条件:任务完成且目标匹配if (jsonData.optString("description").equals("The move task is finished.")&& jsonData.has("data")&& jsonData.getJSONObject("data").has("target")&& jsonData.getJSONObject("data").getString("target").equals(target)) {System.out.println("Task finished successfully!");client.close(); // 关闭 socketreturn;    // 返回成功}} catch (JSONException e) {System.out.println("Invalid JSON data, continue waiting...");continue;}}throw new Exception("Socket closed by peer.");} catch (SocketTimeoutException e) {throw new Exception("Timeout reached, no matching data received.");} catch (Exception e) {throw new Exception("Error occurred: " + e.getMessage());}}public static void main(String[] args) {  RobotControl robotControl = RobotControl.getInstance();try{System.out.println("------------YunjiGo------------");robotControl.YunjiGo("huahua");} catch (Exception e) {System.out.println("YunjiGo Error occurred: " + e.getMessage());}System.out.println();}
}

运行输出:


------------YunjiGo------------The move task is started.
Start to leave charging pile..
Charge status off.
Succeed to leave charging pile.
traffic turn right.
traffic turn right.
The move task is finished.
Task finished successfully!

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

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

相关文章

勇闯Chromium—— Chromium的多进程架构

问题 构建一个永不崩溃或挂起的渲染引擎几乎是不可能的,构建一个绝对安全的渲染引擎也几乎是不可能的。 从某种程度上来说,2006 年左右的网络浏览器状态与过去单用户、协作式多任务操作系统的状况类似。正如在这样的操作系统中,一个行为不端的应用程序可能导致整个系统崩溃…

MYSQL中的分库分表及产生的分布式问题

分库分表是分布式数据库架构中常用的优化手段,用于解决单库单表数据量过大、性能瓶颈等问题。其核心思想是将数据分散到多个数据库(分库)或多个表(分表)中,以提升系统的吞吐量、查询性能和可扩展性。 一&am…

GAMES104 Piccolo引擎搭建配置

操作系统:windows11 家庭版 inter 17 12 th 显卡:amd 运行内存:>12 1、如何构建? 在github下载:网址如下 https://github.com/BoomingTech/Piccolo 下载后安装 git、vs2022 Git Visual Studio 2022 IDE - …

页表:从虚拟内存到物理内存的转换

目录 引言 虚拟内存 页表 单级页表 页表项 单级页表的不足 二级页表 四级页表 快表TLB 结语 引言 一个系统中,CPU和内存是被所有进程共享的,而且一个系统中往往运行着多个进程。如果一个进程不小心写了另一个进程的内存,那么被写入…

互联网大厂Java求职面试:短视频平台大规模实时互动系统架构设计

互联网大厂Java求职面试:短视频平台大规模实时互动系统架构设计 面试背景介绍 技术总监(严肃脸): 欢迎来到我们今天的模拟面试,我是技术部的李总监,负责平台后端架构和高可用系统设计。今天我们将围绕一个…

网络段、主机段、子网掩码

子网掩码把 IP 切割成了网络段和主机段两部分。同一网段下的不同主机之间可以互通网络。 掩码 IPV4 默认情况下 IP 地址 192.168.0.x 可以分配 256 个主机地址(不考虑首尾两个特殊的地址时)。 假设我们只需要用到 8 个主机,就可以借助子网掩…

从零搭建SpringBoot Web 单体项目2、SpringBoot 整合数据库

系列文章 从零搭建SpringBoot Web单体项目【基础篇】1、IDEA搭建SpringBoot项目 从零搭建 SpringBoot Web 单体项目【基础篇】2、SpringBoot 整合数据库 目录 一、项目基础环境说明 二、数据库整合流程 1. 添加 MyBatis-Plus 相关依赖(pom.xml) 2…

4款顶级磁力下载工具,速度提升器,可以变下变播

今天给大家带来一些超给力的磁力下载工具,速度飞快,最高可达20MB/s,而且还能边下边播! 下载链接:夸克网盘分享(点击蓝色字体自行保存下载) 一、柚子下载 柚子下载界面干净,没有广…

怎样判断服务器网络质量的状态?

服务器存储着企业的重要数据信息,服务器的网络质量会影响到用户访问数据信息的速度,也决定着网站页面是否会出现卡顿或页面崩溃的情况,那我们对于服务器中网络质量的状态该如何进行判断呢? 服务器的网络状态通常是指服务器与外部网…

零基础入门Selenium自动化测试:自动登录edu邮箱

🌟 Selenium简单概述一下 Selenium 是一个开源的自动化测试工具,主要用于 Web 应用程序的功能测试。它能够模拟用户操作浏览器的行为(如点击按钮、填写表单、导航页面等),应用于前端开发、测试和运维领域。 特点 跨…

day36 python神经网络训练

目录 一、数据准备与预处理 二、数据集划分与归一化 三、构建神经网络模型 四、定义损失函数和优化器 五、训练模型 六、评估模型 在机器学习和深度学习的实践中,信贷风险评估是一个非常重要的应用场景。通过构建神经网络模型,我们可以对客户的信用…

如何确定是不是一个bug?

在软件测试过程中,我们经常会遇到一些异常现象,但并非所有异常都是Bug。如何准确判断一个问题是否属于Bug?本文将从Bug的定义、判定标准、常见误区和实战技巧四个方面展开,帮助测试工程师提高Bug判定的准确性。 1. Bug的定义:什么情况下算Bug? 一个Bug(缺陷)通常指软件…

Lombok与Jackson实现高效JSON序列化与反序列化

引言 在Java开发中,处理JSON数据是常见需求,而Jackson作为广泛使用的JSON库,能够高效地将Java对象与JSON互相转换。然而,传统的POJO(Plain Old Java Object)需要手动编写大量样板代码(如getter…

论文阅读:PURPLE: Making a Large Language Model a Better SQL Writer

论文地址:PURPLE: Making a Large Language Model a Better SQL Writer 摘要 大语言模型(LLM)技术在自然语言到 SQL(NL2SQL)翻译中扮演着越来越重要的角色。通过大量语料训练的 LLM 具有强大的自然语言理解能力和基本…

【图像大模型】ControlNet:深度条件控制的生成模型架构解析

ControlNet:深度条件控制的生成模型架构解析 一、核心原理与技术突破1.1 基础架构设计1.2 零卷积初始化1.3 多条件控制机制 二、系统架构与实现细节2.1 完整处理流程2.2 性能指标对比 三、实战部署指南3.1 环境配置3.2 基础推理代码3.3 高级控制参数 四、典型问题解…

【从0到1搞懂大模型】chatGPT 中的对齐优化(RLHF)讲解与实战(9)

GPT系列模型的演进 chatgpt系列模型演进的重要节点包含下面几个模型(当然,这两年模型发展太快了,4o这些推理模型我就先不写了) (Transformer) → GPT-1 → GPT-2 → GPT-3 → InstructGPT/ChatGPT(GPT-3.5) → GPT-4 下面介绍一…

2025年AEI SCI1区TOP,改进麻雀搜索算法MSSA+建筑三维重建,深度解析+性能实测

目录 1.摘要2.麻雀搜索算法SSA原理3.整体框架4.改进SSA算法5.结果展示6.参考文献7.代码获取8.读者交流 1.摘要 对现有建筑进行高质量的三维重建对于其维护、修复和管理至关重要。图像采集中的有效视角规划会显著影响基于摄影测量的三维重建质量。复杂的建筑结构常常导致传统视…

鸿蒙开发:如何实现列表吸顶

前言 本文基于Api13 列表吸顶功能,在实际的开发中有着很大的作用,比如可以让列表层级之间更加分明,减少一定程度上的视觉混乱,由于吸顶的标题会随着滚动固定在顶部,可以让用户无需反复滑动回顶部确认分组位置&#xff…

使用Zotero的RSS订阅功能快速了解感兴趣领域最新文章

文章目录 写在前面中文期刊的RSS订阅英文期刊的RSS订阅回到Zotero有啥用? 写在前面 作为一名研究生或者科研工作者,肯定需要经常检索自己研究领域的最新文献,相比于不定期的去各大数据库检索文献,借助RSS订阅功能则更加便捷。 R…

Windows安装Docker Desktop开启 Kubenetes制作并部署本地镜像

1、安装Docker Desktop docker desktop官方下载链接,下载后一路点下来安装就好了。 2、制作本地镜像 跟着docker步骤制作镜像,需要先配置docker 镜像源,因为网络问题 {"builder": {"gc": {"defaultKeepStorage&…