【智体OS】官方上新发布智体机器人:使用rtrobot智体应用远程控制平衡车机器人

【智体OS】官方上新发布智体机器人:使用rtrobot智体应用远程控制平衡车机器人

dtns.network是一款主要由JavaScript编写的智体世界引擎(内嵌了three.js编辑器的定制版-支持以第一视角浏览3D场馆),可以在浏览器和node.js、deno、electron上运行,它是一个跨平台的软件,支持多个操作系统使用!

dtns.connector是dtns.network的客户端软件,允许多用户方便自由地连接dtns.network的智体设备。支持使用内置的poplang智体编程语言实现3D组件的智能化编程——语法超简单,一句话语法,人人轻松上手!通过poplang智体编程,可轻松创建、编辑、分发xverse-3D智体应用。

本次上新的主要内容为:使用rtrobot智体应用实时视频远程控制智体机器人(使用千元内的平衡车底盘),可实现全球互联网实时控制远程机器人(物流配送、导盲机器人、巡检机器人、安保机器人、旅游陪伴、家庭看护机器人等)

更新内容

1、使用dpkg机制,集成和拓展dtns-rtphone-api,开发了rtrobot分布式远程访问和实时视频控制的DPKG机器人智体应用rtrobot3.0.dpkg(dtns.top官网下载)

2、使用joystick控制球实现机器人的任意方向、任意角度的远程控制(前后左右任意角度和方向)

3、可方便集成到了dtns.os的系统应用面板中。

4、可使用poplang调用dtns-rtpc-api,实现控制机器人的任意功能插件(用户自定义)

5、可在手机上安装dtns.connector智体OS的客户端,打开rtrobot3.0dpkg,实现机器人的远程访问和实时视频控制。

完全开源:rtrobot智体机器人控制应用、dtns.os和dtns.network等项目均开源。详见文末、或访问dtns.top智体OS官网。

使用教程

一、打开dtns.connector的dweb头榜界面,先下载和初始化opencv-js(用于适配平衡车机器人底盘的蓝牙控制器应用)

1.png

打开该opencv-js应用后,如下图所示:

2.png

显示dpkg插件加载成功。

二、打开dtns.connector的dweb头榜界面,点击上传了的rtrobo3.3.dpkg(或任意其它最新版本)

3.png

三、进入rtrobot远程访问和实时视频控制的机器人智体应用,可看到完成初始化操作(使用opencv-js识别蓝牙控制器应用的滚动球中心点)

4.png

注:使用Opencv-js自动识别滚动球中心点坐标,方便后续的dtns-rtphone-api调用adb shell指令完成相应的任意角度的移动指令。

四、加载成功实时视频如下(需在平衡车机器人上安放一台手机,以使用rtchat调用摄像头功能)

5.png

注:顶部是RT机器人(客户端)标题和左右两侧的功能区(返回和poplang功能-插件),中间部分是实时视频,底部中间位置是滚动球控制器joystick,可实现智体机器人任意角度和方向的移动。

五、使用滚动球控制方向移动平衡车机器人

6.png

注:向左前方移动(如上图所示)

六、拍摄的平衡车机器人相片(如下图)

7.jpg

注:底部是平衡车机器人底盘,使用一台安卓手机打开dtns.connector的智体IB中的视频聊天,输入roomid为rtrobot,以实现机器人实时视野到rtrobot智体应用上,方便实时的画面传输和视频远程控制。

rtrobot3.0.dpkg的源码分享
<!--* @Description: RtRobot机器人控制端(用户端)* @Author: poplang* @Date: 2024-12-12* @LastEditors: * @LastEditTime:--><template><div style="width: 100%;height: 100%;padding:0px;margin: 0px;background-repeat: no-repeat;background-size: cover;" ref="rtvideoroombody"><div @click="back" style="color:black;position: fixed;left:8px;top:8px;z-index: 399;"> ❮返回 </div><div style="color:black;position: fixed;left:0;right:0;top:8px;z-index: 359;text-align: center;  font-size: 18px;font-weight: 800;">{{ title }}</div><div  style="color:black;position: fixed;right:8px;top:8px;z-index: 399;"><!-- <span @click="showTouchPadFlag=!showTouchPadFlag" style="margin-right: 8px">{{ showTouchPadFlag?'触屏':'画面' }}</span><span @click="syncScreen" style="margin-right: 8px">{{ syncScreenTips }}</span> --><span @click="showFlag=true" style="margin-right: 8px">功能</span><!-- <span @click="queryScreen">刷新</span> --></div><div id="rtrobot_container" style="position:fixed;top: 45px;bottom: 0px;left: 0px;right: 0px;z-index: 9;overflow: hidden;background:#505050;-moz-user-select:none;-webkit-user-select:none; -ms-user-select:none; -khtml-user-select:none;user-select:none;"><RtVideo ref="rtvideo":creator="creator":roomId="room_id":enableLogs="true":enableVideo="enableAudio":enableAudio="enableAudio":socketURL = "socketURL":cameraHeight="100"style="width: 100%;height: 100%;-moz-user-select:none;-webkit-user-select:none; -ms-user-select:none; -khtml-user-select:none;user-select:none;overflow: hidden;"/></div><van-popup v-model="showFlag" position="top" :style="{ height: '35%' }" ><van-grid><van-grid-item  @click="call(item)"  v-for="(item,index) in list" :key="index" icon="photo-o" :text="item.title"></van-grid-item></van-grid></van-popup></div></template><script>import RtVideo  from './RtVideo.vue'export default {name: "RtRobotClient",props: ["value"],components: { RtVideo },data() {return {title:'RT机器人(客户端)',enableAudio:false,socketURL:window.g_rtchat_tns_url ? window.g_rtchat_tns_url : "https://groupbuying.opencom.cn:441",//"http://192.168.2.102:3000","http://127.0.0.1:3000",//room_id:'rtrobot',creator:false,showFlag:false,list:[],centerX:0,centerY:0,areaWidth:300,lastPos:{x:0,y:0},nowPos:{x:0,y:0},quitFlag:false,stopFlag:true,}},async created(){this.user_id = localStorage.user_id},async mounted(){//   console.log('rtvideoroomimg:',rtvideoroomimg,this.h)//   this.$refs.rtvideoroombody.style.backgroundImage = `url(${rtvideoroomimg})`window.g_rtvideoroombody = this.$refs.rtvideoroombodythis.init()await this.centerPosition()this.doRun()},beforeRouteLeave(to,from,next){console.log('beforeRouteLeave-to-from:',to,from)if(to.path != from.path){console.log('into beforeRouteLeave')this.unbindEvent()next();}},methods: {back(){this.$router.go(-1)this.unbindEvent()},async centerPosition(){if(!window.g_dtnsManager) return let ret = await g_dtnsManager.run('dtns://web3:'+window.rpc_client.roomid+'/rtphone/robot/screencap')if(!ret || !ret.ret) return this.$toast('获取截图失败!原因:'+(ret?ret.ret:'未知网络原因'))if(typeof g_opencv_image2circles != 'function') return this.$toast('g_opencv_image2circles函数不存在,请先加载opencv-js插件!')let circlesRet = await g_opencv_image2circles(ret.base64,50,60)if(!circlesRet || !circlesRet.circles || circlesRet.circles.length<=0) return this.$toast('识别中心点失败!')let circles = circlesRet.circlesthis.areaWidth = (circlesRet.w /2 )- 100this.centerX = circles[circles.length-1].xthis.centerY = circles[circles.length-1].yconsole.log('center-x-y:',this.centerX,this.centerY,this.areaWidth,circlesRet)this.$toast('识别中心点成功!'+this.centerX+','+this.centerY)this.lastPos.x = this.centerXthis.lastPos.y = this.centerY},async doRun(){while(!this.quitFlag){await new Promise((res)=>setTimeout(res,500))if(this.stopFlag){continue}else //发送do-action-event-stream{if(this.nowPos.x == this.lastPos.x && this.nowPos.y == this.lastPos.y){this.lastPos.x = this.nowPos.x - 1this.lastPos.y = this.nowPos.y - 1}let action = 'shell input swipe '+this.lastPos.x+' '+this.lastPos.y+' '+this.nowPos.x+' '+this.nowPos.y+' 500 '//不等待g_dtnsManager.run('dtns://web3:'+window.rpc_client.roomid+'/rtphone/robot/do/timeout',{action,timeout:500}).then((ret)=>{console.log('doRun-ret:',ret,action)})}}},async updatePos(forward,turn){// if(this.doNowFlag) return false// this.doNowFlag = trueif( Math.abs(forward) + Math.abs(turn)<=0.00001){//回到原始中心点。this.lastPos.x = (this.nowPos.x = this.centerX) this.lastPos.y = (this.nowPos.y = this.centerY) this.stopFlag = true}else{this.stopFlag = falsethis.nowPos.x = turn * this.areaWidth + this.centerX this.nowPos.y = forward * this.areaWidth + this.centerY// if(this.nowPos.x == this.lastPos.x && this.nowPos.y == this.lastPos.y)//   this.stopFlag = false// else this.stopFlag = true}if(this.nowPos.x == this.lastPos.x && this.nowPos.y == this.lastPos.y){this.lastPos.x = this.nowPos.x - 1this.lastPos.y = this.nowPos.y - 1}let action = 'shell input swipe '+this.lastPos.x+' '+this.lastPos.y+' '+this.nowPos.x+' '+this.nowPos.y+' 1000 'if(false){let ret = await g_dtnsManager.run('dtns://web3:'+window.rpc_client.roomid+'/rtphone/robot/do',{action:'shell input swipe '+this.lastPos.x+' '+this.lastPos.y+' '+this.nowPos.x+' '+this.nowPos.y+' 1000 '})console.log('updatePos-ret:',ret)}else{// let ret = await g_dtnsManager.run('dtns://web3:'+window.rpc_client.roomid+'/rtphone/robot/do/timeout',{action,timeout})// console.log('updatePos-ret:',ret)}this.lastPos =this.nowPos// this.doNowFlag = false},init(){this.bindEvent()//   if(!window.g_dtnsManager) return //   const focusRet = await window.g_dtnsManager.run('dtns://web3:'+window.rpc_client.roomid+'/rtchannel/focus',{channel:rtvideoroom_channel_name})//   if(!focusRet ||!focusRet.ret) return this.$toast('订阅频道失败!原因:'+(focusRet?focusRet.msg:'未知网络原因'))//   this.$toast('订阅频道成功')const touchEnabled = !!('ontouchstart' in window);const rtrobotThis = thisclass JoyStick {constructor(options) {this.createDom()this.maxRadius = options.maxRadius || 40this.maxRadiusSquared = this.maxRadius * this.maxRadiusthis.onMove = options.onMovethis.game = options.gamethis.origin = {left: this.domElement.offsetLeft,top: this.domElement.offsetTop}console.log(this.origin)this.rotationDamping = options.rotationDamping || 0.06this.moveDamping = options.moveDamping || 0.01this.createEvent()}createEvent() {const joystick = thisif(touchEnabled) {window.JoyStick_touchstart = function(e) {console.log('touchstart...')// e.preventDefault()joystick.tap(e)// e.stopPropagation()}this.domElement.addEventListener('touchstart', window.JoyStick_touchstart)} else {window.JoyStick_mousedown = function(e) {// e.preventDefault()console.log('mousedown...')joystick.tap(e)// e.stopPropagation()}this.domElement.addEventListener('mousedown',window.JoyStick_mousedown )}}getMousePosition(e) {const clientX = e.targetTouches ? e.targetTouches[0].pageX : e.clientXconst clientY = e.targetTouches ? e.targetTouches[0].pageY : e.clientYreturn {x:clientX, y:clientY}}tap(e) {this.offset = this.getMousePosition(e)const joystick = thisthis.onTouchMoved = function(e) {// e.preventDefault()joystick.move(e)}this.onTouchEnded = function(e) {// e.preventDefault()joystick.up(e)}if(touchEnabled) {document.addEventListener('touchmove', this.onTouchMoved)document.addEventListener('touchend', this.onTouchEnded)} else {document.addEventListener('mousemove', this.onTouchMoved)document.addEventListener('mouseup', this.onTouchEnded)}}move(e) {// if(window.g_3d_editor_stop_player_flag) return const mouse = this.getMousePosition(e)let left = mouse.x - this.offset.xlet top = mouse.y - this.offset.yconst sqMag = left * left + top * topif (sqMag > this.maxRadiusSquared){const magnitude = Math.sqrt(sqMag)left /= magnitudetop /= magnitudeleft *= this.maxRadiustop *= this.maxRadius}this.domElement.style.top = `${ top + this.domElement.clientHeight / 2 }px`this.domElement.style.left = `${ left + this.domElement.clientWidth / 2 }px`const forward = -(top - this.origin.top + this.domElement.clientHeight / 2) / this.maxRadiusconst turn = (left - this.origin.left + this.domElement.clientWidth / 2) / this.maxRadiusif(this.onMove) {this.onMove(forward, turn)}}up() {if (touchEnabled){document.removeEventListener('touchmove', this.onTouchMoved)document.removeEventListener('touchend', this.onTouchEned)}else{document.removeEventListener('mousemove', this.onTouchMoved)document.removeEventListener('mouseup', this.onTouchEned)}this.domElement.style.top = `${this.origin.top}px`this.domElement.style.left = `${this.origin.left}px`if(this.onMove) {this.onMove(0, 0)}}createDom() {const circle = document.createElement('div')circle.style.cssText = `position: absolute;bottom: 35px;width: 80px;height: 80px;background: rgba(126, 126, 126, 0.2);border: #444 solid medium;border-radius: 50%;left: 50%;transform: translateX(-50%);`const thumb = document.createElement('div')thumb.style.cssText = `position: absolute;left: 18px;top: 17px;width: 40px;height: 40px;border-radius: 50%;background: #fff;`circle.appendChild(thumb)// document.body.appendChild(circle)const container = document.querySelector('#rtrobot_container')container.appendChild(circle)this.domElement = thumbthumb.addEventListener('dblclick',function(){console.log('JoyStick-dblclick is clicked!')// window.history.go(-1)})this.circleElement = circlewindow.x3dplayer_joystickCicle = circle} }window.JoyStick_instance = new JoyStick({onMove: function(forward, turn) {forward = -forwardif(Math.abs(forward) < 0.05) forward = 0if(Math.abs(turn) < 0.5) turn = 0// move.forward = forward// move.turn = turnconsole.log('forward-turn:',forward,turn)rtrobotThis.updatePos(forward,turn)}})},bindEvent(){this.onJoin()},async unbindEvent(){this.quitFlag = truethis.onLeave()// document.removeEventListener('keydown', onKeyDown)// document.removeEventListener('keyup', onKeyUp)console.log('removeEvents:',window.JoyStick_instance)const container = document.querySelector('#rtrobot_container')container.removeChild(window.JoyStick_instance.circleElement)document.removeEventListener('touchmove',window.JoyStick_instance.onTouchMoved)document.removeEventListener('touchend',window.JoyStick_instance.onTouchEnded)document.removeEventListener('mousemove',window.JoyStick_instance.onTouchMoved)document.removeEventListener('mouseup',window.JoyStick_instance.onTouchEnded)},onJoin() {this.join_flag = trueif(!this.$refs.rtvideo.signalClient)//localStream){this.$refs.rtvideo.join()}},onLeave() {try{this.join_flag  = falsethis.$refs.rtvideo.leave();this.$refs.rtvideo.localStream = nullthis.$refs.rtvideo.screenStream = null//修复更新新局时,旧的未关闭的问题// this.audioCloseFlag = true// this.showAudioStatus(true)//会调用onLeave,故应该等等 this.chessInfo = null之后,方进行设置}catch(ex){console.log('onLeave-exception:'+ex,ex)}}}}</script>
<style scoped>
</style>

注:集成了RtVideo组件和内置的JoyStick滚动球控制器javascript组件。并且使用dtns-api:/rtphone/robot/do/timeout实现了机器人移动的事件流的前后端传输,方便将adb shell指令实时传输至后端。成功实现了rtrobot标准的开源的机器人远程实时视频控制的智体应用。

总结:rtrobot和rtvideo的结合,使得平衡车机器人变成了一个非常易于使用的远程视频实时控制的智体机器人。并且支持在功能拓展区集成poplang智体插件,从而大大提升了智体机器人的用户体验——内容极度丰富、使用超级简单、成本极其低廉。使得大量的机器人应用场景可以快速集成和开发,包含但不限于家用、商用、安防使用、养老、育儿、玩乐、旅游、教育、产业链、物流领域。

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

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

相关文章

Three使用WebGPU的关键TSL

Three.js 使用 WebGPU 的关键 TSL TSL: three.js shader language 介绍 three.js 材质转为webgpu的关键流程, 从而引出 TSL. 1、关键类关系 WebGPURenderer|-- library: StandardNodeLibrary|-- _nodes: Nodes|-- _objects: RenderObjects|-- createRenderObject()StandardN…

东方通TongWeb7.0.4.9M4部署SuperMap iServer 11.2.1

一、软件版本 操作系统: CentOS Linux release 7.5.1804 (Core)JDK:11.0.18东方通&#xff1a;TongWeb7.0.4.9M4SuperMap iServer&#xff1a;11.2.1 JDK和TongWeb软件分享&#xff1a; 链接: https://pan.baidu.com/s/1HGDTPnPID0PEOMbg3FjTVQ?pwdbh8v 提取码: bh8v 东方通软…

医学预测模型的网页应用必要模块设计(重制版)

医学预测模型的网页应用必要模块设计&#xff08;重制版&#xff09; 刘岳鹏 摘要&#xff1a; 网页应用&#xff08;Web APP&#xff09;承载医学临床预测模型并在临床实践中实现与用户的互动&#xff0c;必要的功能模块设计将有助于Web APP更好地在临床实践中发挥其功能。在此…

【C++】反向输出一个四位数的深入探讨

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;问题描述&#x1f4af;我的实现方案代码实现核心思路解析示例执行过程 &#x1f4af;老师的实现方案代码实现代码特点与分析执行流程示例代码对比与深入分析 &#x1f4af;…

Android中坐标体系知识超详细讲解

说来说去都不如画图示意简单易懂啊&#xff01;&#xff01;&#xff01;真是的&#xff01; 来吧先上张图&#xff01; &#xff08;一&#xff09;首先明确一下android 中的坐标系统&#xff1a; 屏幕的左上角是坐标系统原点&#xff08;0,0&#xff09; 原点向右延伸是X轴正…

泷羽sec学习打卡-brupsuite7搭建IP炮台

声明 学习视频来自B站UP主 泷羽sec,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都 与本人无关,切莫逾越法律红线,否则后果自负 关于brupsuite的那些事儿-Brup-IP炮台搭建 搭建炮台服务端安装zmap1、更新系统和安装基础依赖&#xff…

【视频异常检测】Real-Time Anomaly Detection and Localization in Crowded Scenes 论文阅读

文章信息&#xff1a; 发表于&#xff1a;CVPR2015&#xff08;workshop&#xff09; 原文链接&#xff1a;https://www.cv-foundation.org/openaccess/content_cvpr_workshops_2015/W04/papers/Sabokrou_Real-Time_Anomaly_Detection_2015_CVPR_paper.pdf Real-Time Anomaly D…

Hive-4.0.1数据库搭建(可选配置用户名密码远程连接,涵盖切换为tez引擎)

一、hive搭建&#xff08;所依赖的Hadoop集群参照文章&#xff1a;最新版hadoop-3.4.0集群安装和配置&#xff08;目前论坛的都是老古董了&#xff0c;看我的准没错&#xff01;&#xff01;&#xff01;&#xff09;这里以三台服务器为例_hadoop 3.4安装-CSDN博客&#xff09;…

YOLOv11改进,YOLOv11添加DLKA-Attention可变形大核注意力,WACV2024 ,二次创新C3k2结构

摘要 作者引入了一种称为可变形大核注意力 (D-LKA Attention) 的新方法来增强医学图像分割。这种方法使用大型卷积内核有效地捕获体积上下文,避免了过多的计算需求。D-LKA Attention 还受益于可变形卷积,以适应不同的数据模式。 理论介绍 大核卷积(Large Kernel Convolu…

Reactor 响应式编程(第二篇:Spring Webflux)

系列文章目录 Reactor 响应式编程&#xff08;第一篇&#xff1a;Reactor核心&#xff09; Reactor 响应式编程&#xff08;第二篇&#xff1a;Spring Webflux&#xff09; Reactor 响应式编程&#xff08;第三篇&#xff1a;R2DBC&#xff09; Reactor 响应式编程&#xff08…

keepalived的高可用集群

keepalived的概念 keepalived的工作原理 基于vrrp实现的调度器高可用方案 keepalived的配置实验 先在调度服务器上安装keepalived和ipvsadm apt -y install keepalived ipvsadm 复制keepalived的配置文件到/etc/keepalived/目录下 cp /usr/share/doc/keepalived/samples/keep…

Linux中输入和输出基本过程

1.文件内核级缓冲区 前面在如何理解Linux一切皆文件的特点中提到为了保证在Linux中所有进程访问文件时的方式趋近相 同&#xff0c;在f ile 结构体中存在一个 files_operations 结构体指针&#xff0c;对应的结构体保存所有文件操作的函 数指针&#xff08;这个结构体也被称为…

shell编程2 永久环境变量和字符串显位

声明 学习视频来自B站UP主 泷羽sec 常见变量 echo $HOME &#xff08;家目录 root用户&#xff09; /root cd /root windows的环境变量可以去设置里去新建 为什么输入ls dir的命令的时候就会输出相应的内容呢 因为这些命令都有相应的变量 which ls 通过这个命令查看ls命令脚本…

如何对 Java 项目简化接口设计提升开发效率

文章目录 摘要引言简洁接口设计的原则示例代码OrderProcessor 接口StandardOrderProcessor 实现类Order 数据类调用方代码&#xff1a;OrderService 模块之间的协作QA 环节总结参考资料 摘要 简洁的接口设计可以有效降低代码依赖与耦合度&#xff0c;提高代码的可维护性和扩展…

Node.js安装配置+Vue环境配置+创建一个VUE项目

目录 安装Node.js搭建VUE环境 安装Node.js 下载 测试是否安装成功 在目录下新建两个文件夹 管理员打开cmd npm config set prefix "D:\Software\nodejs\node_global" npm config set cache "D:\Software\nodejs\node_cache"将默认的 C 盘下【 AppData\…

【Spring 全家桶】Spring MVC 快速入门,开始web 更好上手(上篇) , 万字解析, 建议收藏 ! ! !

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人…

【CSS in Depth 2 精译_080】 13.1:CSS 渐变效果(中)——不同色彩空间的颜色插值算法在 CSS 渐变中的应用

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第四部分 视觉增强技术 ✔️【第 13 章 渐变、阴影与混合模式】 ✔️ 13.1 渐变 ✔️ 13.1.1 使用多个颜色节点&#xff08;上&#xff09;13.1.2 颜色插值方法&#xff08;中&#xff09; ✔️13.1…

JavaEE 【知识改变命运】06 多线程进阶(1)

文章目录 锁一常见的锁乐观锁和悲观锁轻量级锁和重量级锁自旋锁和挂起等待锁读写锁和普通互斥锁公平锁和不公平锁可重入锁和不可重入锁sycnchroized是什么锁 CAS什么是CASCAS伪代码CSA是怎么实现的CAS如何保证线程安全的呢实现自旋锁JDK中提供的使用自旋锁的方式处理锁竞争CAS …

Elasticsearch02-安装7.x

零、文章目录 Elasticsearch02-安装7.x 1、Windows安装Elasticsearch &#xff08;1&#xff09;JDK安装 Elasticsearch是基于java开发的&#xff0c;所以需要安装JDK。我们安装的Elasticsearch版本是7.15&#xff0c;对应JDK至少1.8版本以上。也可以不安装jdk&#xff0c;…

又要考试了

一、实现无名管道练习&#xff1a;父进程写入管道&#xff0c;子进程读取管道数据。 #include<myhead.h> int main(int argc, const char *argv[]) {int fd[2];char buff[1024]"王吕阳&#xff0c;崔庆权别卷了";char s[1024];if(pipe(fd)-1){perror("pi…