全地形比赛小车制作分享

1. 比赛场地

      场地中设定四种五个不同特点、不同难度的障碍物,每种障碍物均有一定的分值,参赛队根据比赛规则自主设计制作机器人,完成穿越各个障碍物的比赛。

      障碍物分别为模拟工业用栅格地毯、楼梯、管道、独木桥,各障碍物由黑色引导线连接,形成完整的比赛赛道,并设置比赛起点和终点,比赛场地由组委会统一布置。

      比赛场地及四种障碍物(栅格地面,管道,窄桥,楼梯)尺寸标记(含引导黑线、比赛起点和终点)。

(1)场地整体图:

 

 (2)窄桥尺寸图:

                        单位:cm

                        材料:发泡EVA

                        颜色:黑色

(3)台阶尺寸图:

                    单位:cm

                    材料:发泡EVA

                    颜色:黑色

(4)管道尺寸图:

                        单位:cm

                        材料:亚克力

                        颜色:透明

(5)栅格地面尺寸图:

                               单位:cm

                               材料:工程塑料

                               颜色:蓝色

2. 示例样机

本文采用的示例样机,在四个前后轮上缠绕了履带片以增大轮径,提高越障的性能。

 

两侧摇臂用零件(下图所示蓝色零件)固定在了一起,单侧摇臂不能单独摆动,只能同时摆动,损失了一些灵活性,但是增加了行驶中的稳定性,尤其是增加了攀爬越障时的稳定性,车身不容易跑偏。

 

车头位置并排安装3个灰度传感器。

 

 

3. 示例程序

电子模块:Arduino UNO(Basra控制板)×1,Bigfish扩展板×1,灰度传感器×3。

编程环境:Arduino1.8.19

程序源代码如下:

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

  版权说明:Copyright 2022 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 机器谱 2022-5-26 https://www.robotway.com/

  --------------------------------

  实验功能:

          实现小车沿黑线行驶,遇到黑线构成的路口能够按既定策略执行.

          假想循迹场地,有直线、左转弯、右转弯、十字路口;

  --------------------------------

  实验接线:

      小车车头并排安装三个灰度传感器

                车头

             .------------.

             |        |

             |        |

     左侧轮   |        |   右侧轮

      D5, D6 *------------* D9, D10

     

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

//

//;

int pin[3] = {A4, A3, A0};           //按车头前进方向,从右至左定义,后面经过公式计算,会转化为从左至右的顺序

int s;

void setup()

{

  pinMode( 5 , OUTPUT);

  pinMode( 6 , OUTPUT);

  pinMode( 9 , OUTPUT);

  pinMode( 10 , OUTPUT);

}

void loop()

{

   s = 0;

        for(int i=0; i<3; i++)                 //循环获取三个传感器的值

        {

            s|= (!digitalRead(pin[i]) << i);   //经过左移运算和或运算后,按照A0、A3、A4的顺序产生一个三位2进制数值,表示3个传感器的组合触发状态

        }

        switch (s)

        {

          case 0x00: //三个均未触发

          Forwards();

          break;

          case 0x01: //右侧传感器触发,直线上摆动或遇到右转弯

          Right();

          break;

          case 0x02: //中间传感器触发,直线上直行

          Forwards();

          break;

          case 0x03: //右侧两个触发,遇到右转弯

          Right();

          break;

          case 0x04: //左侧传感器触发,直线上摆动或遇到左转弯

          Left();

          break;

          case 0x06: //左侧两个触发,遇到左转弯

          Left();

          break;

          case 0x07: //三个同时触发,遇到十字路口

          Forwards();

          break;

          default:;break;

        }

  }

void Left()

{

digitalWrite( 5 , HIGH );

digitalWrite( 6 , LOW );

digitalWrite( 9 , LOW );

digitalWrite( 10 , LOW );

}

void Right()

{

digitalWrite( 5 , LOW );

digitalWrite( 6 , LOW );

digitalWrite( 9 , HIGH );

digitalWrite( 10 , LOW );

}

void Forwards()

{

digitalWrite( 5 , HIGH );

digitalWrite( 6 , LOW );

digitalWrite( 9 , HIGH );

digitalWrite( 10 , LOW );

}

 4. 样机扩展

也可以使用探索者的各类兼容零件制作样机

 

5. 资料下载

资料内容:月球车底盘-全地形比赛-样机3D文件、月球车底盘-全地形比赛-例程文件、全地形赛-场地制作文件

详情请参考: 全地形比赛-月球车

  • 16
    点赞
  • 142
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是一个简单的地形小车程序代码,可以控制小车前进、后退、左转、右转: ```python import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BOARD) # 定义引脚 ENA = 33 # 左电机使能引脚 IN1 = 35 # 左电机控制引脚1 IN2 = 37 # 左电机控制引脚2 ENB = 36 # 右电机使能引脚 IN3 = 38 # 右电机控制引脚1 IN4 = 40 # 右电机控制引脚2 # 设置引脚模式 GPIO.setup(ENA, GPIO.OUT) GPIO.setup(IN1, GPIO.OUT) GPIO.setup(IN2, GPIO.OUT) GPIO.setup(ENB, GPIO.OUT) GPIO.setup(IN3, GPIO.OUT) GPIO.setup(IN4, GPIO.OUT) # 设置电机默认速度为0 pwm_ENA = GPIO.PWM(ENA, 100) pwm_ENA.start(0) pwm_ENB = GPIO.PWM(ENB, 100) pwm_ENB.start(0) # 控制小车前进 def forward(): GPIO.output(IN1, GPIO.HIGH) GPIO.output(IN2, GPIO.LOW) GPIO.output(IN3, GPIO.HIGH) GPIO.output(IN4, GPIO.LOW) pwm_ENA.ChangeDutyCycle(50) pwm_ENB.ChangeDutyCycle(50) time.sleep(1) # 控制小车后退 def backward(): GPIO.output(IN1, GPIO.LOW) GPIO.output(IN2, GPIO.HIGH) GPIO.output(IN3, GPIO.LOW) GPIO.output(IN4, GPIO.HIGH) pwm_ENA.ChangeDutyCycle(50) pwm_ENB.ChangeDutyCycle(50) time.sleep(1) # 控制小车左转 def turn_left(): GPIO.output(IN1, GPIO.LOW) GPIO.output(IN2, GPIO.HIGH) GPIO.output(IN3, GPIO.HIGH) GPIO.output(IN4, GPIO.LOW) pwm_ENA.ChangeDutyCycle(50) pwm_ENB.ChangeDutyCycle(50) time.sleep(1) # 控制小车右转 def turn_right(): GPIO.output(IN1, GPIO.HIGH) GPIO.output(IN2, GPIO.LOW) GPIO.output(IN3, GPIO.LOW) GPIO.output(IN4, GPIO.HIGH) pwm_ENA.ChangeDutyCycle(50) pwm_ENB.ChangeDutyCycle(50) time.sleep(1) # 停止小车 def stop(): GPIO.output(IN1, GPIO.LOW) GPIO.output(IN2, GPIO.LOW) GPIO.output(IN3, GPIO.LOW) GPIO.output(IN4, GPIO.LOW) pwm_ENA.ChangeDutyCycle(0) pwm_ENB.ChangeDutyCycle(0) # 清理GPIO资源 def clean_up(): GPIO.cleanup() ``` 这是一个基本的程序代码,可以通过调整电机的速度和控制时间来控制小车的运动。注意,在使用本代码之前,请确保你已经正确连接了电机和树莓派的引脚。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值