前言

本文为腾讯coding入门教程,具体为以下四步骤

  • 一、自动导航的思路与操作
  • 二、躲避障碍
  • 三、陨石样本收集
  • 四、退出事件

最终效果如下:


一、自动指向和到达目的地停下

1.了解项目环境

首先进入课程练习,找到中学Python的规则解读后点击大展身手进入

此时右侧右侧会出现背景和规则,主要是以下五个任务

本文主要是完成陨石样本收集和到达南极这两个任务

首先打开代码编辑,这里会初始给我们导入了他们的库,为了能够更加清晰了解这些库的作用可以打开官方网页文档,查看每个代码的含义

官方网页:https://support.qq.com/products/418580/faqs-more/?id=131014

2.自定义朝向并前往坐标

为了方便代码理解,我们自己定义函数go_to(x,y),我们后续若想前往何处,只需要在go_to()里面输入你想去的x坐标和y坐标即可,例如:

此时我们需要在函数里面写入自定义朝向函数,即左侧的“2.朝向(X,Y)”,并将Robot_Max.face_coordinate(X坐标值, Y坐标值)里的“X坐标值”和“Y坐标值”更改为x和y,如下:

from codingtge import Robot_Max, codingdef go_to(x,y):Robot_Max.face_coordinate(x, y)go_to(255,635)

此时点击运行,就会发现机器人会自动朝向你所指定的方向旋转,就起到了自定义朝向操作

为了能够安全到达你所指定的坐标,你在此代码后写入移动和到达目的地停下的操作,此时用到移动函数和判断语句

首先为了能够移动更加快速,在函数里加入切换为轮式状态,并以每秒15米的速度前进

速度后的0.1为持续时间,仅仅这样写入这样的代码只会使机器人移动0.1秒,所以为了能够使机器人持续移动,就要将这个移动函数放入循环里

这样写就会使机器人持续朝目的地移动,但是当遇到了新的问题:此时改如何停下?

3.到达目的地并停下

为了能够正常的停下,我的思路是:将机器人的坐标和目的地的坐标进行比对,当机器人坐标和目的地的坐标等于时,停下

在将我的思路进行编写后,得出以下代码:

from codingtge import Robot_Max, codingdef go_to(x,y):Robot_Max.face_coordinate(x, y)Robot_Max.state("Wheel")is_arrive = Falsewhile is_arrive == False:Robot_Max.move("Wheel", 15, 0.1)x_current = Robot_Max.get_coordinate_X()y_current = Robot_Max.get_coordinate_Y()if abs(x_current - x) <= 2 and abs(y_current - y) <= 2:is_arrive = Truego_to(255,635)

在上述代码中,我写入了当到达坐标附近时就停下来的操作:开始先在while中放入未到达目的地的信号,然后使机器人持续移动,并每0.1秒记录下此时机器人的坐标,并实时与目的地坐标进行判断。由于实际肯定会有些许误差,所以为了防止一些意外操作,我便使用了以下判断:当当前x坐标与当前y坐标与目的地坐标的偏差值在2内(绝对值),即传入已到达的信号,以停下循环。(个人不太推荐函数,前期进行学习时,发觉并不是很好用,文章内我仅仅分享我自认为最好用的操作,如果有更好用的或其他思想能完成相同的项目也是很好的)

此时运行代码,就会发现机器人就可以实现自动指向和到达目的地停下的操作了!

二、躲避障碍

为了能前往错综复杂的目的地,就需要对前方路况进行一段监测,否则很有可能会撞到掩体而导致机器人动弹不得。所以要在代码内加入监测,例如当开启前方监测时:

当运行时终端会每0.1秒返回最大为100的数字

在正常行驶中,我们不仅要判断前方路段也要进行左右两方的路段,以便我们进行左右转操作时,不会误撞到左右两方的操作,故在此思路上修改代码如下:

from codingtge import Robot_Max, codingdef go_to(x,y):Robot_Max.face_coordinate(x, y)Robot_Max.state("Wheel")Robot_Max.ir_on("front")Robot_Max.ir_on("left")Robot_Max.ir_on("right")is_arrive = Falsewhile is_arrive == False:front = Robot_Max.get_ir_distance("front")left = Robot_Max.get_ir_distance("left")right = Robot_Max.get_ir_distance("right")if front <= 40:Robot_Max.stop()if right > left:Robot_Max.rotate_angle("Wheel", "Right", 10)else:Robot_Max.rotate_angle("Wheel", "Left", 10)continueRobot_Max.move("Wheel", 15, 0.1)x_current = Robot_Max.get_coordinate_X()y_current = Robot_Max.get_coordinate_Y()if abs(x_current - x) <= 2 and abs(y_current - y) <= 2:is_arrive = Truego_to(475,460)

首先检测出前方40米是否有障碍,以提前进行障碍躲避。若有,则再判断左右两方障碍哪方更宽广一些,并往该方向旋转直到前方40米没有障碍时才进行移动操作。

但是执行以上代码操作时,会发现机器人在多次转弯后便遗失了目的地的方向,所以还需要在以上代码中再次添加转向函数,为了防止机器人在转向目的地过于频繁,则需要对代码进行一些限制,

防止出现一些意外。在以上思想上进行编写后得出以下代码:

from codingtge import Robot_Max, codingdef go_to(x,y):Robot_Max.face_coordinate(x, y)Robot_Max.state("Wheel")Robot_Max.ir_on("front")Robot_Max.ir_on("left")Robot_Max.ir_on("right")#限制机器人旋转过多counter = 0is_arrive = Falsewhile is_arrive == False:front = Robot_Max.get_ir_distance("front")left = Robot_Max.get_ir_distance("left")right = Robot_Max.get_ir_distance("right")if front <= 40:Robot_Max.stop()if right > left:Robot_Max.rotate_angle("Wheel", "Right", 10)else:Robot_Max.rotate_angle("Wheel", "Left", 10)continue#限制机器人在移动时判断过多(每两秒判断一次)Robot_Max.move("Wheel", 15,2)#当进行3次循环后(进行三次移动后),机器人更正一次朝向,更正后将counter重新赋值为0if counter == 3:Robot_Max.face_coordinate(x, y)counter = 0#每次循环将counter进行加1操作counter += 1x_current = Robot_Max.get_coordinate_X()y_current = Robot_Max.get_coordinate_Y()#由于之前将移动时判断修改为每两秒一次,为了防止在移动过程中出现到达目的地而没停下的场面#在后方重新加入:当坐标临近目的地时将判断更改为每0.1秒一次while abs(x_current - x) <= 30 and abs(y_current - y) <= 30:Robot_Max.move("Wheel", 15,0.1)if abs(x_current - x) <= 2 and abs(y_current - y) <= 2:is_arrive = True#当操作成立,跳出本次循环,由于定义已is_arrive为True,故循环结束break#每0.1秒判断一次坐标轴x_current = Robot_Max.get_coordinate_X()y_current = Robot_Max.get_coordinate_Y()go_to(475,460)

为了方便理解我在我新加的代码上均添加了注释

(以上代码修改可能有些过多,建议复制下来与结合注释与之前的代码进行对比分析!)

此时运行代码,可以发现机器人不仅躲避了障碍,也可以正常的到达目的地

三、陨石样本收集

陨石样本收集相较于上述代码,就简单许多了

def catch(x,y):Robot_Max.equip_arm()Robot_Max.arm_action(x, y, 0, "catch")Robot_Max.arm_takein()

首先加载出机械臂再将机械臂伸向你定义的x与y坐标(z坐标填0即可),再执行抓取操作,将陨石抓取后再利用机械臂收取夹持物函数,进行陨石样本收集

总结

将以上函数编写完后,就可以很容易的完成陨石收集和到达南极的任务了!

完整代码如下

from codingtge import Robot_Max, codingdef go_to(x,y):Robot_Max.face_coordinate(x, y)Robot_Max.state("Wheel")Robot_Max.ir_on("front")Robot_Max.ir_on("left")Robot_Max.ir_on("right")counter = 0is_arrive = Falsewhile is_arrive == False:front = Robot_Max.get_ir_distance("front")left = Robot_Max.get_ir_distance("left")right = Robot_Max.get_ir_distance("right")if front <= 40:Robot_Max.stop()if right > left:Robot_Max.rotate_angle("Wheel", "Right", 10)else:Robot_Max.rotate_angle("Wheel", "Left", 10)continueRobot_Max.move("Wheel", 15,2)if counter == 3:Robot_Max.face_coordinate(x, y)counter = 0counter += 1x_current = Robot_Max.get_coordinate_X()y_current = Robot_Max.get_coordinate_Y()while abs(x_current - x) <= 30 and abs(y_current - y) <= 30:Robot_Max.move("Wheel", 15,0.1)if abs(x_current - x) <= 2 and abs(y_current - y) <= 2:is_arrive = Truebreakx_current = Robot_Max.get_coordinate_X()y_current = Robot_Max.get_coordinate_Y()def catch(x,y):Robot_Max.equip_arm()Robot_Max.arm_action(x, y, 0, "catch")Robot_Max.arm_takein()go_to(475,460)
catch(475,460)
go_to(800,370)

以上便是本人的制作过程,如遇问题或者文章有错误可私信或者评论

腾讯扣叮虚拟仿真实验室机器人自动导航+陨石样本收集相关推荐

  1. 推荐Python互动艺术在线编辑器(腾讯扣叮)

    之前写了<Python趣味创意编程>,利用数字艺术.互动程序开发学习Python编程. 然而有读者反馈,自己下载Processing,配置Python Mode比较繁琐. 一个偶然的机会, ...

  2. python 预约系统_腾讯扣叮

    腾讯扣叮怎么下载?腾讯扣叮是免费吗?用户可以直接进入腾讯扣叮官网或者直接在微信平台登录.可以免费在线学习编程,可以随时与高手切磋,随时教你玩编程!拥有强大的编程教学体系,可以随时在线轻松学习.是少儿学 ...

  3. 世峰中标华南农业大学无人机虚拟仿真实验室软硬件系统建设项目

    2019年7月25日,世峰依托丰富的VR虚拟仿真实验室的行业知识与VR虚拟仿真实验室的成功经验,获得了专家评委组的高度认可与高度赞扬,成为了华南农业大学无人机虚拟仿真实验室软硬件系统建设项目的中标服务 ...

  4. 计算机学科建设目标 措施,建设目标、定位与措施-虚拟仿真实验室

    (一)中心建设目标 围绕厦门理工学院"开放式.应用型.地方性.国际化.亲产业"的办学方针,根据虚拟仿真实验教学示范中心建设要求,依托省级实验教学示范中心"计算机实验教学中 ...

  5. ROBOGUIDE软件机床上下料虚拟仿真:机器人机床上下料配置与编程

    目录 概述 数控机床属性配置 机器人仿真程序编写 机器人机床上下料示教编程 机器人生产线仿真运行 本文已经首发在个人微信公众号:工业机器人仿真与编程(微信号:IndRobSim),欢迎关注! 概述 机 ...

  6. 2023年NOC大赛coding创意编程赛道(腾讯)【初中-Python-虚拟仿真实验室】模拟卷

    2023年NOC大赛coding创意编程赛道(腾讯)[初中-Python-虚拟仿真实验室]模拟卷 [单选题) 1.执行下列程序,关于 MAX 运动形态说法正确的是 ()? A.Max以轮式形态运动 C ...

  7. ROBOGUIDE软件:多机器人同步运动虚拟仿真

    目录 概述 多机器人虚拟系统创建 周边设备模型添加与布局 工作站以太网RIPE通信设置 机器人TCP/IP通信设置 设置主机器人链接 设置从机器人链接 设定工作站I/O信号连接 手动确认主从机器人之间 ...

  8. 计算机应用虚拟仿真实验答案,虚拟仿真 实验教学+.ppt

    一 二 三 虚拟仿真实验概述 虚拟仿真实验教学 虚拟仿真实验中心建设 一 二 三 虚拟仿真实验概述 虚拟仿真实验教学 虚拟仿真实验中心建设 随着计算机.互联网等先进技术的迅速发展和大面积普及推广,虚拟 ...

  9. 华为云DevCloud为虚拟仿真插上互联网的翅膀

    华为云DevCloud为虚拟仿真插上互联网的翅膀 两三年前,虚拟仿真或者说VR,火得一塌糊涂,火得不真实.又在无人察觉中,平静地落下帷幕,这个行业开始回归本质.原本专业性极强的领域,以游戏为突破口.以 ...

最新文章

  1. sudo brew install mongodb报错
  2. Linux 技术篇-查看cpu核心数,grep常用信息筛选语法使用演示
  3. Struts Validator验证器使用指南
  4. python学习详解_Python学习入门到精通:Python列表讲解
  5. javascript / jquery 操作 cookie
  6. android 定制输入法,QQ输入法Android 4.3全新升级 实现私人定制输入
  7. Linux sudo命令的概念与使用
  8. 中国现代远程与继续教育网 统考 大学英语(B)考试大纲
  9. Wework和优客工场争相上市,共享办公第一股风云再起
  10. 苹果关掉200m限制_苹果怎么取消200m限制
  11. 程序员知道什么叫劳务外包?企业为什么要选择劳务外包吗?
  12. 解决Spring文件下载时文件损毁问题
  13. 【工具】用PPT排版打印海报时图片分辨率问题
  14. ios开发者联系方式
  15. iscc 2021wp
  16. 一级消防工程师【技术实务】(爆炸)
  17. Java后端面试(四)
  18. Swift UIView代码控制隐藏与显示
  19. android-处理日期时间 - 随心
  20. 用计算机思维解决问题的例子,简单易懂的思维模型:解决问题篇

热门文章

  1. 第一次实战Kaggle比赛:预测房价
  2. 扩展 HtmlwebpackPlugin 插入自定义的脚本
  3. Android 反序列化漏洞攻防史话
  4. UG数控编程使用的几个技巧!!
  5. java_多线程——线程池、submit和execute区别
  6. BCIduino转载|你的脑机接口入门第一篇文章(英)
  7. linux绝对路径sh文件,从python执行指示绝对路径的.sh文件
  8. 国内40多家金融机构数据被窃,多家知名基金上榜
  9. 计算机配机方案及理由报告,大学生社会调查计算机配机方案的报告范本.doc
  10. Rival Stars HorseRacing 家族传奇:马匹养成竞技 无限金币 无限银币 iphone ipad ios修改方法