sil_board.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2017 Daniel Koch, James Jackson and Gary Ellingson, BYU MAGICC Lab.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  *
8  * * Redistributions of source code must retain the above copyright notice, this
9  * list of conditions and the following disclaimer.
10  *
11  * * Redistributions in binary form must reproduce the above copyright notice,
12  * this list of conditions and the following disclaimer in the documentation
13  * and/or other materials provided with the distribution.
14  *
15  * * Neither the name of the copyright holder nor the names of its
16  * contributors may be used to endorse or promote products derived from
17  * this software without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
23  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29  * POSSIBILITY OF SUCH DAMAGE.
30  */
31 
32 #ifndef ROSFLIGHT_SIM_SIL_BOARD_H
33 #define ROSFLIGHT_SIM_SIL_BOARD_H
34 
35 #include <cmath>
36 #include <stddef.h>
37 #include <stdbool.h>
38 #include <stdint.h>
39 
40 #include <gazebo/common/common.hh>
41 #include <gazebo/common/Plugin.hh>
42 #include <gazebo/gazebo.hh>
43 #include <gazebo/physics/physics.hh>
44 
45 #include <ros/ros.h>
46 #include <rosflight_msgs/RCRaw.h>
47 
49 
51 
52 namespace rosflight_sim
53 {
54 
56 {
57 private:
59 
61 
62  double gyro_stdev_;
65 
66  double acc_stdev_;
69 
71  double baro_stdev_;
73 
75  double mag_stdev_;
77 
81 
82  double sonar_stdev_;
85 
89  double baro_bias_;
91 
92  std::default_random_engine random_generator_;
93  std::normal_distribution<double> normal_distribution_;
94  std::uniform_real_distribution<double> uniform_distribution_;
95 
98 
99  gazebo::physics::WorldPtr world_;
100  gazebo::physics::ModelPtr model_;
101  gazebo::physics::LinkPtr link_;
102 
105  rosflight_msgs::RCRaw latestRC_;
107 
108  std::string mav_type_;
109  int pwm_outputs_[14]; //assumes maximum of 14 channels
110 
111  // Time variables
112  double boot_time_;
115 
116  void RCCallback(const rosflight_msgs::RCRaw& msg);
117  bool motors_spinning();
118 
122  gazebo::common::Time last_time_;
123 
124 public:
125  SIL_Board();
126 
127  // setup
128  void init_board(void) override;
129  void board_reset(bool bootloader) override;
130 
131  // clock
132  uint32_t clock_millis() override;
133  uint64_t clock_micros() override;
134  void clock_delay(uint32_t milliseconds) override;
135 
136  // sensors
137  void sensors_init() override;
138  uint16_t num_sensor_errors(void) override;
139 
140  bool new_imu_data() override;
141  bool imu_read(float accel[3], float* temperature, float gyro[3], uint64_t* time_us) override;
142  void imu_not_responding_error() override;
143 
144  bool mag_present(void) override;
145  void mag_read(float mag[3]) override;
146  void mag_update(void) override {};
147 
148  bool baro_present(void) override;
149  void baro_read(float *pressure, float *temperature) override;
150  void baro_update(void) override {};
151 
152  bool diff_pressure_present(void) override;
153  void diff_pressure_read(float *diff_pressure, float *temperature) override;
154  void diff_pressure_update(void) override {};
155 
156  bool sonar_present(void) override;
157  float sonar_read(void) override;
158  void sonar_update(void) override {};
159 
160  // PWM
161  // TODO make these deal in normalized (-1 to 1 or 0 to 1) values (not pwm-specific)
162  void pwm_init(uint32_t refresh_rate, uint16_t idle_pwm) override;
163  void pwm_write(uint8_t channel, float value) override;
164  void pwm_disable(void) override;
165 
166  //RC
167  float rc_read(uint8_t channel) override;
168  void rc_init(rc_type_t rc_type) override;
169  bool rc_lost(void) override;
170 
171 
172  // non-volatile memory
173  void memory_init(void) override;
174  bool memory_read(void * dest, size_t len) override;
175  bool memory_write(const void * src, size_t len) override;
176 
177  // LEDs
178  void led0_on(void) override;
179  void led0_off(void) override;
180  void led0_toggle(void) override;
181 
182  void led1_on(void) override;
183  void led1_off(void) override;
184  void led1_toggle(void) override;
185 
186  //Backup Memory
187  bool has_backup_data(void) override;
189 
190  bool gnss_present() override;
191  void gnss_update() override;
192 
194  bool gnss_has_new_data() override;
196 
197  // Gazebo stuff
198  void gazebo_setup(gazebo::physics::LinkPtr link, gazebo::physics::WorldPtr world, gazebo::physics::ModelPtr model, ros::NodeHandle* nh, std::string mav_type);
199  inline const int* get_outputs() const { return pwm_outputs_; }
200 
201 };
202 
203 } // namespace rosflight_sim
204 
205 #endif // ROSFLIGHT_SIM_SIL_BOARD_H
gazebo::common::Time last_time_
Definition: sil_board.h:122
gazebo::physics::WorldPtr world_
Definition: sil_board.h:99
void baro_read(float *pressure, float *temperature) override
Definition: sil_board.cpp:293
bool gnss_has_new_data() override
float pressure
std::uniform_real_distribution< double > uniform_distribution_
Definition: sil_board.h:94
void clock_delay(uint32_t milliseconds) override
Definition: sil_board.cpp:147
bool memory_write(const void *src, size_t len) override
Definition: sil_board.cpp:435
void memory_init(void) override
Definition: sil_board.cpp:416
float temperature
bool diff_pressure_present(void) override
Definition: sil_board.cpp:317
gazebo::math::Vector3 GazeboVector
Definition: gz_compat.h:69
bool sonar_present(void) override
Definition: sil_board.cpp:345
GazeboVector prev_vel_3_
Definition: sil_board.h:121
void led1_off(void) override
Definition: sil_board.cpp:469
void mag_read(float mag[3]) override
Definition: sil_board.cpp:261
const int * get_outputs() const
Definition: sil_board.h:199
rosflight_firmware::GNSSData gnss_read() override
void mag_update(void) override
Definition: sil_board.h:146
bool rc_lost(void) override
Definition: sil_board.cpp:408
void sensors_init() override
Definition: sil_board.cpp:154
GazeboVector gyro_bias_
Definition: sil_board.h:86
bool gnss_present() override
rosflight_firmware::BackupData get_backup_data(void) override
Definition: sil_board.cpp:477
uint64_t next_imu_update_time_us_
Definition: sil_board.h:113
void sonar_update(void) override
Definition: sil_board.h:158
void gazebo_setup(gazebo::physics::LinkPtr link, gazebo::physics::WorldPtr world, gazebo::physics::ModelPtr model, ros::NodeHandle *nh, std::string mav_type)
Definition: sil_board.cpp:49
ros::Subscriber rc_sub_
Definition: sil_board.h:104
float sonar_read(void) override
Definition: sil_board.cpp:350
void led1_on(void) override
Definition: sil_board.cpp:468
GazeboVector prev_vel_2_
Definition: sil_board.h:120
void diff_pressure_read(float *diff_pressure, float *temperature) override
Definition: sil_board.cpp:325
void pwm_init(uint32_t refresh_rate, uint16_t idle_pwm) override
Definition: sil_board.cpp:368
void led0_on(void) override
Definition: sil_board.cpp:464
std::normal_distribution< double > normal_distribution_
Definition: sil_board.h:93
uint32_t clock_millis() override
Definition: sil_board.cpp:137
bool imu_read(float accel[3], float *temperature, float gyro[3], uint64_t *time_us) override
Definition: sil_board.cpp:191
rosflight_msgs::RCRaw latestRC_
Definition: sil_board.h:105
rosflight_firmware::GNSSRaw gnss_raw_read() override
GazeboVector acc_bias_
Definition: sil_board.h:87
void board_reset(bool bootloader) override
Definition: sil_board.cpp:131
gazebo::physics::LinkPtr link_
Definition: sil_board.h:101
void imu_not_responding_error() override
Definition: sil_board.cpp:256
bool new_imu_data() override
Definition: sil_board.cpp:177
double airspeed_bias_walk_stdev_
Definition: sil_board.h:78
void led1_toggle(void) override
Definition: sil_board.cpp:470
void RCCallback(const rosflight_msgs::RCRaw &msg)
Definition: sil_board.cpp:483
void gnss_update() override
void pwm_disable(void) override
Definition: sil_board.cpp:402
uint64_t clock_micros() override
Definition: sil_board.cpp:142
GazeboVector prev_vel_1_
Definition: sil_board.h:119
GazeboVector mag_bias_
Definition: sil_board.h:88
uint16_t num_sensor_errors(void) override
Definition: sil_board.cpp:172
GazeboVector gravity_
Definition: sil_board.h:96
void diff_pressure_update(void) override
Definition: sil_board.h:154
bool has_backup_data(void) override
Definition: sil_board.cpp:472
bool baro_present(void) override
Definition: sil_board.cpp:288
float rc_read(uint8_t channel) override
Definition: sil_board.cpp:384
void baro_update(void) override
Definition: sil_board.h:150
GazeboVector inertial_magnetic_field_
Definition: sil_board.h:58
bool mag_present(void) override
Definition: sil_board.cpp:283
std::default_random_engine random_generator_
Definition: sil_board.h:92
void init_board(void) override
Definition: sil_board.cpp:44
gazebo::physics::ModelPtr model_
Definition: sil_board.h:100
uint64_t imu_update_period_us_
Definition: sil_board.h:114
void rc_init(rc_type_t rc_type) override
Definition: sil_board.cpp:413
ros::NodeHandle * nh_
Definition: sil_board.h:103
void led0_off(void) override
Definition: sil_board.cpp:465
void led0_toggle(void) override
Definition: sil_board.cpp:466
void pwm_write(uint8_t channel, float value) override
Definition: sil_board.cpp:398
bool memory_read(void *dest, size_t len) override
Definition: sil_board.cpp:418


rosflight_sim
Author(s): James Jackson, Gary Ellingson, Daniel Koch
autogenerated on Wed Jul 3 2019 20:00:29