【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) thenreturn(nil) -- 错误endif (header:byte(1)==59)and(header:byte(2)==57) thenlocal l=header:byte(3)+header:byte(4)*256return(client:receive(l))elsereturn(nil) -- 错误end
end-- 感知系统调用
function sysCall_sensing() local p=sim.getObjectPosition(robot)sim.addDrawingObjectItem(drawingCont,p)
end -- 清理系统调用
function sysCall_cleanup()if client thenclient: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+1if (newPortNb>=portStart+portRange) thennewPortNb=portStartendsim.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' 无法启动。模拟将无法正常运行")elsesim.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) thendataOut[1]=distend-- 将数据打包成字符串:dataOut=sim.packFloatTable(dataOut)-- 发送数据:writeSocketData(client,dataOut)-- 从服务器读取回复:local returnData=readSocketData(client)if (returnData==nil) thenbreak -- 读取错误end-- 解包接收到的数据:returnData=sim.unpackFloatTable(returnData)-- 将值应用为电机速度:sim.setJointTargetVelocity(leftMotor,returnData[1])sim.setJointTargetVelocity(rightMotor,returnData[2])-- 如果模拟时间未改变,请不要在这个循环中浪费时间!这也与主脚本同步sim.step() -- 这个协程将在下一个模拟步骤中恢复endendend
end

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

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

相关文章

ubuntu20.04在docker下运行ros-noetic

经常折腾虚拟机各双系统 , 想着不如把docker利用起来,下面算是一个初学者使用docker运行ros的记录: 1. 安装 使用官方安装脚本自动安装 curl -fsSL https://test.docker.com -o test-docker.shsudo sh test-docker.sh验证是否安装成功 doc…

新材料企业ERP有几种?能帮助企业解决哪些问题

在我们的生活当中会遇到各种各样的新材料,这些新材料对应不同的制造工艺、品质检验标准、生产工序、制造设备等。有些新材料企业的营销渠道不止一个,各个营销平台的经营策略和商品维护流程各不相同,而这也使得日常的管理工作量较大。 经过多…

工业机器人“智能制造产线6”教学案例

​智能制造单元主要以智能制造技术推广应用实际与发展需求为设计依据,按照“设备自动化生产精益化管理信息化人工高效化”的构建理念,将数控加工设备、工业机器人、检测设备、数据信息采集管控设备等典型加工制造设备,集成为智能制造单元“硬…

HIS医疗项目

文章目录 医疗项目简介HIS项目介绍HIS架构解析HIS业务流程图HIS项目架构图 HIS组件解析——服务支撑 内存设置为4G或以上部署NGINX服务部署web安装JDK部署Elasticsearch安装ik中文分词器 部署rabbitmq部署MySQL服务安装MySQL服务建库、授权用户导入数据 部署Redis测试Redis 部署…

在线 sha1 加密

ttmd5 http://www.ttmd5.com/hash.php?type5 qqxiuzi https://www.qqxiuzi.cn/bianma/sha-1.htm jb51 http://tools.jb51.net/password/sha_encode

基于SpringBoot+Vue的新能源汽车充电桩管理系统

基于SpringBootVue的新能源汽车充电桩管理系统的设计与实现~ 开发语言:Java数据库:MySQL技术:SpringBootMyBatisVue工具:IDEA/Ecilpse、Navicat、Maven 系统展示 主页 充电桩详情 管理员界面 摘要 本项目是基于Spring Boot 和 …

解决requests库中的期限处理问题:从404到异常再到修复

目录 引言 一、了解HTTP 404错误 二、问题分析 三、解决方法 1、控制请求频率 2. 使用代理服务器 3、异常处理与重试机制 4、修复问题源头 5、联系目标网站管理员 四、总结 引言 在利用Python的requests库进行网络爬虫或API请求时,我们有时会遇到“HTTP …

天猫精灵/小爱同学+巴法云+Openwrt控制局电脑/群晖开关机

天猫精灵/小爱同学巴法云Openwrt控制局电脑/群晖开关机 事情的起因实战环境开始发车1.天猫精灵/小爱同学 连接 八法云 2.openwrt3.docker环节注意:sshpass 要先使用 ssh命令登陆一下你要唤醒或者远程关机的设备,不然可能因为一个登陆提示你是否登陆的yes/no导致程序没有反应,然…

(论文阅读40-45)图像描述1

40.文献阅读笔记(m-RNN) 简介 题目 Explain Images with Multimodal Recurrent Neural Networks 作者 Junhua Mao, Wei Xu, Yi Yang, Jiang Wang, Alan L. Yuille, arXiv:1410.1090 原文链接 http://arxiv.org/pdf/1410.1090.pdf 关键词 m-RNN、…

【Linux】Linux进程间通信(三)

​ ​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:Linux 🎯长路漫漫浩浩,万事皆有期待 上一篇博客:【Linux】…

Python:函数篇(每周练习)

编程题: Python第四章作业(初级) (educoder.net) 题一:无参无返回值函数 def print_hi_human(): # 函数名用小写字母print("人类,你好!")if __name__ __main__:print_hi_human() 题二&#…

在python中os.chdir()的含义以及用法

文章目录 一、os.chdir() 是什么?二、用法注意 一、os.chdir() 是什么? 在Python中,os.chdir() 是 “change directory” 的缩写,意思是改变当前工作目录。这个函数是Python的 os 模块的一部分,允许你更改程序的工作目…

2023.11.16 hivesql高阶函数之开窗函数

目录 1.开窗函数的定义 2.数据准备 3.开窗函数之排序 需求:用三种排序方法查询学生的语文成绩排名,并降序显示 4.开窗函数分组 需求:按照科目来分类,使用三种排序方式来排序学生的成绩 5.聚合函数与分组配合使用 6.聚合函数同时和分组以及排序关键字配合使用 --需求1&…

MAC电脑连接外接显示屏,颜色显示有问题,又粉、紫色蒙版,问题处理(1)

问题描述 买了一个显示器,想给mac做分屏使用,结果连上之后发现,整个屏幕像是被蒙上了一层紫色的蒙版。 就像下面展示的一样: 解决 将显示器颜色空间改为RGB颜色空间即可。 打开显示器菜单,找到颜色空间选项&#…

12.Oracle的索引

Oracle11g的索引 一、什么是索引二、索引的分类三、索引的语法四、分析索引四、索引的作用及使用场景 一、什么是索引 在Oracle数据库中,索引是一种特殊的数据结构,用于提高查询性能和加速数据检索。索引存储了表中某列的值和对应的行指针,这…

初学编程学习,计算机编程怎么自学,中文编程工具下载

初学编程学习,计算机编程怎么自学,中文编程工具下载 给大家分享一款中文编程工具,零基础轻松学编程,不需英语基础,编程工具可下载。 这款工具不但可以连接部分硬件,而且可以开发大型的软件,象如…

Uniapp连接iBeacon设备——实现无线定位与互动体验(理论篇)

目录 前言: 一、什么是iBeacon技术 二、Uniapp连接iBeacon设备的准备工作 硬件设备: 三、Uniapp连接iBeacon设备的实现步骤 创建Uniapp项目: 四、Uniapp连接iBeacon设备的应用场景 室内导航: 五、Uniapp连接iBeacon设备的未来…

Hangfire.Pro 3.0 Crack

Hangfire.Pro 有限的存储支持 Hangfire Pro 是一组扩展包,允许使用批处理创建复杂的后台作业工作流程,并提供对超快速Redis作为作业存储的支持 请注意,仅在使用Hangfire.SqlServer、Hangfire.Pro.Redis或Hangfire.InMemory包作为作业存储时才…

解决 vite 4 开发环境和生产环境打包后空白、配置axios跨域、nginx代理本地后端接口问题

1、解决打包本地无法访问空白 首先是pnpm build 打包后直接在dist访问,是访问不了的,需要开启服务 终端输入 npm install -g serve 然后再输入 serve -s dist 就可以访问了 但要保证 路由模式是:createWebHashHistory 和vite.conffig.j…

Java的XWPFTemplate word生成列表

Java的XWPFTemplate工具类导出word.docx的使用_xwpftemplate 语法_youmdt的博客-CSDN博客 如果是表格的列表参考上面这篇文章即可,比较复杂的列表遍历暂时还没找到方法,只能手动创建表格了 上面是模板,非常简单,以为我们是要自己创…