智能喷涂机器人的制作分享

news2024/10/10 12:23:59

作者:朱家谊、吾丽江、管孝天 

单位:天津工业大学

指导老师:李鹏

1. 概念说明

     智能喷涂机器人是一种具有自主感知、决策和执行能力的机器人,专门用于自动化喷涂任务,它可以应用于各种领域,如汽车制造、建筑装饰、航空航天等。智能喷涂机器人具备以下特点和功能:

     ① 自主感知:智能喷涂机器人配备了多种传感器,如视觉传感器、激光雷达等,可以实时感知周围环境和工件表面的形状、颜色等信息。

     ② 路径规划:基于感知到的环境信息,智能喷涂机器人可以进行路径规划,确定最佳的运动轨迹,以确保喷涂过程中不与障碍物相撞。

     ③ 喷涂精度:智能喷涂机器人通过精确的位置控制和喷涂参数调整,可以实现高精度的喷涂,保证涂层的质量和均匀性。

     ④ 自适应调整:智能喷涂机器人可以根据涂层的类型和工件的形状,自动调整喷涂参数,以达到最佳的涂覆效果。

     ⑤ 远程监控和控制:智能喷涂机器人可以与中控系统连接,通过网络实现远程监控和控制,方便运维人员进行实时调试和管理。

     ⑥ 安全性保障:智能喷涂机器人采用多种安全措施,如紧急停止按钮、防碰撞传感器等,确保在紧急情况下能够及时停止运动,保护工作人员和设备的安全。

2. 概念设计

① 智能喷涂机器人三维视图(外观效果图的轮子和样机不同,请注意):

② 智能喷涂机器人功能结构说明:

③ 智能喷涂机器人桶拿放过程示意图:

3. 概念原型实现

智能喷涂机器人的原理样机为下图所示的机械臂小车,这款小车所用的底盘为四福来轮全向底盘(十字)。

      为智能喷涂机器人的原理样机设计一个3d打印外壳。

 加上外壳后的智能喷涂机器人设计图,如下所示:

4. 电子硬件

在这个示例中,我们采用了以下硬件,请大家参考:

主控板

Arduino mega2560主控板‍

扩展板

SH-F4ST扩展板‍

通信蓝牙串口模块
电池7.4V锂电池
其他摄像头


5. 功能实现

编程环境:Arduino 1.8.19

下面提供一个蓝牙遥控智能喷涂机器人运动并做出刷漆动作的参考例程(motor_servo_mega.ino):

/*------------------------------------------------------------------------------------

  版权说明:Copyright 2023 Robottime(Beijing) Technology Co., Ltd. All Rights Reserved.

           Distributed under MIT license.See file LICENSE for detail or copy at

           https://opensource.org/licenses/MIT

           by 机器谱 2023-06-30 https://www.robotway.com/

  ------------------------------*/

#include<Servo.h>   //调用舵机库函数

#define servo_num 8   //定义舵机数量

#define servo_delay 10 //设置舵机速度

#define motor_pin_count 8 //定义电机引脚数

#define MOTOR_SPEEDS 100   //定义电机速度

#define Motor_ACCELERATION 0.2 //设置电机加速度大小

#define SERIAL_CONNECT Serial2 //蓝牙串口

Servo myservo[8]; //声明舵机对象

float f = 30.0;   //设置舵机速度(参数2)

int servo_pin[servo_num]={27,28,23,24,2,3,4,5}; //定义舵机引脚

float value_init[servo_num]={90,90,75,90,60,90,90,160}; //设置各个舵机初始化角度

const int motor_pin[motor_pin_count] = {6,7,8,9,10,11,12,13}; //定义各个电机引脚

enum{FORWARD=1,BACK,LEFT_TRANSLATION,RIGHT_TRANSLATION,TURN_LEFT,TURN_RIGHT,STOP};//定义小车各个状态


void setup() {

  // put your setup code here, to run once:

  delay(1000);

  Serial.begin(9600);

  Serial2.begin(9600);

  motor_pin_init(); // motor pin init

  Servo_reset();   //servo pin init

}

 

void loop() {

  if( SERIAL_CONNECT.available() ){

    char inchar = SERIAL_CONNECT.read();

    if( inchar == '1' ){ Motor_Go( FORWARD ); }     //前进

    else if( inchar == '2' ) { Motor_Go( BACK ); }     //后退

    else if( inchar == '3' ) { Motor_Go( TURN_LEFT ); }   //左转

    else if( inchar == '4' ) { Motor_Go( TURN_RIGHT ); }    //右转

    else if( inchar == '5' ) { Motor_Go( STOP ); }             //停止

    else if( inchar == '6' ) { Motor_Go( LEFT_TRANSLATION ); }   //左平移

    else if( inchar == '7' ) { Motor_Go( RIGHT_TRANSLATION ); } //右平移

    else if( inchar == 'a' ) { servo_move(90,90,75,90,90,90,90,90); }   //底盘向左

    else if( inchar == 'b' ) { servo_move(90,90,75,90,90,90,90,160); } //底盘向右

    else if( inchar == 'c' ) { single_servo_move(2,123);delay(1000);

    for(int i=0;i<3;i++){ single_servo_move(1,75);delay(100); single_servo_move(1,90);delay(100); } } //刷漆动作

    else if( inchar == 'd' ) { single_servo_move(0,30); }   //转头向左

    else if( inchar == 'e' ) { single_servo_move(0,150);}   //转头向右

    else if( inchar == 'f' ) { single_servo_move(0,90); }   //转头复位

    else if( inchar == 'g' ) { single_servo_move(4,55); }   //手臂上抬

    else if( inchar == 'h' ) { single_servo_move(4,75); }   //手臂下降

    else if( inchar == 'i' ) { single_servo_move(4,60);single_servo_move(2,75);delay(1000); }   //手臂复位

    else {delay(2);}

  }

}

运行效果如下:

程序源代码及模型3D文件资料详见智能喷涂机器人

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【已解决】jupyter notebook里已经安装了第三方库,还是提示导入失败

在jupyter notebook中运行Python代码&#xff0c;明明已经安装了第三方库&#xff0c;还是提示导入失败。 以导入pandas库为例&#xff0c;其他库同理&#xff1a; 报错代码&#xff1a; import pandas报错原因&#xff1a; 电脑上存在多个python运行环境&#xff08;比如&a…

JavaScript学习 -- Hex编码

Hex编码是一种十六进制数字的表示方式。在JavaScript中&#xff0c;我们可以使用Hex编码来表示数字、颜色和其他二进制数据&#xff0c;并将其用于各种场景&#xff0c;例如Web开发、图像处理和加密解密等。在本篇博客中&#xff0c;我们将介绍Hex编码的基础知识和相关技术&…

Xilinx FPGA平台GTX简易使用教程(汇总篇)

GTX简易使用教程&#xff0c;先“知其然”&#xff0c;慢慢再研究“所以然”。 目录 一、GTX必备基础知识 二、时钟篇 三、复位与初始化 四、GTX IP核配置介绍 五、GTX收发测试 六、后记 一、GTX必备基础知识 虽说搬砖只需要会用IP就行&#xff0c;但是为了把砖搬好&a…

js:浏览器环境下复制图片到剪切板

浏览器环境下复制图片到剪切板思路&#xff1a; 通过canvas将图片url转为base64格式将base64格式转为Blob类型的数据调用浏览器接口复制内容到剪切板 图片处理工具方法 image-util.js // Image对象转base64 export function imageToBase64(image) {let canvas document.cr…

Canal深入调研

Canal深入调研 1.canal的设计 1.1 Canal的设计理念 canal的组件化设计非常好&#xff0c;有点类似于tomcat的设计。使用组合设计&#xff0c;依赖倒置&#xff0c;面向接口的设计。 说明&#xff1a; ​ server代表一个canal运行实例&#xff0c;对应于一个jvm ​ instance…

免费分享一套基于SpringBoot实现商城系统(仿天猫),挺漂亮的

大家好&#xff0c;我是锋哥&#xff0c;看到一个不错的基于SpringBoot实现商城系统(仿天猫)系统&#xff0c;分享下哈。 项目介绍 迷你天猫商城是一个基于Spring Boot的综合性B2C电商平台&#xff0c;需求设计主要参考天猫商城的购物流程&#xff1a;用户从注册开始&#xf…

编码器原理

编码器原理 编码器是一种用来测量机械旋转或位移的传感器。这种传感器能够测量机械部件在旋转或直线运动时的位移位置或速度等信息,并将其转换成一系列电信号。 光栅式旋转编码器 霍尔式编码器

制作一个简易的计算器app

1、Ui开发 笔者的Ui制作的制作的比较麻烦仅供参考&#xff0c;在这里使用了多个LinearLayout对屏幕进行了划分。不建议大家这样做最好使用GridLayout会更加快捷简单 笔者大致划分是这样的&#xff1a; 使用了四个大框&#xff0c;在第四个大框里面有多个小框 最终界面如下&am…

Linux(一)

一.FinalShell远程连接Linux系统&#xff08;可能在自己电脑虚拟机上也可能在服务器上&#xff09; 二.掌握使用WSL获得Ubuntu系统环境 WSL作为Windows10系统带来的全新特性。 传统方式获取Linux操作系统环境&#xff0c;是安装完整的虚拟机&#xff0c;如VMware 使用WSL&#…

系统架构设计师 10:软件架构的演化和维护

一、软件架构演化 如果软件架构的定义是 SA{components, connectors, constraints}&#xff0c;也就是说&#xff0c;软件架构包括组件、连接件和约束三大要素&#xff0c;这类软件架构演化主要关注的就是组件、连接件和约束的添加、修改与删除等。 二、面向对象软件架构演化…

点云分割-pcl区域生长算法

目录 写在前面原理代码运行结果 参考完 写在前面 1、本文内容 pcl的区域生长算法的使用和原理 2、平台/环境 cmake, pcl 3、转载请注明出处&#xff1a; https://blog.csdn.net/qq_41102371/article/details/131927376 原理 参考&#xff1a;https://pcl.readthedocs.io/pr…

从风控系统看架构设计原型图分析

目录 一、对架构与架构图的理解 &#xff08;一&#xff09;架构的本质 &#xff08;二&#xff09;软件设计中架构域的划分 &#xff08;三&#xff09;架构图设计 架构图设计的必要性 如何画架构图 二、实践业务架构与产品架构设计 &#xff08;一&#xff09;列出问…

基于SpringBoot+vue的学生成绩管理系统设计与实现(源码+LW+部署文档等)

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

重学C++系列之虚继承

一、什么是虚继承 虚继承是C中一种继承的机制。继承有普通继承和虚继承两种机制&#xff0c;默认是普通继承&#xff0c;如果要使用多继承&#xff0c;需要在继承方式里加上关键字virtual。 二、为什么要虚继承 在C中&#xff0c;为解决二义性问题&#xff0c;引入虚继承机制。…

tinkerCAD案例:9. Saw Shaped Wrench 锯形扳手

tinkerCAD案例&#xff1a;9. Saw Shaped Wrench 锯形扳手 ln this lesson you will learn how to create a cool saw shaped wrench. 在本课中&#xff0c;您将学习如何制作一个很酷的锯形扳手。 Start the lesson by dragging a polygon to the workplane. 通过将多边形拖动…

从模型坐标到屏幕坐标

在 3D 引擎中&#xff0c;场景通常被描述为三维空间中的模型或对象&#xff0c;每个模型对象由许多三维顶点组成。最终&#xff0c;这些模型对象将在平面屏幕上呈现和显示。 渲染场景始终相对于摄像机&#xff0c;因此&#xff0c;还必须相对于摄像机的视图定义场景的顶点。了…

zeppelin spark kerberos 使用过程遇到的问题

参考配置教程: Configure Zeppelin for a Kerberos-Enabled Cluster zeppelin spark kerberos 使用过程遇到的问题 ambari创建zeppelin时,会创建Kerberos account and keytab /etc/security/keytabs/zeppelin.server.kerberos.keytab interpreter配置 keytab Interpreter Ke…

新来个技术总监,禁止我们用Git的rebase!?

△Hollis, 一个对Coding有着独特追求的人△ 这是Hollis的第 429 篇原创分享 作者 l Hollis 来源 l Hollis&#xff08;ID&#xff1a;hollischuang&#xff09; 在Git中&#xff0c;merge和rebase是两种不同的代码合并策略&#xff0c;它们用于将一个分支的更改合并到另一个分支…

动态内存常见的问题

对空指针的解引用 改正后的代码&#xff1a; 返回栈&#xff08;临时变量&#xff09;空间地址的问题 释放空间后及时把指针设为空 void Test(void) {char* str (char*)malloc(100);strcpy(str, "hello");free(str);str NULL;//释放空间后及时把指针设为空if (s…

嵌入式学习入门和求职经验

入门阶段&#xff1a;&#xff08;不要只看书&#xff0c;要多动手&#xff0c;但千万不是直接动手&#xff0c;不去看书&#xff09; C语言&#xff1a;嵌入式编程大多用C语言、少量汇编&#xff0c;先学习C语言&#xff0c;汇编用到的时候再上网查询。教材&#xff1a;随便一…