提示:本文内容基于“2022年中国机器人及人工智能大赛——全地形小车设计赛”的参赛经历而作,其他年份赛题和规则可能会有变动,所以该文章只做参考,具体操作得看实际情况。
本文只做参考,若有高解,请勿喷。
如果大家有什么问题欢迎在评论区评论
文章目录
提示:该文章的经验分享只做参考,具体制作视具体情况而定,希望这里的某些建议不会影响到朋友们更好的想法。
(1)每支队伍的制作器材限定为机器时代(北京)科技有限公司的“探索者”创新套件。构成机器人的机械零件、电子部件的种类不得超出“探索者”创新套件配置范围,符合条件的零部件的使用数量不限。
(2)辅助材料方面允许使用以下参与制作:打印用纸、塑料布 、透明胶带、绝缘胶带、双面胶带、魔术贴、束线带、螺丝胶、止松垫、防滑螺母。
(3)小车的机械本体、主控板、检测元器件、电机和电池等必须在“探索者”平台指定范围内选择,不能出现平台以外的元器件。
(4)气球颜色为:深红、深绿、深蓝。气球大小(宽):22cm 和 26cm 之间,气球当然越大越好,视觉识别时候更加容易。
(5)扎气球装置末端可采用细小尖锐物体。
(6)书写报告时一定注意比赛文档的要求。
(7)在实际运行过程中尽量一次跑完,重跑会扣分。
此处规则只适用于2022年“探索者”比赛,具体规则可能会每年会有变化,具体依据当年的最新规则。
提示:以下文章全部基于此次比赛规则和硬件选择,如果规则相同硬件选择不同,或者有更好的硬件搭配的朋友,可以将部分作为参考。
1.电机:tt马达的减速电机6
2.视觉:openmv1
3.主控:arduino
4.主控拓展板:big fish拓展板
5.巡线传感器:灰度传感器*4
6.电源:4V锂电(官方提供的)
7.执行机构:舵机
8.车主体:官方套件中的铝板,铝片,螺丝和螺母等
9.其他:尼龙导轮等
(1)联轴器
我们自己设计了联轴器,用于连接轮胎主体和电机的轴。

(2)轮胎
我们一共使用了6个轮胎,其中前两个轮胎使用了大轮,并且相互绑定在一起,采用大轮增加轮胎半径便于爬坡和爬台阶。最后方的两个轮子当做辅助轮,用于辅助上台阶和坡道,使其在爬坡时车体有支撑。最前面的轮胎上装有履带,用于增大摩擦力。
(1)巡线传感器
我们采用了两组传感器,一组主要用于巡线。另一组主要用于检测是否到达台阶,放在车的前方。
在实验中我们发现当到达台阶部分时,可能由于巡线功能而导致轮胎差速,从而导致无法全速爬上台阶。故我们增加了另一个红外传感器,用于检测台阶。当然也有可能是我们总体结构设计的不够好,才导致我们又另外增加传感器。
(2)视觉传感器
视觉使用了openmv,安装在侧面,安装高度应保证可以成功识别到色卡与气球。
执行机构为刺破气球的装置,一般选择用舵机来驱动机械臂,机械臂末端加上针或者刀片。
为了使其过管道更加顺滑,我们增加了尼龙导轮。
代码部分虽然会附带有部分代码片段,但主要为思路讲解,毕竟是一场比赛,得自己动手才有意义。
(1)Arduino部分
#include <Servo.h> //引入舵机库
#include <SoftwareSerial.h> //引入软件串口库
Servo myservo; //创建一个舵机控制对象 , 使用Servo类最多可以控制8个舵机
SoftwareSerial mySerial(12, 13); // 参数(RX, TX)//定义管脚12/13分别为RX,TX.
控制舵机转向
void servo_turn()
{
myservo.write(0); // 指定舵机转向的角度
delay(2000); // 等待2s让舵机到达指定位置
myservo.write(160); // 指定舵机转向的角度160
delay(2000); // 等待2s让舵机到达指定位置
}
用于模拟量的采集以及阈值的设置和判断
int read_da[4] = {0, 0, 0, 0};
int read_data[4] = { 0, 0, 0, 0};
void track_read()
{
read_da[0] = analogRead(gray_sensorPin[0]);
read_da[1] = analogRead(gray_sensorPin[1]);
read_da[2] = analogRead(gray_sensorPin[2]);
read_da[3] = analogRead(gray_sensorPin[3]);
for (int i = 0; i < 4; i++)
{
if (read_da[i] <= xunxian[i] && read_da[i] > xunxian1[i])//300-600
{
read_data[i] = 1;
}
else if (read_da[i] > xunxian[i] )//大于600
{
read_data[i] = 0;
}
else if (read_da[i] < xunxian1[i] )//小于300
{
read_data[i] = 2;
}
}
//Serial.println(read_data[0]);
}
之后就是一些电机使能,控制正反转以及输出pwm波等的造车基操了。
我们开始的问题就卡在巡线的传感器并不是那种带电位器的灰度传感器,而是那种模拟量输出的传感器。这种传感器的具体阈值得根据安装高度以及位置来进行实验得出。
如果使用了官方给的拓展板,上面将会有两路电机驱动的输出,可以直接驱动电机。
(2)视觉部分
主要用了颜色识别和测距。最好增加距离的检测或者是像素点面积大小的判断。避免在第一段赛道时被摄像头错误识别到。
采用串口与单片机通信,从而控制车去刺破气球。
(1)Arduino部分代码调试
一般为灰度巡线传感器的阈值设置,需要和实际情况结合。
如果使用的是官方提供的灰度传感器的话,它有四个引脚。需要注意的是,其中有一个为模拟量的输出引脚,一般需要实验才可得。
而对于黑线的判断,也得经过实验才可得,需要注意的是需要对单片机进行上电的同时进行测量,否则由于电压的不同测出的结果将没有意义。

(2)视觉部分代码调试
一般为摄像头的阈值设置以及算法的优化来提高系统鲁棒性,具体需要和实际情况结合。
同种颜色的气球需要保证较小的色彩差别,避免由于气球颜色本身的色彩差异而导致的识别失败。同时保证要有一个较为恒定的环境光照。
总之,这次比赛的难点在于如何用固定的配件来搭建一辆具有特定功能的车上,并且使用的部分配件未曾使用过。赛前首先得会使用openmv以及Arduino 以及配套传感器的使用。有的代码官方会给例程,就算不自己动手写,但也应该看得懂才行。在硬件的搭建方面,必须得考虑合理性以及稳定性,不要跑着跑着出现掉螺丝或者散架的情况。同时也应该考虑到跨越每一个障碍物时可能出现的情况,以将部分问题扼杀在硬件上。
如果发现文章的问题,欢迎指出。
若有疑问,欢迎在下方留言。
require"socket"server="irc.rizon.net"port="6667"nick="RubyIRCBot"channel="#0x40"s=TCPSocket.open(server,port)s.print("USERTesting",0)s.print("NICK#{nick}",0)s.print("JOIN#{channel}",0)这个IRC机器人没有连接到IRC服务器,我做错了什么? 最佳答案 失败并显示此消息::irc.shakeababy.net461*USER:Notenoughparame
目录0专栏介绍1平面2R机器人概述2运动学建模2.1正运动学模型2.2逆运动学模型2.3机器人运动学仿真3动力学建模3.1计算动能3.2势能计算与动力学方程3.3动力学仿真0专栏介绍?附C++/Python/Matlab全套代码?课程设计、毕业设计、创新竞赛必备!详细介绍全局规划(图搜索、采样法、智能算法等);局部规划(DWA、APF等);曲线优化(贝塞尔曲线、B样条曲线等)。?详情:图解自动驾驶中的运动规划(MotionPlanning),附几十种规划算法1平面2R机器人概述如图1所示为本文的研究本体——平面2R机器人。对参数进行如下定义:机器人广义坐标
2022年底,OpenAI的预训练模型ChatGPT给人工智能领域的爱好者和研究人员留下了深刻的印象和启发,他展现的惊人能力将人工智能的研究和应用热度推向高潮,网上也充斥着和ChatGPT的各种聊天,他可以作诗、写小说、写代码、讨论疫情问题等。下面就是一些他的神回复:人命关天的坑: 写歌,留给词作者的机会不多了。。。 回答人类怎么样面对人工智能: 什么是ChatGPT?借用网上的一段介绍,ChatGPT是由人工智能研究实验室OpenAI在2022年11月30日发布的全新聊天机器人模型,一款人工智能技术驱动的自然语言处理工具。它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动
我正在构建一个点击元素的Selenium/Ruby网络机器人。问题是,有时在机器人决定找不到元素之前没有足够的时间加载页面。让Selenium在执行操作之前等待的Ruby方法是什么?我更喜欢显式等待,但我也接受隐式等待。我尝试使用wait.until方法:require"selenium-webdriver"require"nokogiri"driver=Selenium::WebDriver.for:chromewait=Selenium::WebDriver::Wait.new(:timeout=>15)driver.navigate.to"http://google.com"dr
自从2019年OpenApplicationModel诞生以来,KubeVela已经经历了几十个版本的变化,并向现代应用程序交付先进功能的方向不断发展。最近,KubeVela完成了向CNCF孵化项目的晋升,标志着社区的发展来到一个新的里程碑。今天,KubeVela社区内活跃着大量来自全球的开发者,共同推动KubeVela项目的落地和发展。在即将开幕的KubeCon+CloudNatvieConEurope2023上,我们惊喜地发现,连续3天,KubeVela项目的贡献者、企业用户和来自阿里云的核心维护者,将从不同角度展对KubeVela项目的分享。让我们先睹为快!🎙️BuildingaPlat
注意http://techcrunch.com/2010/04/04/he-even-makes-coldplay-sound-fun/顶部的那些按钮在社交网络上分享网址?我想为我正在构建的网站做一些非常相似的事情。ShareThis提供了一个可以做同样事情的小部件,但它是品牌化的和外部的。我正在寻找纯Ruby解决方案。包含可包含在RailsApplicationHelper类中的模块的gem将是完美的。在我重新发明轮子之前,感谢您的建议!想象一下: 最佳答案 我能找到的最好的是:http://www.addthis.com/这里有
我正在使用Ruby、SeleniumWebDriver和Nokogiri从网页中检索数据。加载正确的HTML后,我打印某个类的内容。例如,require"selenium-webdriver"require"nokogiri"browser=Selenium::WebDriver.for:chromebrowser.get"https://jsfiddle.net"doc=Nokogiri::HTML.parse(browser.page_source)doc.css('.aiButton').map(&:text).join(',')到目前为止,我发现最困难的部分是正确加载正确的HT
我想创建一个供不同用户用于其Facebook页面的MessengerBot。我创建了一个Rails应用程序并使用facebook-messengergem.我成功创建了机器人,当我为一个页面设置时它可以工作。现在,我按照说明让我的机器人在多个Facebook页面上运行(请参阅"Makeaconfigurationprovider"section)。我是Rails的新手,我不确定将类ExampleProvider放在哪里?我把它放在我的config/application.rb文件中:require_relative'boot'require'rails/all'#Requiretheg
近期,AI安全问题闹得沸沸扬扬,多国“禁令”剑指ChatGPT。自然语言大模型采用人类反馈的增强学习机制,也被担心会因人类的偏见“教坏”AI。4月6日,OpenAI官方发声称,从现实世界的使用中学习是创建越来越安全的人工智能系统的“关键组成部分”,该公司也同时承认,这需要社会有足够时间来适应和调整。至于这个时间是多久,OpenAI也没给出答案。大模型背后的“算法黑箱”无法破解,开发它的人也搞不清机器作答的逻辑。十字路口在前,一些自然语言大模型的开发者换了思路,给类似GPT的模型立起规矩,让对话机器人“嘴上能有个把门的”,并“投喂”符合人类利益的训练数据,以便它们输出“更干净”的答案。这些研发
文/高扬(微信公众号:量子论)据上次3月18号发布的V1.8版,已经过去十天,这期间AI领域发生了很多重大变化。因此,我们对《ChatGPT实用指南》进行了重大改版,增加了大量实用的操作和详细的讲解,保证小白可以轻松上手,快速驾驭ChatGPT。V2.0版本亮点:1、结构更合理。分为基础篇、进阶篇、高级篇,从易到难,由浅入深,符合学习规律。2、内容更充实。扩充了27页的内容,尽量看图说话,将操作步骤一步步地展示出来。3、排版更美观。按图书出版的规范制作,便于知识点查阅。后记:2022年11月底,我们在HackerNews上看到了关于ChatGPT的新闻报道后,开始意识到,人工智能的春天来了,这