Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed X_NUCLEO_PLC01A1 ros_lib_melodic
uv_robot.cpp@3:ea5cfd721b53, 2020-08-30 (annotated)
- Committer:
- yamadola
- Date:
- Sun Aug 30 06:39:43 2020 +0000
- Revision:
- 3:ea5cfd721b53
- Parent:
- 2:72761505a690
This code includes all functions for Amabie.; However, I have never debugged it with the real body.
Who changed what in which revision?
| User | Revision | Line number | New contents of line | 
|---|---|---|---|
| yamadola | 0:43eb9ccc1583 | 1 | #include "uv_robot.h" | 
| yamadola | 0:43eb9ccc1583 | 2 | |
| yamadola | 1:ef4b86795d79 | 3 | UVRobot::UVRobot():_can(),_plc(),_rs485(), | 
| yamadola | 1:ef4b86795d79 | 4 | _wheel(&_can, &_plc), _topLamp(2, 0x01, &_plc, &_rs485), _bottomLamp(3, &_plc), _footLamp(4, &_plc), | 
| yamadola | 1:ef4b86795d79 | 5 | _enable(enablePin, &_plc), _error(errorSigPin, &_plc), _emgSW(emgSigPin, &_plc){} | 
| yamadola | 1:ef4b86795d79 | 6 | |
| yamadola | 0:43eb9ccc1583 | 7 | enum state UVRobot::getState(){ | 
| yamadola | 0:43eb9ccc1583 | 8 | return _robotState; | 
| yamadola | 0:43eb9ccc1583 | 9 | } | 
| yamadola | 0:43eb9ccc1583 | 10 | |
| yamadola | 0:43eb9ccc1583 | 11 | void UVRobot::setState( enum state robotState ){ | 
| yamadola | 0:43eb9ccc1583 | 12 | _robotState = robotState; | 
| yamadola | 0:43eb9ccc1583 | 13 | } | 
| yamadola | 0:43eb9ccc1583 | 14 | |
| yamadola | 0:43eb9ccc1583 | 15 | void UVRobot::init(){ | 
| yamadola | 0:43eb9ccc1583 | 16 | setState( Init ); | 
| yamadola | 3:ea5cfd721b53 | 17 | _enable = 0; | 
| yamadola | 1:ef4b86795d79 | 18 | _error = 0; | 
| yamadola | 1:ef4b86795d79 | 19 | _wheel.init(); | 
| yamadola | 1:ef4b86795d79 | 20 | _topLamp.init(); | 
| yamadola | 1:ef4b86795d79 | 21 | _bottomLamp.init(); | 
| yamadola | 1:ef4b86795d79 | 22 | _footLamp.init(); | 
| yamadola | 0:43eb9ccc1583 | 23 | setState( Idle ); | 
| yamadola | 0:43eb9ccc1583 | 24 | } | 
| yamadola | 0:43eb9ccc1583 | 25 | |
| yamadola | 0:43eb9ccc1583 | 26 | void UVRobot::start(){ | 
| yamadola | 0:43eb9ccc1583 | 27 | _robotState = Run; | 
| yamadola | 1:ef4b86795d79 | 28 | std_msgs::Bool sMsg; | 
| yamadola | 1:ef4b86795d79 | 29 | std_msgs::Float32MultiArray rMsg; | 
| yamadola | 3:ea5cfd721b53 | 30 | bool enFlag = 0; | 
| yamadola | 1:ef4b86795d79 | 31 | /* | 
| yamadola | 1:ef4b86795d79 | 32 | * rMsg.data[0] : Right Wheel RPM | 
| yamadola | 1:ef4b86795d79 | 33 | * rMsg.data[1] : Left Wheel RPM | 
| yamadola | 1:ef4b86795d79 | 34 | * rMsg.data[2] : Top Lamp On/Off (On:1 Off:0) | 
| yamadola | 1:ef4b86795d79 | 35 | * rMsg.data[3] : Top Lamp Angle | 
| yamadola | 1:ef4b86795d79 | 36 | * rMsg.data[4] : Bottom Lamp On/Off (On:1 Off:0) | 
| yamadola | 1:ef4b86795d79 | 37 | * rMsg.data[5] : Foot Lamp On/Off (On:1 Off:0) | 
| yamadola | 3:ea5cfd721b53 | 38 | * rMsg.data[6] : State Signal (Stop:0 Run:1 Error:2 Reset:3) | 
| yamadola | 1:ef4b86795d79 | 39 | */ | 
| yamadola | 1:ef4b86795d79 | 40 | |
| yamadola | 1:ef4b86795d79 | 41 | while(1){ | 
| yamadola | 2:72761505a690 | 42 | |
| yamadola | 2:72761505a690 | 43 | _RosI._nh.spinOnce(); | 
| yamadola | 1:ef4b86795d79 | 44 | rMsg = _RosI.readMsg(); | 
| yamadola | 1:ef4b86795d79 | 45 | |
| yamadola | 3:ea5cfd721b53 | 46 | switch((int)rMsg.data[6]){ | 
| yamadola | 3:ea5cfd721b53 | 47 | case 0: | 
| yamadola | 3:ea5cfd721b53 | 48 | UVRobot::stop(); | 
| yamadola | 3:ea5cfd721b53 | 49 | enFlag = 0; | 
| yamadola | 3:ea5cfd721b53 | 50 | break; | 
| yamadola | 3:ea5cfd721b53 | 51 | |
| yamadola | 3:ea5cfd721b53 | 52 | case 1: | 
| yamadola | 3:ea5cfd721b53 | 53 | if(enFlag == 0){ _enable = 1; enFlag = 1; wait_ms(500);} | 
| yamadola | 3:ea5cfd721b53 | 54 | _wheel.setVelocity( rMsg.data[0], rMsg.data[1] ); | 
| yamadola | 3:ea5cfd721b53 | 55 | _topLamp.setUVPower( (uint8_t)rMsg.data[2] ); | 
| yamadola | 3:ea5cfd721b53 | 56 | _topLamp.setLightAngle( rMsg.data[3] ); | 
| yamadola | 3:ea5cfd721b53 | 57 | _bottomLamp.setUVPower( (uint8_t)rMsg.data[4] ); | 
| yamadola | 3:ea5cfd721b53 | 58 | _footLamp.setUVPower( (uint8_t)rMsg.data[5] ); | 
| yamadola | 1:ef4b86795d79 | 59 | |
| yamadola | 3:ea5cfd721b53 | 60 | _wheel.drive(); | 
| yamadola | 3:ea5cfd721b53 | 61 | _topLamp.drive(); | 
| yamadola | 3:ea5cfd721b53 | 62 | break; | 
| yamadola | 3:ea5cfd721b53 | 63 | |
| yamadola | 3:ea5cfd721b53 | 64 | case 2: | 
| yamadola | 3:ea5cfd721b53 | 65 | enFlag = 0; | 
| yamadola | 3:ea5cfd721b53 | 66 | UVRobot::error(); | 
| yamadola | 3:ea5cfd721b53 | 67 | break; | 
| yamadola | 3:ea5cfd721b53 | 68 | |
| yamadola | 3:ea5cfd721b53 | 69 | default: | 
| yamadola | 3:ea5cfd721b53 | 70 | enFlag = 0; | 
| yamadola | 3:ea5cfd721b53 | 71 | UVRobot::stop(); | 
| yamadola | 3:ea5cfd721b53 | 72 | break; | 
| yamadola | 3:ea5cfd721b53 | 73 | } | 
| yamadola | 3:ea5cfd721b53 | 74 | |
| yamadola | 2:72761505a690 | 75 | sMsg.data = _emgSW; | 
| yamadola | 1:ef4b86795d79 | 76 | _RosI.sendMsg(sMsg); | 
| yamadola | 3:ea5cfd721b53 | 77 | if( _emgSW || (_wheel.getBatteryVoltage() < 22.0) ){ | 
| yamadola | 1:ef4b86795d79 | 78 | UVRobot::error(); | 
| yamadola | 1:ef4b86795d79 | 79 | } | 
| yamadola | 3:ea5cfd721b53 | 80 | |
| yamadola | 3:ea5cfd721b53 | 81 | wait_ms(5); | 
| yamadola | 1:ef4b86795d79 | 82 | } | 
| yamadola | 0:43eb9ccc1583 | 83 | } | 
| yamadola | 0:43eb9ccc1583 | 84 | |
| yamadola | 0:43eb9ccc1583 | 85 | void UVRobot::stop(){ | 
| yamadola | 3:ea5cfd721b53 | 86 | _enable = 0; | 
| yamadola | 1:ef4b86795d79 | 87 | _wheel.stop(); | 
| yamadola | 1:ef4b86795d79 | 88 | _topLamp.stop(); | 
| yamadola | 1:ef4b86795d79 | 89 | _bottomLamp.setUVPower(0); | 
| yamadola | 1:ef4b86795d79 | 90 | _footLamp.setUVPower(0); | 
| yamadola | 1:ef4b86795d79 | 91 | } | 
| yamadola | 1:ef4b86795d79 | 92 | |
| yamadola | 1:ef4b86795d79 | 93 | void UVRobot::error(){ | 
| yamadola | 3:ea5cfd721b53 | 94 | std_msgs::Float32MultiArray rMsg; | 
| yamadola | 3:ea5cfd721b53 | 95 | while(1){ | 
| yamadola | 3:ea5cfd721b53 | 96 | _enable = 0; | 
| yamadola | 3:ea5cfd721b53 | 97 | _error = 1; | 
| yamadola | 3:ea5cfd721b53 | 98 | _wheel.brake(); | 
| yamadola | 3:ea5cfd721b53 | 99 | _topLamp.stop(); | 
| yamadola | 3:ea5cfd721b53 | 100 | _bottomLamp.setUVPower(0); | 
| yamadola | 3:ea5cfd721b53 | 101 | _footLamp.setUVPower(0); | 
| yamadola | 3:ea5cfd721b53 | 102 | _robotState = Error; | 
| yamadola | 3:ea5cfd721b53 | 103 | _RosI._nh.spinOnce(); | 
| yamadola | 3:ea5cfd721b53 | 104 | rMsg = _RosI.readMsg(); | 
| yamadola | 3:ea5cfd721b53 | 105 | if(rMsg.data[6] == 3){ break; } | 
| yamadola | 3:ea5cfd721b53 | 106 | } | 
| yamadola | 0:43eb9ccc1583 | 107 | } |