20 #include <sensor_msgs/Joy.h> 82 for (
size_t channel = 0; channel < 8; channel++) {
91 if (msg.axes.size() == 8) {
100 roll = (roll < 0) ? 0.5 : 1 - roll;
104 pitch = (pitch < 0) ? 0.0
f : pitch / 0.8
f;
108 yaw = (yaw < 0) ? 0.0
f : (1.0
f - yaw) / 0.7f;
125 if (msg.axes.size() == 8) {
126 if (msg.axes[4] < 0) {
129 msg.axes[5] = (msg.axes[5] >= 0) ? msg.axes[5] * 2.0f - 1.0f : 0.0f;
130 msg.axes[6] = (msg.axes[6] >= 0) ? msg.axes[6] * 2.0f - 1.0f : 0.0f;
131 msg.axes[7] = msg.axes[7] / 0.75f;
133 }
else if (msg.axes.size() == 4) {
134 msg.axes.push_back(0.5);
135 msg.axes.push_back(0.0);
136 msg.axes.push_back(0.0);
137 msg.axes.push_back(0.0);
145 for (
size_t channel = 0; channel < 4; channel++) {
154 if (msg.axes.size() >= 4) {
166 int main(
int argc,
char **argv){
167 ros::init(argc, argv,
"inno_vtol_reverse_mixer_node");
173 std::string airframe;
174 if(!node_handler.
getParam(
"airframe", airframe)){
175 ROS_ERROR(
"ReverseMixer: There is no `airframe` parameter.");
179 std::unique_ptr<BaseReverseMixer> reverseMixer;
180 if (airframe ==
"babyshark_standard_vtol") {
181 reverseMixer = std::make_unique<BabysharkReverseMixer>(node_handler);
182 }
else if (airframe ==
"inno_standard_vtol") {
183 reverseMixer = std::make_unique<InnoVtolReverseMixer>(node_handler);
184 }
else if (airframe ==
"iris") {
185 reverseMixer = std::make_unique<IrisReverseMixer>(node_handler);
187 ROS_ERROR(
"ReverseMixer: Wrong `/uav/sim_params/airframe` parameter.");
192 if (reverseMixer->init() == -1){
ros::Publisher mappedActuatorPub_
static constexpr char MAPPED_ACTUATOR_TOPIC[]
BabysharkReverseMixer(const ros::NodeHandle &nh)
virtual ~BaseReverseMixer()=default
int main(int argc, char **argv)
ROSCONSOLE_DECL void notifyLoggerLevelsChanged()
void rawActuatorsCallback(sensor_msgs::Joy msg) override
Subscriber subscribe(const std::string &topic, uint32_t queue_size, void(T::*fp)(M), T *obj, const TransportHints &transport_hints=TransportHints())
void rawActuatorsCallback(sensor_msgs::Joy msg) override
ROSCPP_DECL void init(int &argc, char **argv, const std::string &name, uint32_t options=0)
virtual void rawActuatorsCallback(sensor_msgs::Joy msg)=0
void publish(const boost::shared_ptr< M > &message) const
sensor_msgs::Joy mappedActuatorMsg_
void rawActuatorsCallback(sensor_msgs::Joy msg) override
bool getParam(const std::string &key, std::string &s) const
BaseReverseMixer(const ros::NodeHandle &nh)
Publisher advertise(const std::string &topic, uint32_t queue_size, bool latch=false)
IrisReverseMixer(const ros::NodeHandle &nh)
#define ROS_INFO_STREAM(args)
ros::Subscriber rawActuatorsSub_
ROSCPP_DECL void shutdown()
static constexpr char RAW_ACTUATOR_TOPIC[]
ROSCONSOLE_DECL bool set_logger_level(const std::string &name, levels::Level level)
#define ROSCONSOLE_DEFAULT_NAME