当前位置: 首页 > news >正文

机器人制作开源方案 | 行星探测车概述

1. 功能描述

       行星探测车(Planetary Rover)是一种用于进行科学探索和勘测任务的无人车辆,它们被设计成能够适应各种复杂的地形条件和极端环境,以便收集数据、拍摄照片、采集样本等。行星探测车通常包含以下主要组件和功能:
       ① 底盘和轮子系统:底盘提供了行星探测车的支撑结构,轮子系统使其能够移动。轮子通常采用特殊设计,以适应不同地质条件和障碍物,并提供良好的牵引力和稳定性。
       ② 动力系统:行星探测车通常由电池或太阳能电池板供电,这些能源会驱动电动机,使车辆能够移动和执行其它任务。
       ③ 导航与控制系统:导航和控制系统帮助行星探测车感知周围的环境并自主导航,它们通常包括惯性测量单元(IMU)、陀螺仪、加速度、摄像头、激光雷达、GPS等传感器。
       ④ 通信系统:行星探测车需要进行通信以接收指令和发送数据,通常会使用无线电通信设备实现远距离通信。
本文示例将实现R261样机行星探测车在行进过程中避障,并且当光强传感器触发时实现太阳翼展开的功能。
 

 

2. 电子硬件

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

主控板

Basra主控板(兼容Arduino Uno)

扩展板

Bigfish2.1扩展板

传感器
 
光强传感器
近红外传感器
电池7.4V锂电池

电路连接图如下所示:

3. 功能实现

编程环境:Arduino 1.8.19
下面提供一个实现行星探测车在行进过程中避障,并且当光强传感器触发时实现太阳翼展开功能的参考程序(sketch_sep12a.ino):

/*------------------------------------------------------------------------------------版权说明:Copyright 2023 Robottime(Beijing) Technology Co., Ltd. All Rights Reserved.Distributed under MIT license.See file LICENSE for detail or copy athttps://opensource.org/licenses/MITby 机器谱 2023-09-21 https://www.robotway.com/------------------------------*/#include <Servo.h>Servo leftSolarPanel;   // 左太阳翼舵机Servo rightSolarPanel; // 右太阳翼舵机Servo mast;           // 桅杆舵机int irSensorPin = A0;     // 红外传感器的引脚(根据实际连接修改)int lightSensorPin =A5;   // 光强传感器的引脚(根据实际连接修改)bool irSensorTriggered = false; // 用于跟踪红外传感器触发状态void setup() {pinMode(irSensorPin, INPUT);pinMode(lightSensorPin, INPUT);leftSolarPanel.attach(4);   // 左太阳翼舵机连接到数字引脚 4rightSolarPanel.attach(3); // 右太阳翼舵机连接到数字引脚 3mast.attach(7);            // 桅杆舵机连接到数字引脚 7}void loop() {// 读取红外传感器状态int irSensorValue = digitalRead(irSensorPin);// 如果红外传感器触发,小车后退并左转if (irSensorValue == HIGH && !irSensorTriggered) {irSensorTriggered = true;moveBackward();leftTurn();} else if (irSensorValue == HIGH && irSensorTriggered) {irSensorTriggered = false;moveForward();rightTurn();} else {// 如果未触发红外传感器,停止小车运动stopCar();}// 读取光强传感器状态int lightSensorValue = analogRead(lightSensorPin);// 如果光强传感器触发,执行太阳翼和桅杆展开和闭合操作if (lightSensorValue > 500) {expandSolarPanelsAndMast();} else {stopSolarPanelsAndMast();}}// 后退void moveBackward() {digitalWrite( 5 , HIGH );   //右轮后退digitalWrite( 6 , LOW );digitalWrite( 9 , HIGH );   //左轮后退digitalWrite( 10 , LOW);}// 左转void leftTurn() {digitalWrite( 5 , HIGH );digitalWrite( 6 , LOW );digitalWrite( 9 , LOW );digitalWrite( 10 , LOW );}// 前进void moveForward() {digitalWrite( 5 , LOW );   //右轮前进digitalWrite( 6 , HIGH );digitalWrite( 9 , LOW );   //左轮前进digitalWrite( 10 , HIGH );}// 右转void rightTurn() {digitalWrite( 5 , LOW );digitalWrite( 6 , LOW );digitalWrite( 9 , HIGH );digitalWrite( 10 , LOW );}// 停止void stopCar() {analogWrite(5 , 0);analogWrite(6 , 0);analogWrite(9 , 0);analogWrite(10 , 0);}// 太阳翼和桅杆展开操作void expandSolarPanelsAndMast() {// 左太阳翼展开至180°setServoAngle(leftSolarPanel, 180);delay(500);   // 暂停0.5秒// 右太阳翼展开至180°setServoAngle(rightSolarPanel, 180);delay(500);   // 暂停0.5秒// 桅杆展开至90°setServoAngle(mast, 90);delay(500);   // 暂停0.5秒}// 太阳翼和桅杆关闭操作void stopSolarPanelsAndMast() {// 桅杆闭合至0°setServoAngle(mast, 0);// 左太阳翼闭合至0°setServoAngle(leftSolarPanel, 0);// 右太阳翼闭合至0°setServoAngle(rightSolarPanel, 0);}// 函数用于设置舵机角度,并控制舵机旋转速度void setServoAngle(Servo servo, int targetAngle) {int currentAngle = servo.read();int step = 1; // 步进值,可根据需要调整int delayTime = 20; // 延迟时间,可根据需要调整if (targetAngle > currentAngle) {for (int angle = currentAngle; angle <= targetAngle; angle += step) {servo.write(angle);delay(delayTime);}} else if (targetAngle < currentAngle) {for (int angle = currentAngle; angle >= targetAngle; angle -= step) {servo.write(angle);delay(delayTime);}}}

​4. 扩展样机

本样机的底盘方案是【R255】号机构,如下图所示:

程序源代码及样机3D文件资料详见 行星探测车-概述

http://www.lryc.cn/news/197334.html

相关文章:

  • Git基础命令
  • C#中Semaphore 和 CountdownEvent 的使用总结
  • THE PLANETS:EARTH vulnhub
  • 【随想】每日两题Day.13
  • CMake Cookbook
  • 钢铁异常分类 few-shot 问题 小陈读paper 钢铁2
  • flask实战(问答平台)
  • RK3568驱动模块编译进内核
  • 黑马程序员Java Web--14.综合案例--修改功能实现
  • 开源协议介绍
  • solidworks 2024新功能之-打造更加智能的工作 硕迪科技
  • Datawhale学习笔记AI +新能源:电动汽车充电站充电量预测
  • 记一次fineBI的增量删除更新BUG
  • rsync+inotify实时同步+双向同步
  • 7.继承与多态 对象村的优质生活
  • 机器视觉、图像处理和计算机视觉:概念和区别
  • 从零开始的C语言学习第二十课:数据在内存中的存储
  • 分布式内存计算Spark环境部署与分布式内存计算Flink环境部署
  • am权限系统对接笔记
  • 回首往昔,初学编程那会写过的两段愚蠢代码
  • 《Java面向对象程序设计》学习笔记——Java程序填空题
  • Chrome跨域访问网络请求Cookies丢失的解决办法
  • 从创业者的角度告诉你AI问答机器人网页的重要性
  • 大数据Flink(九十七):EXPLAIN、USE和SHOW 子句
  • 浏览器中的网络钓鱼防护
  • 每日温度00
  • 【JVM】JVM的垃圾回收机制
  • 28栈与队列-单调队列
  • qt软件崩溃的分析方法-定位源文件和行号
  • 《实验细节》上手使用PEFT库方法和常见出错问题