Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP] Multicopter Controllers Muxing #14754

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -178,5 +178,6 @@
"workbench.statusBar.feedback.visible": false,
"yaml.schemas": {
"${workspaceRoot}/validation/module_schema.yaml": "${workspaceRoot}/src/modules/*/module.yaml"
}
},
"C_Cpp.errorSquiggles": "Disabled"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd like to see if we can keep them in certain circumstances.

}
1 change: 1 addition & 0 deletions msg/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ set(msg_files
mission_result.msg
mount_orientation.msg
multirotor_motor_limits.msg
mc_ctl_chain.msg
obstacle_distance.msg
offboard_control_mode.msg
onboard_computer_status.msg
Expand Down
20 changes: 20 additions & 0 deletions msg/mc_ctl_chain.msg
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Multicopter Control Chain: used to select which Position, Attitude or Rate controller will be used during the mission
# Paired with mavlink chain
uint64 timestamp;

uint8 MC_DISABLE_CONTROLLER = 0
uint8 MC_DEFAULT_CONTROLLER = 1

# Set of custom controllers
# Position controllers: 1xx
uint8 MC_POS_CUSTOM_CONTROLLER = 100

# Attitude controllers: 2xx
uint8 MC_POS_CUSTOM_CONTROLLER = 200

# Rate controllers: 3xx
uint8 MC_POS_CUSTOM_CONTROLLER = 300

uint8 pos_ctl;
uint8 att_ctl;
uint8 rate_ctl;
19 changes: 19 additions & 0 deletions src/modules/mavlink/mavlink_receiver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,10 @@ MavlinkReceiver::handle_message(mavlink_message_t *msg)
handle_message_set_mode(msg);
break;

case MAVLINK_MSG_ID_SET_MC_CONTROL_CHAIN: // TODO : create mavlink msg type
handle_message_set_mc_control_chain(msg):
break;

case MAVLINK_MSG_ID_ATT_POS_MOCAP:
handle_message_att_pos_mocap(msg);
break;
Expand Down Expand Up @@ -733,6 +737,21 @@ MavlinkReceiver::handle_message_set_mode(mavlink_message_t *msg)
_cmd_pub.publish(vcmd);
}

void
MavlinkReceiver::handle_message_set_mc_control_chain(mavlink_message_t *msg)
{
mavlink_mc_ctl_chain_t ctl_chain;
mavlink_msg_mc_ctl_chain_decode(msg, &ctl_chain);

mc_ctl_chain_s mcc{}; // TODO create structure

mcc.timestamp = hrt_absolute_time();
mcc.pos_ctl = ctl_chain.pos_ctl;
mcc.att_ctl = ctl_chain.att_ctl;
mcc.rate_ctl = ctl_chain.rate_ctl;

_mc_ctl_chain_pub.publish(mcc);
}
void
MavlinkReceiver::handle_message_distance_sensor(mavlink_message_t *msg)
{
Expand Down
5 changes: 4 additions & 1 deletion src/modules/mavlink/mavlink_receiver.h
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@
#include <uORB/topics/landing_target_pose.h>
#include <uORB/topics/log_message.h>
#include <uORB/topics/manual_control_setpoint.h>
#include <uORB/topics/mc_ctl_chain.h>
#include <uORB/topics/obstacle_distance.h>
#include <uORB/topics/offboard_control_mode.h>
#include <uORB/topics/onboard_computer_status.h>
Expand Down Expand Up @@ -164,6 +165,7 @@ class MavlinkReceiver : public ModuleParams
void handle_message_set_actuator_control_target(mavlink_message_t *msg);
void handle_message_set_attitude_target(mavlink_message_t *msg);
void handle_message_set_mode(mavlink_message_t *msg);
void handle_message_distance_sensor(mavlink_message_t *msg);
void handle_message_set_position_target_local_ned(mavlink_message_t *msg);
void handle_message_set_position_target_global_int(mavlink_message_t *msg);
void handle_message_statustext(mavlink_message_t *msg);
Expand Down Expand Up @@ -250,7 +252,7 @@ class MavlinkReceiver : public ModuleParams
uORB::Publication<vehicle_odometry_s> _mocap_odometry_pub{ORB_ID(vehicle_mocap_odometry)};
uORB::Publication<vehicle_odometry_s> _visual_odometry_pub{ORB_ID(vehicle_visual_odometry)};
uORB::Publication<vehicle_rates_setpoint_s> _rates_sp_pub{ORB_ID(vehicle_rates_setpoint)};
uORB::Publication<vehicle_trajectory_bezier_s> _trajectory_bezier_pub{ORB_ID(vehicle_trajectory_bezier)};
uORB::Publication<vehicle_trajectory_bezier_s> _trajectory_bezier_pub{ORB_ID(vehicle_trajectory_bezier)};
uORB::Publication<vehicle_trajectory_waypoint_s> _trajectory_waypoint_pub{ORB_ID(vehicle_trajectory_waypoint)};

// ORB publications (multi)
Expand All @@ -260,6 +262,7 @@ class MavlinkReceiver : public ModuleParams
uORB::PublicationMulti<manual_control_setpoint_s> _manual_pub{ORB_ID(manual_control_setpoint), ORB_PRIO_LOW};
uORB::PublicationMulti<ping_s> _ping_pub{ORB_ID(ping), ORB_PRIO_LOW};
uORB::PublicationMulti<radio_status_s> _radio_status_pub{ORB_ID(radio_status), ORB_PRIO_LOW};
uORB::PublicationMulti<mc_ctl_chain_s> _mc_ctl_chain_pub{ORB_ID(mc_ctl_chain), ORB_PRIO_LOW};

// ORB publications (queue length > 1)
uORB::PublicationQueued<gps_inject_data_s> _gps_inject_data_pub{ORB_ID(gps_inject_data)};
Expand Down
2 changes: 2 additions & 0 deletions src/modules/mc_att_control/mc_att_control_main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,8 @@ MulticopterAttitudeControl::MulticopterAttitudeControl(bool vtol) :
_v_att_sp.q_d[0] = 1.f;

parameters_updated();

// get desired control and mux it
}

MulticopterAttitudeControl::~MulticopterAttitudeControl()
Expand Down