因为深受 造起来 的精神摧残的不能自拔,还有朋友怂恿+煽风点火,我做了一台我自己也不太满意的车! 因为部分借鉴了一本为《NASA火星漫游车大揭秘》封面好奇号火星车的结构
故起名为“火星车1号”。 一直都对标题党行为嗤之以鼻,呵呵,今天我也做了一回标题党,请原谅请原谅请原谅。。。。。。
好奇号的六个大轮子是最能体现它是一辆“车”的特征了,而每个轮子都具有驱动力,可谓是六轮全时驱动!前后两组轮子都可以进行360°全方位旋转,转向能力更是无与伦比。
并且具有独特的火星车特性:“摇臂+转向架”式的悬架系统,这种专门为六个轮子设计的悬挂系统能很好的保证六轮都能实时附着地面。同时还有0.65米的最小离地间隙,就越野通过性来说可比一般SUV屌多了。超强的越野性能保证能在火星凹凸不平的地面行驶无阻。
但是我造的这台车,起名为火星车1号,蛮不好意思的,因为火星车独有的超屌的:摇臂+转向架悬挂,在这台车上并没有体现出了。只体现出其中:每个轮子都具有独立的驱动力和每个轮子可以进行全方位旋转的转向能力这两点特性。
对于火星车,憧憬是这样的! 当然,设计是这样的! 然而,实际是这样的! 不要说它爆丑,它可是以功能性著称的一代原型。 为了给一个符合它身份的场景,我也是拼了,让桌面凌乱如火星表面,让它尽情在里面穿梭!
虽然有些颜值论者说它丑爆了,在此我只能呵呵了,它的目标是火星。。。。。。。。。。。。。 生命本应该充满希望的!
刚才偷偷吹了个牛!
接下来,介绍一下轮子单元
轮子单元清单:
3D打印支架X1 3D打印电机固定套X1
电子控制部分清单:
此车行走系统是由四个独立的轮子单元组成 但是它的通过性也是蛮强的。。。。有视频为证 https://www.tudou.com/programs/view/XWEJvP3DNfI/?lvt=95&resourceId=0_07_10_28
因为没钱,无法请专业人士制作,视频略显粗。。。。请原谅!
控制用的是DFRobot研发的通用蓝牙遥控器--走你 - 蓝牙4.0 控制器
控制逻辑:左边虚拟摇杆同时控制四个转向舵机的方向和驱动电机的转速与正反转
右边的左右按钮可用控制小车自转,左按钮控制向左自转,右按钮控制向右自转,右边上下按钮为扩展备用按钮,暂无定义。
如果同时按住左边虚拟摇杆和右边的左或右按钮,软件以右边按钮为优先控制。
感谢大乔(Angelo)奉献详细代码:
- #include <Metro.h>
- #include "GoBLE.h"
- #include <Servo.h>
-
-
- int LeftUpServoPin = 4;
- int RightUpServoPin = 5;
- int LeftDownServoPin = 6;
- int RightDownServoPin = 7;
-
- int LeftUpSpeedPin = 8;
- int RightUpSpeedPin = 9;
- int LeftDownSpeedPin = 10;
- int RightDownSpeedPin = 11;
-
-
- int joystickX, joystickY;
- int buttonState[6];
-
- Servo LeftUpServo;
- Servo RightUpServo;
- Servo LeftDownServo;
- Servo RightDownServo;
-
- Servo LeftUpSpeed;
- Servo RightUpSpeed;
- Servo LeftDownSpeed;
- Servo RightDownSpeed;
-
- int LeftUpServoBase = 85;
- int RightUpServoBase = 83;
- int LeftDownServoBase = 100;
- int RightDownServoBase = 96;
-
- int LeftUpSpeedBase = 106;
- int RightUpSpeedBase = 99;
- int LeftDownSpeedBase = 95;
- int RightDownSpeedBase = 99;
-
- void setup() {
- Goble.begin();
- Serial.begin(115200);
-
- LeftUpServo.attach(4);
- RightUpServo.attach(5);
- LeftDownServo.attach(6);
- RightDownServo.attach(7);
-
- LeftUpSpeed.attach(8);
- RightUpSpeed.attach(9);
- LeftDownSpeed.attach(10);
- RightDownSpeed.attach(11);
-
-
- LeftUpServo.write(LeftUpServoBase);
- RightUpServo.write(RightUpServoBase);
- LeftDownServo.write(LeftDownServoBase);
- RightDownServo.write(RightDownServoBase);
-
- LeftUpSpeed.write(LeftUpSpeedBase);
- RightUpSpeed.write(RightUpSpeedBase);
- LeftDownSpeed.write(LeftDownSpeedBase);
- RightDownSpeed.write(RightDownSpeedBase);
-
-
-
-
- }
-
- void updateSpeed(int theLeftUpSpeed, int theRightUpSpeed, int theLeftDownSpeed, int theRightDownSpeed)
- {
- LeftUpSpeed.write(LeftUpSpeedBase + theLeftUpSpeed);
- RightUpSpeed.write(RightUpSpeedBase + theRightUpSpeed);
- LeftDownSpeed.write(LeftDownSpeedBase - theLeftDownSpeed);
- RightDownSpeed.write(RightDownSpeedBase - theRightDownSpeed);
- }
-
- void updateServo(int theLeftUpServo, int theRightUpServo, int theLeftDownServo, int theRightDownServo)
- {
- LeftUpServo.write(LeftUpServoBase - theLeftUpServo);
- RightUpServo.write(RightUpServoBase - theRightUpServo);
- LeftDownServo.write(LeftDownServoBase - theLeftDownServo);
- RightDownServo.write(RightDownServoBase - theRightDownServo);
- }
-
- void loop() {
-
-
-
-
- if (Goble.available()) {
-
-
- if (Goble.readSwitchLeft()==PRESSED)
- {
- updateSpeed(-30, 30, -30, 30);
- updateServo(45, -45, -45, 45);
- }
- else if (Goble.readSwitchRight()==PRESSED)
- {
- updateSpeed(30, -30, 30, -30);
- updateServo(45, -45, -45, 45);
- }
- else {
-
-
- joystickX = Goble.readJoystickX() - 128;
- joystickY = Goble.readJoystickY() - 128;
-
- joystickX = constrain(joystickX, -128, 128);
- joystickY = constrain(joystickY, -128, 128);
-
- int theSpeed = sqrt(joystickX * joystickX + joystickY * joystickY) / 3;
- theSpeed = constrain(theSpeed, 0, 60);
-
- int degree = atan2 (joystickX, joystickY) / PI * 180;
-
- if (degree > 0)
- {
- updateSpeed(theSpeed, theSpeed, theSpeed, theSpeed);
- degree = 90 - degree;
- degree = constrain(degree, -60, 60);
- if (theSpeed)
- {
- updateServo(degree, degree, degree, degree);
- }
- }
- else
- {
- updateSpeed(-theSpeed, -theSpeed, -theSpeed, -theSpeed);
- degree = -degree - 90;
- degree = constrain(degree, -60, 60);
- if (theSpeed)
- {
- updateServo(degree, degree, degree, degree);
- }
- }
- }
- }
- }
复制代码
来膜拜吧:好奇号火星车任务全景演示
https://www.tudou.com/programs/view/INNhFvdMQYY/?resourceId=0_06_02_99
前天看了最近上映的《火星救援》老牛逼了,预告分享一下
如果有时间,做个缩小版的索杰纳如何?最大限度尊重原创的缩小版动态艺术品?
索杰纳是在火星上真正从事科学考察工作的第一台机器人车辆,它是一辆自主式的机器人车辆,同时又可从地面对它进行遥控。
|