【Coppeliasim】 通过TCP与coppeliasim通信

仿真客户端,  代码中启动了tcp服务器。


sim=require'sim'
socket=require'socket'

-- 以下函数将数据写入套接字(仅为简单起见只处理单个数据包):
writeSocketData=function(client,data)
    local header=string.char(59,57,math.mod(#data,256),math.floor(#data/256),0,0)
    -- 数据包头是(在这种情况下):headerID(59,57),数据大小(WORD),剩余包数(WORD)但在这里未使用
    client:send(header..data)
end

-- 以下函数从套接字读取数据(仅为简单起见只处理单个数据包):
readSocketData=function(client)
    -- 数据包头是:headerID(59,57),数据大小(WORD),剩余包数(WORD)但在这里未使用
    local header=client:receive(6)
    if (header==nil) then
        return(nil) -- 错误
    end
    if (header:byte(1)==59)and(header:byte(2)==57) then
        local l=header:byte(3)+header:byte(4)*256
        return(client:receive(l))
    else
        return(nil) -- 错误
    end
end

-- 感知系统调用
function sysCall_sensing() 
    local p=sim.getObjectPosition(robot)
    sim.addDrawingObjectItem(drawingCont,p)
end 

-- 清理系统调用
function sysCall_cleanup()
    if client then
        client:close()
    end
end

-- 线程系统调用
function sysCall_thread()
    -- 初始化:
    robot=sim.getObject('.')
    drawingCont=sim.addDrawingObject(sim.drawing_linestrip+sim.drawing_cyclic,2,0,-1,400,{1,1,0},nil,nil,{1,1,0})
    sim.setStepping(true) -- 我们希望手动切换以同步(并且不浪费处理时间!)
    -- 获取一些句柄:
    local leftMotor=sim.getObject("./LeftMotor") -- 左电机的句柄
    local rightMotor=sim.getObject("./RightMotor") -- 右电机的句柄
    local noseSensor=sim.getObject("./SensingNose") -- 接近传感器的句柄

    -- 在可能未被使用的端口上启动服务器(尽量使用相似的代码):
    local portNb=sim.getInt32Param(sim.intparam_server_port_next)
    local portStart=sim.getInt32Param(sim.intparam_server_port_start)
    local portRange=sim.getInt32Param(sim.intparam_server_port_range)
    local newPortNb=portNb+1
    if (newPortNb>=portStart+portRange) then
        newPortNb=portStart
    end
    sim.setInt32Param(sim.intparam_server_port_next,newPortNb)

    local result=sim.launchExecutable('bubbleRobServer',portNb,0) -- 将最后一个参数设置为1以查看启动服务器的控制台

    if (result==-1) then
        -- 无法启动可执行文件!
        sim.addLog(sim.verbosity_scripterrors,"'bubbleRobServer' 无法启动。模拟将无法正常运行")
    else
        sim.wait(1,false)
        -- 可执行文件可以启动。现在构建一个套接字并连接到服务器:
        client=socket.tcp()
        local result=client:connect('127.0.0.1',portNb)

        if (result==1) then
            -- 我们可以连接到服务器
            while (true) do
                -- 发送接近传感器和模拟时间到bubbleRob服务器应用程序:
                -- 准备要发送的数据:
                local dataOut={0,sim.getSimulationTime()}
                local result,dist=sim.readProximitySensor(noseSensor)
                if (result>0) then
                    dataOut[1]=dist
                end
                -- 将数据打包成字符串:
                dataOut=sim.packFloatTable(dataOut)
                -- 发送数据:
                writeSocketData(client,dataOut)
                -- 从服务器读取回复:
                local returnData=readSocketData(client)
                if (returnData==nil) then
                    break -- 读取错误
                end
                -- 解包接收到的数据:
                returnData=sim.unpackFloatTable(returnData)
                -- 将值应用为电机速度:
                sim.setJointTargetVelocity(leftMotor,returnData[1])
                sim.setJointTargetVelocity(rightMotor,returnData[2])

                -- 如果模拟时间未改变,请不要在这个循环中浪费时间!这也与主脚本同步
                sim.step() -- 这个协程将在下一个模拟步骤中恢复
            end
        end
    end
end

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

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

相关文章

【EI会议征稿】第七届大数据与应用统计国际学术研讨会(ISBDAS 2024)

第七届大数据与应用统计国际学术研讨会(ISBDAS 2024) 2024 7th International Symposium on Big Data and Applied Statistics 第七届大数据与应用统计国际学术研讨会(ISBDAS 2024)定于2024年3月8-10日在中国上海举行。会议旨在…

wpf devexpress Property Gird管理集合属性

Property Grid允许你添加,浏览和编辑集合属性

ESP32 MicroPython UART及小车类构造函数实验⑥

ESP32 MicroPython UART及小车类构造函数实验⑥ 1、实验目的2、实验内容3、参考代码4、实验结果 1、实验目的 控制小车动起来 2、实验内容 控制小车的前进、后退、左转、右转。读取小车 使用到的串口构造函数: uartmachine.UART(id,baudrate,rx,tx)uart:返回的构…

常见的反爬+文字加解密

一、常见的反爬介绍 基于身份识别的反爬:1.User-agent 2.Referer 3.Captcha 验证码 4.必备参数 基于爬虫行为的反爬:1.单位时间内请求数量超过一定阈值 2.相邻两次请求之间间隔小于一定阈值3.蜜罐陷阱 通过对数据加密进行反爬:1.对文字加密…

Elasticsearch:通过摄取管道加上嵌套向量对大型文档进行分块轻松地实现段落搜索

作者:VECTOR SEARCH 向量搜索是一种基于含义而不是精确或不精确的 token 匹配技术来搜索数据的强大方法。 然而,强大的向量搜索的文本嵌入模型只能按几个句子的顺序处理短文本段落,而不是可以处理任意大量文本的基于 BM25 的技术。 现在&…

Linux CentOS 8(DHCP的配置与管理)

Linux CentOS 8(DHCP的配置与管理) 目录 一、项目介绍二、DHCP服务简介三、DHCP工作原理四、配置DHCP服务4.1 项目配置准备4.2 dhcpd配置文件框架与参数说明4.3 登录客户机验证4.4 客户端IP地址的释放与重新申请4.5 保留特定IP地址 一、项目介绍 当计算…

使用Open3D库处理3D模型数据的实践指南

目录 引言 一、安装Open3D库 二、加载3D模型数据 三、处理3D模型数据 1、去除模型中的无效面 2、提取模型特征 四、存储处理后的3D模型数据 五、可视化处理后的3D模型数据 六、注意事项 结论 引言 在处理3D模型数据时,Open3D库是一个功能强大且易于使用的…

【Qt之QStandardItemModel】使用,tableview、listview、treeview设置模型

1. 引入 QStandardItemModel类提供了一个通用的模型,用于存储自定义数据。 以下是其用法:该类属于gui模块,因此在.pro中,需添加QT gui,如果已存在,则无需重复添加。 首先,引入头文件&#xff…

ARM 版 Kylin V10 部署 KubeSphere 3.4.0 不完全指南

前言 知识点 定级:入门级KubeKey 安装部署 ARM 版 KubeSphere 和 KubernetesARM 版麒麟 V10 安装部署 KubeSphere 和 Kubernetes 常见问题 实战服务器配置 (个人云上测试服务器) 主机名IPCPU内存系统盘数据盘用途ksp-master-1172.16.33.1681650200KubeSphere/k8…

hash 哈希表

哈希表是一种期望算法。 一般情况下,哈希表的时间复杂度是 O(1)。 作用 将一个复杂数据结构映射到一个较小的空间 0~N(10^5~10^6),最常用的情景:将 0~10^9 映射到 0~10^5。 离散化是一种及其特殊的哈希方式。离散化…

【SAP-ABAP】--MRKO隐式增强字段步骤

业务需求:给MRKO增加几个增强字段 给标准表进行增强 1.如果标准表或者结构,带CL_***,一般表示SAP预留的增强位置,可以 直接双击这个类型,点击创建,然后直接在预留的结构里面添加自己 需要增加的字段 2.如…

无线物理层安全大作业

这个标题很帅 Beamforming Optimization for Physical Layer Security in MISO Wireless NetworksProblem Stateme![在这里插入图片描述](https://img-blog.csdnimg.cn/58ebb0df787c4e23b0c7be4189ebc322.png) Beamforming Optimization for Physical Layer Security in MISO W…

wpf devexpress Property Grid创建属性定义

WPF Property Grid控件使用属性定义定义如何做和显示 本教程示范如何绑定WP Property Grid控件到数据和创建属性定义。 执行如下步骤 第一步-创建属性定义 添加PropertyGridControl组件到项目。 打开工具箱在vs,定位到DX.23.1: Data 面板,选择Prope…

Spring 如何自己创建一个IOC 容器

IOC(Inversion of Control),意思是控制反转,不是什么技术,而是一种设计思想,IOC意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。 在传统的程序设计中,我们直接在对象内部通过new进行对象创建…

ssrf学习笔记总结

SSRF概述 ​ 服务器会根据用户提交的URL 发送一个HTTP 请求。使用用户指定的URL,Web 应用可以获取图片或者文件资源等。典型的例子是百度识图功能。 ​ 如果没有对用户提交URL 和远端服务器所返回的信息做合适的验证或过滤,就有可能存在“请求伪造”的…

新品首发 | HP1011:高性能双相交错 PFC 数字控制器

随着PFC技术的发展,不断有新型PFC拓扑结构提出,如单相PFC、交错并联 PFC、传统无桥PFC、图腾柱无桥 PFC等。交错Boost PFC系统不仅具有并联系统的所有优点,还能减少输入电流纹波,降低开关管的电流应力。在中大功率场所通常采用工作…

【汇编】栈及栈操作的实现

文章目录 前言一、栈是什么?二、栈的特点三、栈操作四、8086cpu操作栈4.1 汇编指令4.2 汇编代码讲解问题:回答: 4.3 栈的操作4.3 push 指令和pop指令的执行过程执行入栈(push)时,栈顶超出栈空间执行出栈(pop)时,栈顶超…

图像分类系列(四) InceptionV2-V3学习详细记录

前言 上一篇我们介绍了Inception的原始版本和V1版本:经典神经网络论文超详细解读(三)——GoogLeNet学习笔记(翻译+精读代码复现) 这个结构在当时获得了第一名,备受关注。但InceptionV1是比较复…

机器学习第4天:模型优化方法—梯度下降

文章目录 前言 梯度下降原理简述 介绍 可能的问题 批量梯度下降 随机梯度下降 基本算法 存在的问题 退火算法 代码演示 小批量梯度下降 前言 若没有机器学习基础,建议先阅读同一系列以下文章 机器学习第1天:概念与体系漫游-CSDN博客 机器学习…

随着大模型中数据局限问题的严峻化,向量数据库应运而生

向量数据库与亚马逊大模型 什么是向量数据库 向量嵌入(vector embedding)已经无处不在。它们构成了许多机器学习和深度学习算法的基础,被广泛运用于各种应用,从搜索引擎到智能助手再到推荐系统等。通常,机器学习和深度…