Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes | Static Private Attributes | List of all members
gazebo::GazeboMavlinkInterface Class Reference

#include <gazebo_mavlink_interface.h>

Inheritance diagram for gazebo::GazeboMavlinkInterface:
Inheritance graph
[legend]

Public Member Functions

 GazeboMavlinkInterface ()
 
void Publish ()
 
 ~GazeboMavlinkInterface ()
 

Protected Member Functions

void Load (physics::ModelPtr _model, sdf::ElementPtr _sdf)
 
void OnUpdate (const common::UpdateInfo &)
 

Private Member Functions

void close ()
 
void do_read ()
 
void do_write (bool check_tx_state)
 
void handle_control (double _dt)
 
void handle_message (mavlink_message_t *msg)
 
void ImuCallback (ImuPtr &imu_msg)
 
bool is_open ()
 
void LidarCallback (LidarPtr &lidar_msg)
 
void open ()
 
void OpticalFlowCallback (OpticalFlowPtr &opticalFlow_msg)
 
void parse_buffer (const boost::system::error_code &err, std::size_t bytes_t)
 
void pollForMAVLinkMessages (double _dt, uint32_t _timeoutMs)
 
void QueueThread ()
 
void send_mavlink_message (const mavlink_message_t *message, const int destination_port=0)
 

Private Attributes

int _fd
 
unsigned _rotor_count
 
socklen_t addrlen_
 
double alt_home = 488.0
 
unsigned int baudrate_
 
unsigned char buf_ [65535]
 
boost::thread callback_queue_thread_
 
std::string device_
 
physics::JointPtr elevator_joint_
 
common::PID elevator_pid_
 
struct pollfd fds [1]
 
physics::JointPtr gimbal_pitch_joint_
 
physics::JointPtr gimbal_roll_joint_
 
physics::JointPtr gimbal_yaw_joint_
 
ignition::math::Vector3d gravity_W_
 
std::string gztopic_ [kNOutMax]
 
bool hil_mode_
 
bool hil_state_level_
 
transport::SubscriberPtr imu_sub_
 
std::string imu_sub_topic_
 
double imu_update_interval_ = kDefaultImuInterval
 
int input_index_ [kNOutMax]
 
double input_offset_ [kNOutMax]
 
Eigen::VectorXd input_reference_
 
double input_scaling_ [kNOutMax]
 
boost::asio::io_service io_service_
 
std::thread io_thread_
 
transport::PublisherPtr joint_control_pub_ [kNOutMax]
 
std::string joint_control_type_ [kNOutMax]
 
std::vector< physics::JointPtr > joints_
 
common::Time last_actuator_time_
 
common::Time last_imu_time_
 
common::Time last_time_
 
double lat_rad_
 
physics::JointPtr left_elevon_joint_
 
common::PID left_elevon_pid_
 
transport::SubscriberPtr lidar_sub_
 
std::string lidar_sub_topic_
 
std::string link_name_
 
double lon_rad_
 
mavlink_message_t m_buffer_
 
mavlink_status_t m_status_
 
ignition::math::Vector3d mag_d_
 
transport::SubscriberPtr mav_control_sub_
 
in_addr_t mavlink_addr_
 
std::string mavlink_control_sub_topic_
 
int mavlink_udp_port_
 
physics::ModelPtr model_
 
transport::PublisherPtr motor_velocity_reference_pub_
 
std::string motor_velocity_reference_pub_topic_
 
std::recursive_mutex mutex_
 
struct sockaddr_in myaddr_
 The locally bound address. More...
 
std::string namespace_
 
transport::NodePtr node_handle_
 
double optflow_distance_
 
ignition::math::Vector3d optflow_gyro_ {}
 
transport::SubscriberPtr opticalFlow_sub_
 
std::string opticalFlow_sub_topic_
 
std::vector< common::PID > pids_
 
physics::JointPtr propeller_joint_
 
common::PID propeller_pid_
 
float protocol_version_
 
in_addr_t qgc_addr_
 
int qgc_udp_port_
 
std::default_random_engine rand_
 
std::normal_distribution< floatrandn_
 
bool received_first_reference_
 
physics::JointPtr right_elevon_joint_
 
common::PID right_elevon_pid_
 
std::array< uint8_t, MAX_SIZErx_buf_
 
boost::asio::serial_port serial_dev_
 
bool serial_enabled_
 
transport::SubscriberPtr sonar_sub_
 
struct sockaddr_in srcaddr_
 SITL instance. More...
 
std::atomic< bool > tx_in_progress_
 
std::deque< MsgBuffertx_q_
 
event::ConnectionPtr updateConnection_
 Pointer to the update event connection. More...
 
bool use_elevator_pid_
 
bool use_left_elevon_pid_
 
bool use_propeller_pid_
 
bool use_right_elevon_pid_
 
ignition::math::Vector3d velocity_prev_W_
 
physics::WorldPtr world_
 
double zero_position_armed_ [kNOutMax]
 
double zero_position_disarmed_ [kNOutMax]
 

Static Private Attributes

static const u_int32_t kMotorSpeedFlag = 1
 
static const size_t kNOutMax = 18u
 
static const size_t kNumMotors = 12u
 
static const size_t kNumServos = 6u
 
static const u_int32_t kServoPositionFlag = 2
 

Detailed Description

Definition at line 109 of file gazebo_mavlink_interface.h.

Constructor & Destructor Documentation

◆ GazeboMavlinkInterface()

gazebo::GazeboMavlinkInterface::GazeboMavlinkInterface ( )
inline

Definition at line 111 of file gazebo_mavlink_interface.h.

◆ ~GazeboMavlinkInterface()

gazebo::GazeboMavlinkInterface::~GazeboMavlinkInterface ( )

Definition at line 39 of file gazebo_mavlink_interface.cpp.

Member Function Documentation

◆ close()

void gazebo::GazeboMavlinkInterface::close ( )
private

Definition at line 774 of file gazebo_mavlink_interface.cpp.

◆ do_read()

void gazebo::GazeboMavlinkInterface::do_read ( void  )
private

Definition at line 786 of file gazebo_mavlink_interface.cpp.

◆ do_write()

void gazebo::GazeboMavlinkInterface::do_write ( bool  check_tx_state)
private

Definition at line 830 of file gazebo_mavlink_interface.cpp.

◆ handle_control()

void gazebo::GazeboMavlinkInterface::handle_control ( double  _dt)
private

really not ideal if your drone is moving at all, mixing kinematic updates with dynamics calculation is non-physical.

Definition at line 722 of file gazebo_mavlink_interface.cpp.

◆ handle_message()

void gazebo::GazeboMavlinkInterface::handle_message ( mavlink_message_t msg)
private

Definition at line 659 of file gazebo_mavlink_interface.cpp.

◆ ImuCallback()

void gazebo::GazeboMavlinkInterface::ImuCallback ( ImuPtr imu_msg)
private

Definition at line 407 of file gazebo_mavlink_interface.cpp.

◆ is_open()

bool gazebo::GazeboMavlinkInterface::is_open ( )
inlineprivate

Definition at line 218 of file gazebo_mavlink_interface.h.

◆ LidarCallback()

void gazebo::GazeboMavlinkInterface::LidarCallback ( LidarPtr lidar_msg)
private

Definition at line 579 of file gazebo_mavlink_interface.cpp.

◆ Load()

void gazebo::GazeboMavlinkInterface::Load ( physics::ModelPtr  _model,
sdf::ElementPtr  _sdf 
)
protected

Definition at line 43 of file gazebo_mavlink_interface.cpp.

◆ OnUpdate()

void gazebo::GazeboMavlinkInterface::OnUpdate ( const common::UpdateInfo &  )
protected

Definition at line 337 of file gazebo_mavlink_interface.cpp.

◆ open()

void gazebo::GazeboMavlinkInterface::open ( )
private

Definition at line 757 of file gazebo_mavlink_interface.cpp.

◆ OpticalFlowCallback()

void gazebo::GazeboMavlinkInterface::OpticalFlowCallback ( OpticalFlowPtr opticalFlow_msg)
private

Definition at line 599 of file gazebo_mavlink_interface.cpp.

◆ parse_buffer()

void gazebo::GazeboMavlinkInterface::parse_buffer ( const boost::system::error_code &  err,
std::size_t  bytes_t 
)
private

Definition at line 796 of file gazebo_mavlink_interface.cpp.

◆ pollForMAVLinkMessages()

void gazebo::GazeboMavlinkInterface::pollForMAVLinkMessages ( double  _dt,
uint32_t  _timeoutMs 
)
private

Definition at line 629 of file gazebo_mavlink_interface.cpp.

◆ Publish()

void gazebo::GazeboMavlinkInterface::Publish ( )

◆ QueueThread()

void gazebo::GazeboMavlinkInterface::QueueThread ( )
private

◆ send_mavlink_message()

void gazebo::GazeboMavlinkInterface::send_mavlink_message ( const mavlink_message_t message,
const int  destination_port = 0 
)
private

Definition at line 366 of file gazebo_mavlink_interface.cpp.

Member Data Documentation

◆ _fd

int gazebo::GazeboMavlinkInterface::_fd
private

Definition at line 269 of file gazebo_mavlink_interface.h.

◆ _rotor_count

unsigned gazebo::GazeboMavlinkInterface::_rotor_count
private

Definition at line 233 of file gazebo_mavlink_interface.h.

◆ addrlen_

socklen_t gazebo::GazeboMavlinkInterface::addrlen_
private

Definition at line 272 of file gazebo_mavlink_interface.h.

◆ alt_home

double gazebo::GazeboMavlinkInterface::alt_home = 488.0
private

Definition at line 231 of file gazebo_mavlink_interface.h.

◆ baudrate_

unsigned int gazebo::GazeboMavlinkInterface::baudrate_
private

Definition at line 294 of file gazebo_mavlink_interface.h.

◆ buf_

unsigned char gazebo::GazeboMavlinkInterface::buf_[65535]
private

Definition at line 273 of file gazebo_mavlink_interface.h.

◆ callback_queue_thread_

boost::thread gazebo::GazeboMavlinkInterface::callback_queue_thread_
private

Definition at line 202 of file gazebo_mavlink_interface.h.

◆ device_

std::string gazebo::GazeboMavlinkInterface::device_
private

Definition at line 291 of file gazebo_mavlink_interface.h.

◆ elevator_joint_

physics::JointPtr gazebo::GazeboMavlinkInterface::elevator_joint_
private

Definition at line 182 of file gazebo_mavlink_interface.h.

◆ elevator_pid_

common::PID gazebo::GazeboMavlinkInterface::elevator_pid_
private

Definition at line 188 of file gazebo_mavlink_interface.h.

◆ fds

struct pollfd gazebo::GazeboMavlinkInterface::fds[1]
private

Definition at line 274 of file gazebo_mavlink_interface.h.

◆ gimbal_pitch_joint_

physics::JointPtr gazebo::GazeboMavlinkInterface::gimbal_pitch_joint_
private

Definition at line 185 of file gazebo_mavlink_interface.h.

◆ gimbal_roll_joint_

physics::JointPtr gazebo::GazeboMavlinkInterface::gimbal_roll_joint_
private

Definition at line 186 of file gazebo_mavlink_interface.h.

◆ gimbal_yaw_joint_

physics::JointPtr gazebo::GazeboMavlinkInterface::gimbal_yaw_joint_
private

Definition at line 184 of file gazebo_mavlink_interface.h.

◆ gravity_W_

ignition::math::Vector3d gazebo::GazeboMavlinkInterface::gravity_W_
private

Definition at line 262 of file gazebo_mavlink_interface.h.

◆ gztopic_

std::string gazebo::GazeboMavlinkInterface::gztopic_[kNOutMax]
private

Definition at line 238 of file gazebo_mavlink_interface.h.

◆ hil_mode_

bool gazebo::GazeboMavlinkInterface::hil_mode_
private

Definition at line 300 of file gazebo_mavlink_interface.h.

◆ hil_state_level_

bool gazebo::GazeboMavlinkInterface::hil_state_level_
private

Definition at line 301 of file gazebo_mavlink_interface.h.

◆ imu_sub_

transport::SubscriberPtr gazebo::GazeboMavlinkInterface::imu_sub_
private

Definition at line 244 of file gazebo_mavlink_interface.h.

◆ imu_sub_topic_

std::string gazebo::GazeboMavlinkInterface::imu_sub_topic_
private

Definition at line 249 of file gazebo_mavlink_interface.h.

◆ imu_update_interval_

double gazebo::GazeboMavlinkInterface::imu_update_interval_ = kDefaultImuInterval
private

Definition at line 256 of file gazebo_mavlink_interface.h.

◆ input_index_

int gazebo::GazeboMavlinkInterface::input_index_[kNOutMax]
private

Definition at line 241 of file gazebo_mavlink_interface.h.

◆ input_offset_

double gazebo::GazeboMavlinkInterface::input_offset_[kNOutMax]
private

Definition at line 235 of file gazebo_mavlink_interface.h.

◆ input_reference_

Eigen::VectorXd gazebo::GazeboMavlinkInterface::input_reference_
private

Definition at line 165 of file gazebo_mavlink_interface.h.

◆ input_scaling_

double gazebo::GazeboMavlinkInterface::input_scaling_[kNOutMax]
private

Definition at line 236 of file gazebo_mavlink_interface.h.

◆ io_service_

boost::asio::io_service gazebo::GazeboMavlinkInterface::io_service_
private

Definition at line 297 of file gazebo_mavlink_interface.h.

◆ io_thread_

std::thread gazebo::GazeboMavlinkInterface::io_thread_
private

Definition at line 290 of file gazebo_mavlink_interface.h.

◆ joint_control_pub_

transport::PublisherPtr gazebo::GazeboMavlinkInterface::joint_control_pub_[kNOutMax]
private

Definition at line 242 of file gazebo_mavlink_interface.h.

◆ joint_control_type_

std::string gazebo::GazeboMavlinkInterface::joint_control_type_[kNOutMax]
private

Definition at line 237 of file gazebo_mavlink_interface.h.

◆ joints_

std::vector<physics::JointPtr> gazebo::GazeboMavlinkInterface::joints_
private

Definition at line 196 of file gazebo_mavlink_interface.h.

◆ kMotorSpeedFlag

const u_int32_t gazebo::GazeboMavlinkInterface::kMotorSpeedFlag = 1
staticprivate

Definition at line 228 of file gazebo_mavlink_interface.h.

◆ kNOutMax

const size_t gazebo::GazeboMavlinkInterface::kNOutMax = 18u
staticprivate

Definition at line 224 of file gazebo_mavlink_interface.h.

◆ kNumMotors

const size_t gazebo::GazeboMavlinkInterface::kNumMotors = 12u
staticprivate

Definition at line 225 of file gazebo_mavlink_interface.h.

◆ kNumServos

const size_t gazebo::GazeboMavlinkInterface::kNumServos = 6u
staticprivate

Definition at line 226 of file gazebo_mavlink_interface.h.

◆ kServoPositionFlag

const u_int32_t gazebo::GazeboMavlinkInterface::kServoPositionFlag = 2
staticprivate

Definition at line 229 of file gazebo_mavlink_interface.h.

◆ last_actuator_time_

common::Time gazebo::GazeboMavlinkInterface::last_actuator_time_
private

Definition at line 255 of file gazebo_mavlink_interface.h.

◆ last_imu_time_

common::Time gazebo::GazeboMavlinkInterface::last_imu_time_
private

Definition at line 254 of file gazebo_mavlink_interface.h.

◆ last_time_

common::Time gazebo::GazeboMavlinkInterface::last_time_
private

Definition at line 253 of file gazebo_mavlink_interface.h.

◆ lat_rad_

double gazebo::GazeboMavlinkInterface::lat_rad_
private

Definition at line 257 of file gazebo_mavlink_interface.h.

◆ left_elevon_joint_

physics::JointPtr gazebo::GazeboMavlinkInterface::left_elevon_joint_
private

Definition at line 180 of file gazebo_mavlink_interface.h.

◆ left_elevon_pid_

common::PID gazebo::GazeboMavlinkInterface::left_elevon_pid_
private

Definition at line 189 of file gazebo_mavlink_interface.h.

◆ lidar_sub_

transport::SubscriberPtr gazebo::GazeboMavlinkInterface::lidar_sub_
private

Definition at line 245 of file gazebo_mavlink_interface.h.

◆ lidar_sub_topic_

std::string gazebo::GazeboMavlinkInterface::lidar_sub_topic_
private

Definition at line 250 of file gazebo_mavlink_interface.h.

◆ link_name_

std::string gazebo::GazeboMavlinkInterface::link_name_
private

Definition at line 172 of file gazebo_mavlink_interface.h.

◆ lon_rad_

double gazebo::GazeboMavlinkInterface::lon_rad_
private

Definition at line 258 of file gazebo_mavlink_interface.h.

◆ m_buffer_

mavlink_message_t gazebo::GazeboMavlinkInterface::m_buffer_
private

Definition at line 288 of file gazebo_mavlink_interface.h.

◆ m_status_

mavlink_status_t gazebo::GazeboMavlinkInterface::m_status_
private

Definition at line 287 of file gazebo_mavlink_interface.h.

◆ mag_d_

ignition::math::Vector3d gazebo::GazeboMavlinkInterface::mag_d_
private

Definition at line 264 of file gazebo_mavlink_interface.h.

◆ mav_control_sub_

transport::SubscriberPtr gazebo::GazeboMavlinkInterface::mav_control_sub_
private

Definition at line 176 of file gazebo_mavlink_interface.h.

◆ mavlink_addr_

in_addr_t gazebo::GazeboMavlinkInterface::mavlink_addr_
private

Definition at line 280 of file gazebo_mavlink_interface.h.

◆ mavlink_control_sub_topic_

std::string gazebo::GazeboMavlinkInterface::mavlink_control_sub_topic_
private

Definition at line 171 of file gazebo_mavlink_interface.h.

◆ mavlink_udp_port_

int gazebo::GazeboMavlinkInterface::mavlink_udp_port_
private

Definition at line 281 of file gazebo_mavlink_interface.h.

◆ model_

physics::ModelPtr gazebo::GazeboMavlinkInterface::model_
private

Definition at line 178 of file gazebo_mavlink_interface.h.

◆ motor_velocity_reference_pub_

transport::PublisherPtr gazebo::GazeboMavlinkInterface::motor_velocity_reference_pub_
private

Definition at line 175 of file gazebo_mavlink_interface.h.

◆ motor_velocity_reference_pub_topic_

std::string gazebo::GazeboMavlinkInterface::motor_velocity_reference_pub_topic_
private

Definition at line 170 of file gazebo_mavlink_interface.h.

◆ mutex_

std::recursive_mutex gazebo::GazeboMavlinkInterface::mutex_
private

Definition at line 293 of file gazebo_mavlink_interface.h.

◆ myaddr_

struct sockaddr_in gazebo::GazeboMavlinkInterface::myaddr_
private

The locally bound address.

Definition at line 270 of file gazebo_mavlink_interface.h.

◆ namespace_

std::string gazebo::GazeboMavlinkInterface::namespace_
private

Definition at line 169 of file gazebo_mavlink_interface.h.

◆ node_handle_

transport::NodePtr gazebo::GazeboMavlinkInterface::node_handle_
private

Definition at line 174 of file gazebo_mavlink_interface.h.

◆ optflow_distance_

double gazebo::GazeboMavlinkInterface::optflow_distance_
private

Definition at line 278 of file gazebo_mavlink_interface.h.

◆ optflow_gyro_

ignition::math::Vector3d gazebo::GazeboMavlinkInterface::optflow_gyro_ {}
private

Definition at line 277 of file gazebo_mavlink_interface.h.

◆ opticalFlow_sub_

transport::SubscriberPtr gazebo::GazeboMavlinkInterface::opticalFlow_sub_
private

Definition at line 247 of file gazebo_mavlink_interface.h.

◆ opticalFlow_sub_topic_

std::string gazebo::GazeboMavlinkInterface::opticalFlow_sub_topic_
private

Definition at line 251 of file gazebo_mavlink_interface.h.

◆ pids_

std::vector<common::PID> gazebo::GazeboMavlinkInterface::pids_
private

Definition at line 197 of file gazebo_mavlink_interface.h.

◆ propeller_joint_

physics::JointPtr gazebo::GazeboMavlinkInterface::propeller_joint_
private

Definition at line 183 of file gazebo_mavlink_interface.h.

◆ propeller_pid_

common::PID gazebo::GazeboMavlinkInterface::propeller_pid_
private

Definition at line 187 of file gazebo_mavlink_interface.h.

◆ protocol_version_

float gazebo::GazeboMavlinkInterface::protocol_version_
private

Definition at line 167 of file gazebo_mavlink_interface.h.

◆ qgc_addr_

in_addr_t gazebo::GazeboMavlinkInterface::qgc_addr_
private

Definition at line 283 of file gazebo_mavlink_interface.h.

◆ qgc_udp_port_

int gazebo::GazeboMavlinkInterface::qgc_udp_port_
private

Definition at line 284 of file gazebo_mavlink_interface.h.

◆ rand_

std::default_random_engine gazebo::GazeboMavlinkInterface::rand_
private

Definition at line 266 of file gazebo_mavlink_interface.h.

◆ randn_

std::normal_distribution<float> gazebo::GazeboMavlinkInterface::randn_
private

Definition at line 267 of file gazebo_mavlink_interface.h.

◆ received_first_reference_

bool gazebo::GazeboMavlinkInterface::received_first_reference_
private

Definition at line 164 of file gazebo_mavlink_interface.h.

◆ right_elevon_joint_

physics::JointPtr gazebo::GazeboMavlinkInterface::right_elevon_joint_
private

Definition at line 181 of file gazebo_mavlink_interface.h.

◆ right_elevon_pid_

common::PID gazebo::GazeboMavlinkInterface::right_elevon_pid_
private

Definition at line 190 of file gazebo_mavlink_interface.h.

◆ rx_buf_

std::array<uint8_t, MAX_SIZE> gazebo::GazeboMavlinkInterface::rx_buf_
private

Definition at line 292 of file gazebo_mavlink_interface.h.

◆ serial_dev_

boost::asio::serial_port gazebo::GazeboMavlinkInterface::serial_dev_
private

Definition at line 298 of file gazebo_mavlink_interface.h.

◆ serial_enabled_

bool gazebo::GazeboMavlinkInterface::serial_enabled_
private

Definition at line 289 of file gazebo_mavlink_interface.h.

◆ sonar_sub_

transport::SubscriberPtr gazebo::GazeboMavlinkInterface::sonar_sub_
private

Definition at line 246 of file gazebo_mavlink_interface.h.

◆ srcaddr_

struct sockaddr_in gazebo::GazeboMavlinkInterface::srcaddr_
private

SITL instance.

Definition at line 271 of file gazebo_mavlink_interface.h.

◆ tx_in_progress_

std::atomic<bool> gazebo::GazeboMavlinkInterface::tx_in_progress_
private

Definition at line 295 of file gazebo_mavlink_interface.h.

◆ tx_q_

std::deque<MsgBuffer> gazebo::GazeboMavlinkInterface::tx_q_
private

Definition at line 296 of file gazebo_mavlink_interface.h.

◆ updateConnection_

event::ConnectionPtr gazebo::GazeboMavlinkInterface::updateConnection_
private

Pointer to the update event connection.

Definition at line 200 of file gazebo_mavlink_interface.h.

◆ use_elevator_pid_

bool gazebo::GazeboMavlinkInterface::use_elevator_pid_
private

Definition at line 192 of file gazebo_mavlink_interface.h.

◆ use_left_elevon_pid_

bool gazebo::GazeboMavlinkInterface::use_left_elevon_pid_
private

Definition at line 193 of file gazebo_mavlink_interface.h.

◆ use_propeller_pid_

bool gazebo::GazeboMavlinkInterface::use_propeller_pid_
private

Definition at line 191 of file gazebo_mavlink_interface.h.

◆ use_right_elevon_pid_

bool gazebo::GazeboMavlinkInterface::use_right_elevon_pid_
private

Definition at line 194 of file gazebo_mavlink_interface.h.

◆ velocity_prev_W_

ignition::math::Vector3d gazebo::GazeboMavlinkInterface::velocity_prev_W_
private

Definition at line 263 of file gazebo_mavlink_interface.h.

◆ world_

physics::WorldPtr gazebo::GazeboMavlinkInterface::world_
private

Definition at line 179 of file gazebo_mavlink_interface.h.

◆ zero_position_armed_

double gazebo::GazeboMavlinkInterface::zero_position_armed_[kNOutMax]
private

Definition at line 240 of file gazebo_mavlink_interface.h.

◆ zero_position_disarmed_

double gazebo::GazeboMavlinkInterface::zero_position_disarmed_[kNOutMax]
private

Definition at line 239 of file gazebo_mavlink_interface.h.


The documentation for this class was generated from the following files:


rotors_gazebo_plugins
Author(s): Fadri Furrer, Michael Burri, Mina Kamel, Janosch Nikolic, Markus Achtelik
autogenerated on Mon Feb 28 2022 23:39:04