机器人制作开源方案 | 桌面级全向底盘--本体说明+驱动控制

news2024/12/27 10:59:40

一、本体说明

1. 底盘概述

      该底盘是一款模块化的桌面级应用型底盘,基于应用级软件架构设计、应用级硬件系统设计、典型应用型底盘机械系统设计。

      底盘本体为一个采用半独立刚性悬挂的四驱全向底盘。

2. 软件环境介绍

      操作系统:Ubuntu18.04系统。基于Debian GNU/Linux,支持x86、amd64(即x64)、ARM和ppc架构。

      仿真系统:基于开源机器人操作系统ROS melodic和开源软件平台Arduino开发。上位机采用ROS melodic,基于Rviz完成全向移动底盘slam导航运动规划,采用gazebo完成全向移动底盘物理运动仿真;下位机采用Arduino实现对全向移动底盘运动的控制。

      注意:准备一个外接显示器。

3. 硬件配置及主要参数

硬件配置及主要参数

 4. 认识底盘的电器接口

    ① 常用接口说明

底盘尺寸示意图
底盘常用电气接口

    ② 扩展电气接口说明

左侧扩展接口对应图
车头扩展接口对应图
车尾扩展接口对应图

5. 底盘简化的系统框图

底盘的系统框图

二、驱动及控制

1. 控制底盘单个轮子

实现思路

      控制底盘的四个轮子分别转动。

      下面我们先来了解一下底盘的总线舵机ID号。

底盘的头部、尾部
底盘上总线舵机ID号

 操作步骤

① 下载文末资料中的参考程序Base_Experiment\Chassis_Drive\Control_single_bus_steering_gear\Control_single_bus_steering_gear.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-08-16 https://www.robotway.com/

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

/*

*Control single bus steering grar

*

*

///

*        head

* ID:001       ID:000

*    ___________

*   |           |

*   |           |

*   |           |

*   |           |

*   |           |

*   |           |

*   |___________|

* ID:003       ID:002   

*      Rear end

*

* 2020.8.7 by boris

//

*/

#define mySerial Serial2           //Serial port used by bus steering gear

#define Serial_Baud_Rate 115200    //Serial Port baud rate

#define BusServoSerialBaud 115200   //Bus steering gear baud rate

#define wheel_speed_forward 0.08   //wheel forward speed

#define wheel_speed_back -0.08     //wheel back speed

#define wheel_speed_stop 0.0       //wheel stop speed

enum{FORWARD_LEFT=1,FORWARD_RIGHT,BACK_LEFT,BACK_RIGHT,STOP};//wheel named

void setup(){

  delay(1100);Serial.begin(Serial_Baud_Rate);

  mySerial.begin(BusServoSerialBaud);delay(1000);

}

void loop(){

  control_bus_steering_gear_test();// control single bus steering gear

}

void control_bus_steering_gear_test()

{

  Car_Move(FORWARD_LEFT,wheel_speed_forward);delay(1000);Stop_car();   //left front wheel forward

  Car_Move(FORWARD_LEFT,wheel_speed_back);delay(1000);Stop_car();      //left front wheel backword

 

  Car_Move(FORWARD_RIGHT,wheel_speed_forward);delay(1000);Stop_car();   //right front wheel forward

  Car_Move(FORWARD_RIGHT,wheel_speed_back);delay(1000);Stop_car();     //right front wheel backword

 

  Car_Move(BACK_LEFT,wheel_speed_forward);delay(1000);Stop_car();      //left rear wheel forward

  Car_Move(BACK_LEFT,wheel_speed_back);delay(1000);Stop_car();         //left rear wheel backword

 

  Car_Move(BACK_RIGHT,wheel_speed_forward);delay(1000);Stop_car();     //right rear wheel backword

  Car_Move(BACK_RIGHT,wheel_speed_back);delay(1000);Stop_car();        //right rear wheel backword

}

② 将底盘轮子朝上,观察每个轮子的转动效果。

2. 底盘的基本运动

实现思路

      实现底盘前进、后退、左平移、右平移、左转、右转的功能。

操作步骤

① 下载文末资料中的参考程序Base_Experiment\Chassis_Drive\Control_Car_Movement\Control_Car_Movement.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-08-16 https://www.robotway.com/

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

/*

* car action test (include:forward, back, turnleft,turnright, left translation, right translation)

*                         

*

* IP address of bus steering gear

*        head

* ID:001       ID:000

*    ___________

*   |           |

*   |           |

*   |           |

*   |           |

*   |           |

*   |           |

*   |___________|

* ID:003       ID:002   

*      Rear end

*

* 2020.8.7 by boris



*/

#define ActionDelayTimes 1000

#define mySerial Serial2

#define BusServoSerialBaud 115200

#define wheel_speed_forward 0.08    //car forward speed

#define wheel_speed_back -0.08      //car back speed

#define wheel_speed_stop 0.0        //car stop speed

#define wheel_speed_left 0.08       //car turnleft speed

#define wheel_speed_right -0.08     //car turnright speed

#define wheel_speed_left_translation 0.08   //speed of car left translation

#define wheel_speed_right_translation -0.08 //speed of car right translation

enum{FORWARD=1,BACK,LEFT,RIGHT,LEFT_TRANSLATION,RIGHT_TRANSLATION,STOP}; //the movement state of the car

float wheel_Speed[4]={0,0,0,0};

char cmd_return[200];

void setup()

{

  delay(1000);

  Serial.begin(57600);delay(1000);//open serial

  mySerial.begin(BusServoSerialBaud);delay(1000);//open serial2

  car_move_test();

}

void loop()

{

   //car_move_test();//car action test

   //car_stop();

}

void car_move_test()//car action test

{

  Car_Move(FORWARD);delay(ActionDelayTimes);          // forward

  car_stop();

  Car_Move(BACK);delay(ActionDelayTimes);             // back

  car_stop();

  Car_Move(LEFT_TRANSLATION);delay(ActionDelayTimes); //left translation

  car_stop();

  Car_Move(RIGHT_TRANSLATION);delay(ActionDelayTimes);//right translation

  car_stop();

  Car_Move(LEFT);delay(ActionDelayTimes);             //turnleft

  car_stop();

  Car_Move(RIGHT);delay(ActionDelayTimes);            //turn right

  car_stop();  

}

② 观察底盘的运动情况。

三、传感器使用

1. 底盘循迹-灰度传感器

实现思路

      实现全向底盘可以按指定路线进行行走的功能(实验场景如下图所示)。

操作步骤

① 连接电路。如下图所示是全向底盘上的4个灰度接线,但本实验中我们只需要用到头部的两个灰度传感器即可。

底盘的头部、尾部
头部的灰度传感器:接42、44号引脚

② 下载文末资料中的参考程序Base_Experiment\Tracking_Car\Tracking_Car.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-08-16 https://www.robotway.com/

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

/*

*Tracking Car

*

*        head

* pin:42      pin:44

*    ___________

*   |           |

*   |           |

*   |           |

*   |           |

*   |___________|

* pin:36      pin:34   

*      Rear end

* 2020.8.7 by boris

*/

#define mySerial Serial2         //statement serial2

#define Sensor_Numbers 4         //numbers of sensor

#define Serial_Baud_Rate 115200   //serial port baud rate

#define BusServoSerialBaud 115200//bus steering gear baud rate

#define wheel_speed_forward 0.06 //car forward speed

#define wheel_speed_back -0.06   //car back speed

#define wheel_speed_stop 0.0     //car stop speed

#define wheel_speed_left 0.1    //car turnleft speed

#define wheel_speed_right -0.1   //car turnright speed

enum{FORWARD=1,BACK,LEFT,RIGHT,STOP};//the movement state of the car

const int Gray_Sensor_Pin[Sensor_Numbers] = {44,42,36,34};//define gray sensor pin

const int GraySensorNumbers = sizeof(Gray_Sensor_Pin)/sizeof(Gray_Sensor_Pin[0]);

char cmd_return[200];

void setup(){

  delay(1100);Serial.begin(Serial_Baud_Rate);

  Gray_Sensor_Init();

  mySerial.begin(BusServoSerialBaud);delay(1000);

}

void loop(){

  tracking_car();//car tracking

  //Car_Move(STOP);

}

void Gray_Sensor_Init()//sensor init

{

  for(int i=0;i<Sensor_Numbers;i++)

  {

     pinMode(Gray_Sensor_Pin[i],INPUT);delay(2);

  } delay(200);

}

void tracking_car() //car tracking

{

  int sensor_data[Sensor_Numbers] = {0,0,0,0};

  int sum = 0;

  for(int i=0;i<Sensor_Numbers-2;i++)

  {

     sensor_data[i] = digitalRead(Gray_Sensor_Pin[i]);

     sum |= sensor_data[i] << i;

  }  

  switch(sum)

  {

    case 0: Car_Move(FORWARD); break;

    case 1: Car_Move(LEFT); break;

    case 2: Car_Move(RIGHT); break;

    case 3: Car_Move(FORWARD); break;

    default: break;

  }

}

 ③ 观察全向底盘循迹的效果。

2. 底盘避障-超声测距

实现思路

      实现全向底盘可以在模拟的场景下进行避障然后行进的功能(实验场景如下图所示)。

操作步骤

① 连接电路,如下图所示是全向底盘的8个超声测距接线图。

② 下载文末资料中的参考程序Base_Experiment\Avoiding_Obstacles_Car\Avoiding_Obstacles_Car.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-08-16 https://www.robotway.com/

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

/*

* Avoid obstacles car

*

*

*   车身位置及传感器接线:

*

* // Y

* // |

* // |

* // |              t:53                   t:8  

* // |     (ID:003) e:A15                  e:9   (ID:001)

* // |   t:37    A - - - - - - - - - - - - - - - - - -Y: t:39

* // |   e:38    |                                    |   e:40

* // |          |                                    |         车头

* // |   t:31    |                                    |   t:45

* // |   e:32    Z - - - - - - - - - - - - - - - - - -X: e:46

* // |     (ID:002) t:47                   t:A13   (ID:000)

* // |              e:48                   e:A14

* // 0-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- X

* 

*  

* 2020.8.7 by boris

*/

#define mySerial Serial2            //Serial port used by bus steering gear           

#define Serial_Baud_Rate 115200     //Serial Port baud rate

#define BusServoSerialBaud 115200   //Bus steering gear baud rate

#define wheel_speed_forward 0.04    //car forward speed

#define wheel_speed_forward_up 0.06 //forward speed up

#define wheel_speed_back -0.04      //car back speed

#define wheel_speed_stop 0.0        //car stop speed

#define wheel_speed_left 0.1      //car turnleft speed

#define wheel_speed_right -0.1    //car turnright speed

#define wheel_speed_left_translation 0.04   //speed of car left translation

#define wheel_speed_right_translation -0.04 //speed of car right translation

enum{FORWARD=1,BACK,LEFT,RIGHT,LEFT_TRANSLATION,RIGHT_TRANSLATION,STOP,FORWARD_UP}; //the movement state of the car

char cmd_return[200];

float wheel_Speed[4]={0,0,0,0};

void setup(){

  delay(1100);Serial.begin(Serial_Baud_Rate);

  init_Ultrasonic();delay(200);

  mySerial.begin(BusServoSerialBaud);delay(1000);

}

void loop(){

  //Car_Move(STOP);delay(1000);

  car_move();

  //get_ultrasonic_sensor_data();

}

 ③ 观察全向底盘避障的效果。

程序源代码详见 桌面级全向底盘

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

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

相关文章

对swap交换分区虚拟内存的理解

Swap分区的作用是什么 更新&#xff1a;2023-05-31 13:10 Swap是一种虚拟内存技术&#xff0c;在计算机内存不足时&#xff0c;它可以将运行中的程序或者数据存到硬盘上以释放内存空间。Swap技术不仅适用于Linux操作系统&#xff0c;Windows和Mac OS也有类似的技术&#xff0…

为什么各个企业都在强调要建立sop?

在现代社会中&#xff0c;随着科技的不断发展&#xff0c;各行各业的竞争也越来越激烈。为了提高工作效率&#xff0c;很多企业开始重视建立标准操作流程&#xff08;SOP&#xff09;。那么&#xff0c;为什么要建立SOP呢&#xff1f; 所谓SOP&#xff0c;就是 Standard Opera…

安装ArcGis时需要安装Micsoft.Net Framework 3.5 sp1

在安转ArcGis时遇到一个问题&#xff0c;解决方法如下 下载.Net 按照他的说明 将地址复制到迅雷中下载&#xff0c;并安装 就可以了 安装就可以了

MES系统在电力装备方面的应用

MES系统主要功能&#xff1a;解决“如何生产”的问题 通过实施MES系统&#xff0c;可以贯通从采购到售后服务的全制造流程&#xff0c;透明化生产现场运作&#xff0c;大大提升了生产制造各部门的管理实时性和有效性。 可获得的效益大致如下&#xff1a; 降低不良率&#xff…

【webrtc】接收/发送的rtp包、编解码的VCM包、CopyOnWriteBuffer

收到的rtp包RtpPacketReceived 经过RtpDepacketizer 解析后变为ParsedPayloadRtpPacketReceived 分配内存,执行memcpy拷贝:然后把 RtpPacketReceived 给到OnRtpPacket 传递:uint8_t* media_payload = media_packet.AllocatePayload(rtx_payload.size());RTC

Python break 语句

Python break语句&#xff0c;就像在C语言中&#xff0c;打破了最小封闭for或while循环。 break语句用来终止循环语句&#xff0c;即循环条件没有False条件或者序列还没被完全递归完&#xff0c;也会停止执行循环语句。 break语句用在while和for循环中。 如果您使用嵌套循环…

关于JDK 8的HashMap

HashMap 简介 HashMap 主要用来存放键值对&#xff0c;它基于哈希表的 Map 接口实现&#xff0c;是常用的 Java 集合之一&#xff0c;是非线程安全的。 HashMap 可以存储 null 的 key 和 value&#xff0c;但 null 作为键只能有一个&#xff0c;null 作为值可以有多个 JDK1.8…

信号浪涌保护器防雷接地工程应用方案

信号浪涌保护器是一种用于保护电子设备免受电力线路上的瞬时过电压或过电流的装置。信号浪涌保护器的参数方案和应用施工主要取决于信号线路的类型、电气特性、工作环境和保护要求。下面是一篇关于信号浪涌保护器的文章&#xff0c;介绍了一些常见的信号浪涌保护器参数方案和应…

Android Canvas的使用

android.graphics.Canvas 一般在自定义View中&#xff0c;重写 onDraw(Canvas canvas) 方法时用到。 /*** Implement this to do your drawing.** param canvas the canvas on which the background will be drawn*/Overrideprotected void onDraw(Canvas canvas) {super.onDra…

LeetCode 剑指 Offer 10- I. 斐波那契数列

LeetCode 剑指 Offer 10- I. 斐波那契数列 题目描述 写一个函数&#xff0c;输入 n &#xff0c;求斐波那契&#xff08;Fibonacci&#xff09;数列的第 n 项&#xff08;即 F(N)&#xff09;。斐波那契数列的定义如下&#xff1a; F(0) 0, F(1) 1 F(N) F(N - 1) F(N - …

LeetCode 46题:全排列

题目 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2&#xff1a; 输入&#xff1a;…

Bridge Champ举办人机对战赛:NFT游戏与传统竞技共生发展编织新格局

概要 现在,NFT与体育竞技正日益紧密地联系在一起。一些体育项目开始推出与赛事或球队相关的NFT,同时也有部分NFT游戏开始举办电子竞技赛事。这种共生发展正在改变体育竞技的生态。 笔者采访了桥牌冠军项目相关负责人,探讨NFT游戏与传统体育竞技的融合潜力。桥牌冠军近期成功举…

您必须尝试的 4 种经典特征提取技术!

一、说明 特征提取如何实现&#xff1f;其手段并不是很多&#xff0c;有四个基本方法&#xff0c;作为AI工程师不能不知。因此&#xff0c;本篇将对四种特征提取给出系统的方法。 二、概述 图像分类长期以来一直是计算机视觉领域的热门话题&#xff0c;并希望能够保持这种状态。…

MES系统质量检查:提升制造业生产质量

一、MES系统质量检查的定义&#xff1a; MES系统质量检查是指制造执行系统中的质量管理模块&#xff0c;旨在监控和管理生产过程中的质量控制和质量检查活动。该模块涵盖了产品质量数据的采集、分析、报告和追溯等功能&#xff0c;以确保产品符合质量要求&#xff0c;并提供实…

技术人的修炼---九五小庞

当一个人在一个领域做了很长时间后&#xff0c;很容易形成一些固化的认识&#xff0c;而且变得封闭&#xff0c;不愿意接受而这个认识的观点。这儿举一个我自己的例子&#xff1a; (建立固化认识)我做用增做了很多年&#xff0c;我自己建立一个很深的认识『产品价值是一切业务增…

轻松敏捷开发流程之Scrum

Scrum是一种敏捷开发流程&#xff0c;它旨在使软件开发更加高效和灵活。Scrum将软件开发过程分为多个短期、可重复的阶段&#xff0c;称为“Sprint”。每个Sprint通常为两周&#xff0c;旨在完成一部分开发任务。 在Scrum中&#xff0c;有一个明确的角色分工&#xff1a; 产品…

智能座舱域集中驶入「深水区」,这些细分赛道迎来变局!

在“移动出行第三空间”概念的指引下&#xff0c;融合视觉、听觉、触觉、文本等多维感知信息的多模态交互&#xff0c;正打破单模态输入输出限制&#xff0c;深度应用于智能座舱。 比如&#xff0c;叠加大屏化、多屏化、AR全息无屏化趋势&#xff0c;多模态识别与大屏&多屏…

iTOP-RK3568开发板驱动指南第五篇-中断

文档教程更新至第五篇 第1篇 驱动基础篇 第2篇 字符设备基础 第3篇 并发与竞争 第4篇 高级字符设备进阶 第5篇 中断 未完待续&#xff0c;持续更新中... 视频教程更新至十一期 第一期_驱动基础 第二期_字符设备基础 第三期_并发与竞争 第四期_高级字符设备进阶 第五期…

【数据结构-队列】队列介绍

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

三维模型OBJ格式轻量化纹理压缩技术方法浅析

三维模型OBJ格式轻量化纹理压缩技术方法浅析 三维模型的OBJ格式轻量化中&#xff0c;纹理压缩是一项重要的技术&#xff0c;用于减小模型文件中纹理数据的大小。以下是对三维模型OBJ格式轻量化纹理压缩的关键技术进行分析&#xff1a; 1、纹理图像压缩算法&#xff1a; 纹理图…