19 #ifndef SRC_UAVCAN_COMMUNICATOR_CONVERTERS_HPP_ 20 #define SRC_UAVCAN_COMMUNICATOR_CONVERTERS_HPP_ 23 #include <sensor_msgs/Imu.h> 24 #include <sensor_msgs/NavSatFix.h> 25 #include <sensor_msgs/Joy.h> 26 #include <sensor_msgs/MagneticField.h> 27 #include <sensor_msgs/BatteryState.h> 28 #include <std_msgs/Bool.h> 29 #include <std_msgs/UInt8.h> 30 #include <std_msgs/Float32.h> 31 #include <geometry_msgs/Twist.h> 32 #include <mavros_msgs/BatteryStatus.h> 33 #include <mavros_msgs/ESCTelemetryItem.h> 34 #include <mavros_msgs/ESCStatusItem.h> 41 #include <uavcan/equipment/ahrs/MagneticFieldStrength.hpp> 42 #include <uavcan/equipment/ahrs/RawIMU.hpp> 43 #include <uavcan/equipment/ahrs/Solution.hpp> 44 #include <uavcan/equipment/air_data/RawAirData.hpp> 45 #include <uavcan/equipment/air_data/StaticPressure.hpp> 46 #include <uavcan/equipment/air_data/StaticTemperature.hpp> 47 #include <uavcan/equipment/esc/RawCommand.hpp> 48 #include <uavcan/equipment/esc/Status.hpp> 49 #include <uavcan/equipment/gnss/Fix.hpp> 50 #include <uavcan/equipment/ice/FuelTankStatus.hpp> 51 #include <uavcan/equipment/ice/reciprocating/Status.hpp> 52 #include <uavcan/equipment/power/CircuitStatus.hpp> 53 #include <uavcan/equipment/power/BatteryInfo.hpp> 61 template<
typename IN_UAVCAN,
typename OUT_ROS>
72 uavcan_sub_(uavcan_node) {
73 ros_pub_ = ros_node.
advertise<OUT_ROS_MSG>(ros_topic, 5);
78 template<
typename IN_ROS,
typename OUT_UAVCAN>
92 virtual void ros_callback(IN_ROS_MSG_PTR in_ros_msg) = 0;
94 uavcan_pub_(uavcan_node), _name(name) {
99 if (enabled ==
false) {
102 int pub_res = uavcan_pub_.
broadcast(out_uavcan_msg_);
104 std::cerr << _name <<
" publication failure: " << pub_res << std::endl;
111 uavcan::equipment::esc::RawCommand,
120 uavcan::equipment::ahrs::Solution,
130 uavcan::equipment::esc::RawCommand,
141 uavcan::equipment::esc::Status,
142 mavros_msgs::ESCTelemetryItem> {
152 uavcan::equipment::power::CircuitStatus,
153 mavros_msgs::BatteryStatus> {
164 uavcan::equipment::air_data::StaticPressure> {
165 void ros_callback(IN_ROS_MSG_PTR in_ros_msg)
override;
174 uavcan::equipment::air_data::StaticTemperature> {
175 void ros_callback(IN_ROS_MSG_PTR in_ros_msg)
override;
184 uavcan::equipment::air_data::RawAirData> {
185 void ros_callback(IN_ROS_MSG_PTR in_ros_msg)
override;
191 _pressure(ros_node, uavcan_node,
"/uav/static_pressure"),
192 _temperature(ros_node, uavcan_node,
"/uav/static_temperature") {
200 sensor_msgs::NavSatFix,
201 uavcan::equipment::gnss::Fix> {
202 void ros_callback(IN_ROS_MSG_PTR in_ros_msg)
override;
203 void ros_velocity_callback(geometry_msgs::Twist::Ptr in_ros_msg);
209 out_uavcan_msg_.sats_used = 10.0;
210 out_uavcan_msg_.status = 3;
211 out_uavcan_msg_.pdop = 1.0;
218 uavcan::equipment::ahrs::RawIMU> {
219 void ros_callback(IN_ROS_MSG_PTR in_ros_msg)
override;
227 sensor_msgs::MagneticField,
228 uavcan::equipment::ahrs::MagneticFieldStrength> {
229 void ros_callback(IN_ROS_MSG_PTR in_ros_msg)
override;
236 mavros_msgs::ESCTelemetryItem,
237 uavcan::equipment::esc::Status> {
238 void ros_callback(IN_ROS_MSG_PTR in_ros_msg)
override;
246 mavros_msgs::ESCStatusItem,
247 uavcan::equipment::ice::reciprocating::Status> {
248 void ros_callback(IN_ROS_MSG_PTR in_ros_msg)
override;
249 void ros_status_callback(std_msgs::UInt8 in_ros_msg);
260 uavcan::equipment::ice::FuelTankStatus> {
261 void ros_callback(IN_ROS_MSG_PTR in_ros_msg)
override;
269 sensor_msgs::BatteryState,
270 uavcan::equipment::power::BatteryInfo> {
271 void ros_callback(IN_ROS_MSG_PTR in_ros_msg)
override;
282 const char* ros_topic);
284 #endif // SRC_UAVCAN_COMMUNICATOR_CONVERTERS_HPP_
MagnetometerRosToUavcan(ros::NodeHandle &ros_node, UavcanNode &uavcan_node, const char *ros_topic)
OUT_UAVCAN_MSG out_uavcan_msg_
GpsRosToUavcan(ros::NodeHandle &ros_node, UavcanNode &uavcan_node, const char *ros_topic)
BaroStaticPressureRosToUavcan _pressure
IN_ROS::Ptr IN_ROS_MSG_PTR
Subscriber subscribe(const std::string &topic, uint32_t queue_size, void(T::*fp)(M), T *obj, const TransportHints &transport_hints=TransportHints())
OUT_UAVCAN OUT_UAVCAN_MSG
BaroStaticPressureRosToUavcan(ros::NodeHandle &ros_node, UavcanNode &uavcan_node, const char *ros_topic)
DiffPressureRosToUavcan(ros::NodeHandle &ros_node, UavcanNode &uavcan_node, const char *ros_topic)
CircuitStatusUavcanToRos(ros::NodeHandle &ros_node, UavcanNode &uavcan_node, const char *ros_topic)
IceFuelTankStatusRosToUavcan(ros::NodeHandle &ros_node, UavcanNode &uavcan_node, const char *ros_topic)
BaroStaticTemperatureRosToUavcan(ros::NodeHandle &ros_node, UavcanNode &uavcan_node, const char *ros_topic)
ros::Subscriber ros_status_sub_
uavcan::Subscriber< IN_UAVCAN_MSG > uavcan_sub_
constexpr unsigned NodeMemoryPoolSize
virtual void uavcan_callback(const uavcan::ReceivedDataStructure< IN_UAVCAN_MSG > &uavcan_msg)=0
UavcanToRosConverter(ros::NodeHandle &ros_node, UavcanNode &uavcan_node, const char *ros_topic)
EscStatusRosToUavcan(ros::NodeHandle &ros_node, UavcanNode &uavcan_node, const char *ros_topic)
uavcan::Publisher< OUT_UAVCAN_MSG > uavcan_pub_
ArmUavcanToRos(ros::NodeHandle &ros_node, UavcanNode &uavcan_node, const char *ros_topic)
EscStatusUavcanToRos(ros::NodeHandle &ros_node, UavcanNode &uavcan_node, const char *ros_topic)
RosToUavcanConverter(ros::NodeHandle &ros_node, UavcanNode &uavcan_node, const char *ros_topic, std::string name)
virtual void ros_callback(IN_ROS_MSG_PTR in_ros_msg)=0
ActuatorsUavcanToRos(ros::NodeHandle &ros_node, UavcanNode &uavcan_node, const char *ros_topic)
uavcan::Node< NodeMemoryPoolSize > UavcanNode
Publisher advertise(const std::string &topic, uint32_t queue_size, bool latch=false)
ros::Subscriber ros_velocity_sub_
int start(const Callback &callback)
BatteryInfoRosToUavcan(ros::NodeHandle &ros_node, UavcanNode &uavcan_node, const char *ros_topic)
BaroStaticTemperatureRosToUavcan _temperature
void ros_velocity_callback(geometry_msgs::Twist::Ptr in_ros_msg)
std::unique_ptr< Converter > instantiate_converter(std::string converter_name, ros::NodeHandle &ros_node, UavcanNode &uavcan_node, const char *ros_topic)
ImuRosToUavcan(ros::NodeHandle &ros_node, UavcanNode &uavcan_node, const char *ros_topic)
IceReciprocatingStatusRosToUavcan(ros::NodeHandle &ros_node, UavcanNode &uavcan_node, const char *ros_topic)
void ros_status_callback(std_msgs::UInt8 in_ros_msg)
int broadcast(const DataType &message)