【R261】行星探测车
作者:机器谱
概述 WiFi视频遥控 云端控制 |
1. 功能描述
行星探测车(Planetary Rover)是一种用于进行科学探索和勘测任务的无人车辆,它们被设计成能够适应各种复杂的地形条件和极端环境,以便收集数据、拍摄照片、采集样本等。行星探测车通常包含以下主要组件和功能:
① 底盘和轮子系统:底盘提供了行星探测车的支撑结构,轮子系统使其能够移动。轮子通常采用特殊设计,以适应不同地质条件和障碍物,
并提供良好的牵引力和稳定性。
② 动力系统:行星探测车通常由电池或太阳能电池板供电,这些能源会驱动电动机,使车辆能够移动和执行其它任务。
③ 导航与控制系统:导航和控制系统帮助行星探测车感知周围的环境并自主导航,它们通常包括惯性测量单元(IMU)、陀螺仪、加速度、
摄像头、激光雷达、GPS等传感器。
④ 通信系统:行星探测车需要进行通信以接收指令和发送数据,通常会使用无线电通信设备实现远距离通信。
本文示例将实现R261样机行星探测车在行进过程中避障,并且当光强传感器触发时实现太阳翼展开的功能。
2. 电子硬件
在这个示例中,我们采用了以下硬件,请大家参考:
概述
/*------------------------------------------------------------------------------------ 版权说明: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-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); // 左太阳翼舵机连接到数字引脚 4 rightSolarPanel.attach(3); // 右太阳翼舵机连接到数字引脚 3 mast.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); } } } |
电路连接图如下所示:
3. 功能实现
编程环境:Arduino 1.8.19
下面提供一个实现行星探测车在行进过程中避障,并且当光强传感器触发时实现太阳翼展开功能的参考程序(sketch_sep12a.ino):
4. 扩展样机
本样机的底盘方案是【R255】号机构,如下图所示:
关于行星探测车的更多扩展案例可参考【R255】月球车底盘 。
5. 资料清单
序号 | 内容 |
1 | 程序源代码 |
2 | 样机3D文件 |
【整体打包】-【R261】行星探测车-概述-资料附件.rar | 2.31MB | 下载46次 | 下载 |
WiFi视频遥控
1. 功能描述
本文示例所实现的功能为:用手机APP,通过WiFi通信遥控R261样机行星探测车移动,以及打开、关闭行星探测车太阳翼。
2. 电子硬件
在这个示例中,我们采用了以下硬件,请大家参考:
/*------------------------------------------------------------------------------------ 版权说明: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-09-22 https://www.robotway.com/ ------------------------------*/ void serialEvent() { static int i; static boolean revStart; while (Serial.available()) { //get data from wifi int inData = Serial.read(); if (inData == 0xff && !revStart) { revStart = true; } else if(revStart) { inputData[i] = inData; i++; if(i > 3) { if(inputData[3] == 0xff) { dataComplete = true; i = 0; revStart = false; } else { i = 0; revStart = false; } } } } } //小车主程序 void car_control(){ if(dataComplete){ dataComplete = false; //控制小车前,后,左,右 if(inputData[0] == 0x00) { if(inputData[1] != moveDirection){ moveDirection = inputData[1]; } }
else if(inputData[0] == 0x02){ if(inputData[1] == 0x01){ if(inputData[2] != DownDireciton){ DownDireciton = inputData[2];
if(DownDireciton == 0 && !isPanelDown){ expandSolarPanelsAndMast(); isPanelDown = true; } else if(DownDireciton == 10 && isPanelDown){ stopSolarPanelsAndMast(); isPanelDown = false; } } }
} Move(moveDirection); } else{ //小车自主控制部分 automatic_control(); } } |
3. 示例程序
编程环境:Arduino 1.8.19
下面提供一个实现WiFi视频遥控行星探测车移动以及打开、关闭行星探测车太阳翼功能的参考程序(Wifi_Control.ino):
4. 安卓手机APP配置及操作
① 将文末资料中的WIFIRobotV1.06.apk下载安装到手机上,并打开按以下参数进行设置。
② 打开手机wifi并连接GL-AR150-fxx(xx为随机数字与字母),密码:goodlife
③ 关闭软件(需清除后台应用)重新进入,点击“开始”,并开始操作。
④ 可看到如下所示界面按钮:前、后、左、右。
⑤ 点击“速度调整”:“左侧速度”为调整直流电机转速;“右侧速度”为打开、关闭行星探测车太阳翼。
⑥ 关闭“速度调整”,点击“重力感应”,通过调整手机角度可使行星探测车移动。
5. 资料清单
序号 | 内容 |
1 | 程序源代码 |
2 | WiFi无线路由器-安卓APK文件 |
【整体打包】——样机方案-【R261】行星探测车-WiFi视频遥控-资料附件.rar | 1.74MB | 下载14次 | 下载 |
云端控制
1. 功能描述
本文示例所实现的功能为:手机端控制R261样机行星探测车的显示屏显示心形图。
2. 电子硬件
在这个示例中,我们采用了以下硬件,请大家参考:
主控板 | |
MixGo(Esp32芯片)主控板 | |
扩展板 | |
通信 | |
电池 | 7.4V锂电池 |
其它 | 摄像头、安卓手机 |
import mixiot import onenet import time
def sub_cb(topic, msg): if msg == 'on'.encode("utf-8"): pass if msg == 'off'.encode("utf-8"): pass
mixiot.wlan_connect('robottime','aaronisfromcug') c = onenet.init_MQTT_client('521931891', '183.230.40.39', '201315', 'TqdRIdejslc0K6p==gYgoqtVLK0=', 'XBCRobot', sub_cb) while True: time.sleep_ms(500) c.check_msg() |
3. 功能实现
编程环境:Milxy 0.999及以上版本
下面提供一个手机端控制行星探测车显示屏显示心形图的参考程序【云端按钮_控制点阵屏(显示心-退出).mix】:
4. 行星探测车远程通信使用说明
① 用USB线将MixGo(Esp32芯片)主控板与电脑连接(若电脑无法识别,可以使用驱动精灵解决)。
② 用Mixly软件打开.mix程序(如下图所示),选择版型和端口号。
③ 手机打开热点,热点的名称不要含中文字符,并让手机和电脑都连接此热点。
④ 修改程序第一行的WiFi名称和密码,使它与热点相同。
⑤ 然后将程序上传到控制板中。
⑥ 若上传不成功,按一下板子上的BOOT键,选择“初始化固件”,等初始化固件完成后再进行上传。
⑦ 程序上传成功后,会看到MixGo屏幕显示信息。此时可以将USB线拔掉,插一个充电宝给MixGo(Esp32芯片)主控板供电。
⑧ 自行下载安装下图中的APP到安卓手机内,并登陆账号。
⑨ 选择“云控分析智能月球车”。
⑩ 点击on按钮,进行远程通信。
5. 资料清单
序号 | 内容 |
1 | 程序源代码 |
【整体打包】-【R261】行星探测车-云端控制-资料附件.rar | 2.76KB | 下载4次 | 下载 |
|