23 if (uavcan_msg.cmd.size() > 0 && uavcan_msg.cmd.size() <= 20) {
24 sensor_msgs::Joy ros_msg;
26 for (
auto cmd : uavcan_msg.cmd) {
28 ros_msg.axes.push_back(cmd / 8091.0);
30 ros_msg.axes.push_back(cmd / 8092.0);
41 ros_msg_.orientation.x = uavcan_msg.orientation_xyzw[0];
42 ros_msg_.orientation.y = uavcan_msg.orientation_xyzw[1];
43 ros_msg_.orientation.z = uavcan_msg.orientation_xyzw[2];
44 ros_msg_.orientation.w = uavcan_msg.orientation_xyzw[3];
46 ros_msg_.angular_velocity.x = uavcan_msg.angular_velocity[0];
47 ros_msg_.angular_velocity.y = uavcan_msg.angular_velocity[1];
48 ros_msg_.angular_velocity.z = uavcan_msg.angular_velocity[2];
50 ros_msg_.linear_acceleration.x = uavcan_msg.linear_acceleration[0];
51 ros_msg_.linear_acceleration.y = uavcan_msg.linear_acceleration[1];
52 ros_msg_.linear_acceleration.z = uavcan_msg.linear_acceleration[2];
60 if (uavcan_msg.cmd.size() != 0) {
61 for (
auto raw_cmd : uavcan_msg.cmd) {
72 ros_msg_.header.frame_id = std::to_string(uavcan_msg.circuit_id);
73 ros_msg_.voltage = uavcan_msg.voltage;
74 ros_msg_.current = uavcan_msg.current;
80 ros_msg_.temperature = uavcan_msg.temperature;
81 ros_msg_.voltage = uavcan_msg.voltage;
82 ros_msg_.current = uavcan_msg.current;
85 ros_msg_.count = uavcan_msg.esc_index;
91 out_uavcan_msg_.static_pressure = in_ros_msg->data;
92 out_uavcan_msg_.static_pressure_variance = 1;
98 out_uavcan_msg_.static_temperature = in_ros_msg->data;
99 out_uavcan_msg_.static_temperature_variance = 1;
105 out_uavcan_msg_.static_air_temperature = _temperature.out_uavcan_msg_.static_temperature;
106 out_uavcan_msg_.static_pressure = _pressure.out_uavcan_msg_.static_pressure;
107 out_uavcan_msg_.differential_pressure = in_ros_msg->data;
113 out_uavcan_msg_.latitude_deg_1e8 = in_ros_msg->latitude * 1e8;
114 out_uavcan_msg_.longitude_deg_1e8 = in_ros_msg->longitude * 1e8;
115 out_uavcan_msg_.height_msl_mm = in_ros_msg->altitude * 1e3;
120 out_uavcan_msg_.ned_velocity[0] = in_ros_msg->linear.x;
121 out_uavcan_msg_.ned_velocity[1] = in_ros_msg->linear.y;
122 out_uavcan_msg_.ned_velocity[2] = in_ros_msg->linear.z;
127 out_uavcan_msg_.rate_gyro_latest[0] = in_ros_msg->angular_velocity.x;
128 out_uavcan_msg_.rate_gyro_latest[1] = in_ros_msg->angular_velocity.y;
129 out_uavcan_msg_.rate_gyro_latest[2] = in_ros_msg->angular_velocity.z;
131 out_uavcan_msg_.accelerometer_latest[0] = in_ros_msg->linear_acceleration.x;
132 out_uavcan_msg_.accelerometer_latest[1] = in_ros_msg->linear_acceleration.y;
133 out_uavcan_msg_.accelerometer_latest[2] = in_ros_msg->linear_acceleration.z;
140 out_uavcan_msg_.magnetic_field_ga[0] = in_ros_msg->magnetic_field.x;
141 out_uavcan_msg_.magnetic_field_ga[1] = in_ros_msg->magnetic_field.y;
142 out_uavcan_msg_.magnetic_field_ga[2] = in_ros_msg->magnetic_field.z;
147 out_uavcan_msg_.error_count = 0;
148 out_uavcan_msg_.voltage = in_ros_msg->voltage;
149 out_uavcan_msg_.current = in_ros_msg->current;
150 out_uavcan_msg_.temperature = in_ros_msg->temperature;
151 out_uavcan_msg_.rpm = in_ros_msg->rpm;
152 out_uavcan_msg_.power_rating_pct = 0;
153 out_uavcan_msg_.esc_index = in_ros_msg->count;
158 out_uavcan_msg_.engine_speed_rpm = in_ros_msg->rpm;
163 out_uavcan_msg_.state = in_ros_msg.data;
168 out_uavcan_msg_.available_fuel_volume_percent = in_ros_msg->data;
174 out_uavcan_msg_.voltage = in_ros_msg->voltage;
175 out_uavcan_msg_.current = in_ros_msg->current;
176 out_uavcan_msg_.full_charge_capacity_wh = in_ros_msg->design_capacity;
177 out_uavcan_msg_.state_of_charge_pct = in_ros_msg->percentage * 100;
178 out_uavcan_msg_.status_flags = 1;
179 out_uavcan_msg_.model_instance_id = 1;
180 out_uavcan_msg_.temperature = 300;
183 out_uavcan_msg_.remaining_capacity_wh = in_ros_msg->capacity;
184 out_uavcan_msg_.average_power_10sec = 0;
185 out_uavcan_msg_.hours_to_full_charge = 0;
186 out_uavcan_msg_.state_of_health_pct = 127;
187 out_uavcan_msg_.state_of_charge_pct_stdev = 0;
188 out_uavcan_msg_.battery_id = 0;
189 out_uavcan_msg_.model_name =
"simulated_battery";
197 const char* ros_topic) {
198 std::unique_ptr<Converter> converter(
nullptr);
199 if (converter_name.compare(
"ActuatorsUavcanToRos") == 0) {
200 converter = std::unique_ptr<Converter>(
new ActuatorsUavcanToRos(ros_node, uavcan_node, ros_topic));
201 }
else if (converter_name.compare(
"AhrsSolutionUavcanToRos") == 0) {
203 }
else if (converter_name.compare(
"ArmUavcanToRos") == 0) {
204 converter = std::unique_ptr<Converter>(
new ArmUavcanToRos(ros_node, uavcan_node, ros_topic));
205 }
else if (converter_name.compare(
"CircuitStatusUavcanToRos") == 0) {
207 }
else if (converter_name.compare(
"EscStatusUavcanToRos") == 0) {
208 converter = std::unique_ptr<Converter>(
new EscStatusUavcanToRos(ros_node, uavcan_node, ros_topic));
209 }
else if (converter_name.compare(
"BaroStaticPressureRosToUavcan") == 0) {
211 }
else if (converter_name.compare(
"BaroStaticTemperatureRosToUavcan") == 0) {
213 }
else if (converter_name.compare(
"DiffPressureRosToUavcan") == 0) {
215 }
else if (converter_name.compare(
"GpsRosToUavcan") == 0) {
216 converter = std::unique_ptr<Converter>(
new GpsRosToUavcan(ros_node, uavcan_node, ros_topic));
217 }
else if (converter_name.compare(
"ImuRosToUavcan") == 0) {
218 converter = std::unique_ptr<Converter>(
new ImuRosToUavcan(ros_node, uavcan_node, ros_topic));
219 }
else if (converter_name.compare(
"MagnetometerRosToUavcan") == 0) {
221 }
else if (converter_name.compare(
"EscStatusRosToUavcan") == 0) {
222 converter = std::unique_ptr<Converter>(
new EscStatusRosToUavcan(ros_node, uavcan_node, ros_topic));
223 }
else if (converter_name.compare(
"IceReciprocatingStatusRosToUavcan") == 0) {
225 }
else if (converter_name.compare(
"IceFuelTankStatusRosToUavcan") == 0) {
227 }
else if (converter_name.compare(
"BatteryInfoRosToUavcan") == 0) {
230 std::cout <<
"ERROR: instantiate_converter, wrong converter name" << std::endl;
void ros_callback(IN_ROS_MSG_PTR in_ros_msg) override
std::unique_ptr< Converter > instantiate_converter(std::string converter_name, ros::NodeHandle &ros_node, UavcanNode &uavcan_node, const char *ros_topic)
void ros_callback(IN_ROS_MSG_PTR in_ros_msg) override
void ros_callback(IN_ROS_MSG_PTR in_ros_msg) override
void uavcan_callback(const uavcan::ReceivedDataStructure< IN_UAVCAN_MSG > &uavcan_msg) override
void publish(const boost::shared_ptr< M > &message) const
void uavcan_callback(const uavcan::ReceivedDataStructure< IN_UAVCAN_MSG > &uavcan_msg) override
void ros_callback(IN_ROS_MSG_PTR in_ros_msg) override
ActuatorsUavcanToRos(ros::NodeHandle &ros_node, UavcanNode &uavcan_node, const char *ros_topic)
void ros_callback(IN_ROS_MSG_PTR in_ros_msg) override
void ros_callback(IN_ROS_MSG_PTR in_ros_msg) override
void ros_callback(IN_ROS_MSG_PTR in_ros_msg) override
void uavcan_callback(const uavcan::ReceivedDataStructure< IN_UAVCAN_MSG > &uavcan_msg) override
void uavcan_callback(const uavcan::ReceivedDataStructure< IN_UAVCAN_MSG > &uavcan_msg) override
void ros_callback(IN_ROS_MSG_PTR in_ros_msg) override
void ros_callback(IN_ROS_MSG_PTR in_ros_msg) override
void ros_velocity_callback(geometry_msgs::Twist::Ptr in_ros_msg)
void ros_callback(IN_ROS_MSG_PTR in_ros_msg) override
void ros_status_callback(std_msgs::UInt8 in_ros_msg)