Line data Source code
1 : /* 2 : This program is free software: you can redistribute it and/or modify 3 : it under the terms of the GNU General Public License as published by 4 : the Free Software Foundation, either version 3 of the License, or 5 : (at your option) any later version. 6 : 7 : This program is distributed in the hope that it will be useful, 8 : but WITHOUT ANY WARRANTY; without even the implied warranty of 9 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 : GNU General Public License for more details. 11 : 12 : You should have received a copy of the GNU General Public License 13 : along with this program. If not, see <http://www.gnu.org/licenses/>. 14 : */ 15 : /* 16 : simulator connection for ardupilot version of CRRCSim 17 : */ 18 : 19 : #pragma once 20 : 21 : #include "SIM_config.h" 22 : 23 : #if AP_SIM_CRRCSIM_ENABLED 24 : 25 : #include <AP_HAL/utility/Socket_native.h> 26 : 27 : #include "SIM_Aircraft.h" 28 : 29 : namespace SITL { 30 : 31 : /* 32 : a CRRCSim simulator 33 : */ 34 : class CRRCSim : public Aircraft { 35 : public: 36 : CRRCSim(const char *frame_str); 37 : 38 : /* update model by one time step */ 39 : void update(const struct sitl_input &input) override; 40 : 41 : /* static object creator */ 42 0 : static Aircraft *create(const char *frame_str) { 43 0 : return NEW_NOTHROW CRRCSim(frame_str); 44 : } 45 : 46 : private: 47 : /* 48 : packet sent to CRRCSim 49 : */ 50 : struct servo_packet { 51 : float roll_rate; 52 : float pitch_rate; 53 : float throttle; 54 : float yaw_rate; 55 : float col_pitch; 56 : }; 57 : 58 : /* 59 : reply packet sent from CRRCSim to ArduPilot 60 : */ 61 : struct fdm_packet { 62 : double timestamp; 63 : double latitude, longitude; 64 : double altitude; 65 : double heading; 66 : double speedN, speedE, speedD; 67 : double xAccel, yAccel, zAccel; 68 : double rollRate, pitchRate, yawRate; 69 : double roll, pitch, yaw; 70 : double airspeed; 71 : }; 72 : 73 : void send_servos_heli(const struct sitl_input &input); 74 : void send_servos_fixed_wing(const struct sitl_input &input); 75 : void recv_fdm(const struct sitl_input &input); 76 : void send_servos(const struct sitl_input &input); 77 : 78 : bool heli_servos; 79 : double last_timestamp; 80 : SocketAPM_native sock; 81 : }; 82 : 83 : } // namespace SITL 84 : 85 : #endif // AP_SIM_CRRCSIM_ENABLED