forked from Archive/PX4-Autopilot
mavlink: more streams implemented, stack size returned to 2048
This commit is contained in:
parent
f9619e3934
commit
85dc422d98
|
@ -61,14 +61,6 @@
|
||||||
#include <drivers/device/device.h>
|
#include <drivers/device/device.h>
|
||||||
#include <drivers/drv_hrt.h>
|
#include <drivers/drv_hrt.h>
|
||||||
#include <arch/board/board.h>
|
#include <arch/board/board.h>
|
||||||
#include <uORB/uORB.h>
|
|
||||||
#include <uORB/topics/vehicle_global_position.h>
|
|
||||||
#include <uORB/topics/home_position.h>
|
|
||||||
#include <uORB/topics/vehicle_status.h>
|
|
||||||
#include <uORB/topics/position_setpoint_triplet.h>
|
|
||||||
#include <uORB/topics/parameter_update.h>
|
|
||||||
#include <uORB/topics/mission.h>
|
|
||||||
#include <uORB/topics/mission_result.h>
|
|
||||||
|
|
||||||
#include <systemlib/param/param.h>
|
#include <systemlib/param/param.h>
|
||||||
#include <systemlib/err.h>
|
#include <systemlib/err.h>
|
||||||
|
@ -79,6 +71,10 @@
|
||||||
#include <mathlib/mathlib.h>
|
#include <mathlib/mathlib.h>
|
||||||
#include <mavlink/mavlink_log.h>
|
#include <mavlink/mavlink_log.h>
|
||||||
|
|
||||||
|
#include <uORB/topics/parameter_update.h>
|
||||||
|
#include <uORB/topics/mission.h>
|
||||||
|
#include <uORB/topics/mission_result.h>
|
||||||
|
|
||||||
#include "mavlink_bridge_header.h"
|
#include "mavlink_bridge_header.h"
|
||||||
#include "mavlink_main.h"
|
#include "mavlink_main.h"
|
||||||
#include "mavlink_messages.h"
|
#include "mavlink_messages.h"
|
||||||
|
@ -1542,13 +1538,11 @@ Mavlink::task_main(int argc, char *argv[])
|
||||||
|
|
||||||
add_stream("HEARTBEAT", 1.0f);
|
add_stream("HEARTBEAT", 1.0f);
|
||||||
add_stream("SYS_STATUS", 1.0f);
|
add_stream("SYS_STATUS", 1.0f);
|
||||||
add_stream("HIGHRES_IMU", 20.0f);
|
add_stream("HIGHRES_IMU", 1.0f);
|
||||||
// add_stream("RAW_IMU", 10.0f);
|
add_stream("ATTITUDE", 10.0f);
|
||||||
add_stream("ATTITUDE", 20.0f);
|
add_stream("GPS_RAW_INT", 1.0f);
|
||||||
// add_stream("NAMED_VALUE_FLOAT", 5.0f);
|
add_stream("GLOBAL_POSITION_INT", 5.0f);
|
||||||
// add_stream("SERVO_OUTPUT_RAW", 2.0f);
|
add_stream("LOCAL_POSITION_NED", 5.0f);
|
||||||
// add_stream("GPS_RAW_INT", 2.0f);
|
|
||||||
// add_stream("MANUAL_CONTROL", 2.0f);
|
|
||||||
|
|
||||||
while (!_task_should_exit) {
|
while (!_task_should_exit) {
|
||||||
/* main loop */
|
/* main loop */
|
||||||
|
@ -1656,7 +1650,7 @@ Mavlink::start(int argc, char *argv[])
|
||||||
/*mavlink->_mavlink_task = */task_spawn_cmd(buf,
|
/*mavlink->_mavlink_task = */task_spawn_cmd(buf,
|
||||||
SCHED_DEFAULT,
|
SCHED_DEFAULT,
|
||||||
SCHED_PRIORITY_DEFAULT,
|
SCHED_PRIORITY_DEFAULT,
|
||||||
4096,
|
2048,
|
||||||
(main_t)&Mavlink::start_helper,
|
(main_t)&Mavlink::start_helper,
|
||||||
(const char **)argv);
|
(const char **)argv);
|
||||||
|
|
||||||
|
|
|
@ -6,12 +6,32 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <commander/px4_custom_mode.h>
|
#include <commander/px4_custom_mode.h>
|
||||||
|
#include <lib/geo/geo.h>
|
||||||
|
|
||||||
|
#include <uORB/uORB.h>
|
||||||
|
#include <uORB/topics/vehicle_global_position.h>
|
||||||
|
#include <uORB/topics/home_position.h>
|
||||||
#include <uORB/topics/vehicle_status.h>
|
#include <uORB/topics/vehicle_status.h>
|
||||||
#include <uORB/topics/position_setpoint_triplet.h>
|
#include <uORB/topics/position_setpoint_triplet.h>
|
||||||
|
#include <uORB/topics/vehicle_gps_position.h>
|
||||||
|
#include <uORB/topics/sensor_combined.h>
|
||||||
|
|
||||||
#include "mavlink_messages.h"
|
#include "mavlink_messages.h"
|
||||||
|
|
||||||
|
|
||||||
|
uint16_t
|
||||||
|
cm_uint16_from_m_float(float m)
|
||||||
|
{
|
||||||
|
if (m < 0.0f) {
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
} else if (m > 655.35f) {
|
||||||
|
return 65535;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (uint16_t)(m * 100.0f);
|
||||||
|
}
|
||||||
|
|
||||||
class MavlinkStreamHeartbeat : public MavlinkStream {
|
class MavlinkStreamHeartbeat : public MavlinkStream {
|
||||||
public:
|
public:
|
||||||
const char *get_name()
|
const char *get_name()
|
||||||
|
@ -279,11 +299,145 @@ protected:
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class MavlinkStreamGPSRawInt : public MavlinkStream {
|
||||||
|
public:
|
||||||
|
const char *get_name()
|
||||||
|
{
|
||||||
|
return "GPS_RAW_INT";
|
||||||
|
}
|
||||||
|
|
||||||
|
MavlinkStream *new_instance()
|
||||||
|
{
|
||||||
|
return new MavlinkStreamGPSRawInt();
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
MavlinkOrbSubscription *gps_sub;
|
||||||
|
|
||||||
|
struct vehicle_gps_position_s *gps;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
void subscribe(Mavlink *mavlink)
|
||||||
|
{
|
||||||
|
gps_sub = mavlink->add_orb_subscription(ORB_ID(vehicle_gps_position), sizeof(struct vehicle_gps_position_s));
|
||||||
|
gps = (struct vehicle_gps_position_s *)gps_sub->get_data();
|
||||||
|
}
|
||||||
|
|
||||||
|
void send(const hrt_abstime t) {
|
||||||
|
gps_sub->update(t);
|
||||||
|
|
||||||
|
mavlink_msg_gps_raw_int_send(_channel,
|
||||||
|
gps->timestamp_position,
|
||||||
|
gps->fix_type,
|
||||||
|
gps->lat,
|
||||||
|
gps->lon,
|
||||||
|
gps->alt,
|
||||||
|
cm_uint16_from_m_float(gps->eph_m),
|
||||||
|
cm_uint16_from_m_float(gps->epv_m),
|
||||||
|
gps->vel_m_s * 100.0f,
|
||||||
|
_wrap_2pi(gps->cog_rad) * M_RAD_TO_DEG_F * 1e2f,
|
||||||
|
gps->satellites_visible);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class MavlinkStreamGlobalPositionInt : public MavlinkStream {
|
||||||
|
public:
|
||||||
|
const char *get_name()
|
||||||
|
{
|
||||||
|
return "GLOBAL_POSITION_INT";
|
||||||
|
}
|
||||||
|
|
||||||
|
MavlinkStream *new_instance()
|
||||||
|
{
|
||||||
|
return new MavlinkStreamGlobalPositionInt();
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
MavlinkOrbSubscription *pos_sub;
|
||||||
|
MavlinkOrbSubscription *home_sub;
|
||||||
|
|
||||||
|
struct vehicle_global_position_s *pos;
|
||||||
|
struct home_position_s *home;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
void subscribe(Mavlink *mavlink)
|
||||||
|
{
|
||||||
|
pos_sub = mavlink->add_orb_subscription(ORB_ID(vehicle_global_position), sizeof(struct vehicle_global_position_s));
|
||||||
|
pos = (struct vehicle_global_position_s *)pos_sub->get_data();
|
||||||
|
|
||||||
|
home_sub = mavlink->add_orb_subscription(ORB_ID(home_position), sizeof(struct home_position_s));
|
||||||
|
home = (struct home_position_s *)home_sub->get_data();
|
||||||
|
}
|
||||||
|
|
||||||
|
void send(const hrt_abstime t) {
|
||||||
|
pos_sub->update(t);
|
||||||
|
home_sub->update(t);
|
||||||
|
|
||||||
|
mavlink_msg_global_position_int_send(_channel,
|
||||||
|
pos->timestamp / 1000,
|
||||||
|
pos->lat * 1e7,
|
||||||
|
pos->lon * 1e7,
|
||||||
|
pos->alt * 1000.0f,
|
||||||
|
(pos->alt - home->alt) * 1000.0f,
|
||||||
|
pos->vel_n * 100.0f,
|
||||||
|
pos->vel_e * 100.0f,
|
||||||
|
pos->vel_d * 100.0f,
|
||||||
|
_wrap_2pi(pos->yaw) * M_RAD_TO_DEG_F * 100.0f);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class MavlinkStreamLocalPositionNED : public MavlinkStream {
|
||||||
|
public:
|
||||||
|
const char *get_name()
|
||||||
|
{
|
||||||
|
return "LOCAL_POSITION_NED";
|
||||||
|
}
|
||||||
|
|
||||||
|
MavlinkStream *new_instance()
|
||||||
|
{
|
||||||
|
return new MavlinkStreamLocalPositionNED();
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
MavlinkOrbSubscription *pos_sub;
|
||||||
|
|
||||||
|
struct vehicle_local_position_s *pos;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
void subscribe(Mavlink *mavlink)
|
||||||
|
{
|
||||||
|
pos_sub = mavlink->add_orb_subscription(ORB_ID(vehicle_local_position), sizeof(struct vehicle_local_position_s));
|
||||||
|
pos = (struct vehicle_local_position_s *)pos_sub->get_data();
|
||||||
|
}
|
||||||
|
|
||||||
|
void send(const hrt_abstime t) {
|
||||||
|
pos_sub->update(t);
|
||||||
|
|
||||||
|
mavlink_msg_local_position_ned_send(_channel,
|
||||||
|
pos->timestamp / 1000,
|
||||||
|
pos->x,
|
||||||
|
pos->y,
|
||||||
|
pos->z,
|
||||||
|
pos->vx,
|
||||||
|
pos->vy,
|
||||||
|
pos->vz);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
MavlinkStream *streams_list[] = {
|
MavlinkStream *streams_list[] = {
|
||||||
new MavlinkStreamHeartbeat(),
|
new MavlinkStreamHeartbeat(),
|
||||||
new MavlinkStreamSysStatus(),
|
new MavlinkStreamSysStatus(),
|
||||||
new MavlinkStreamHighresIMU(),
|
new MavlinkStreamHighresIMU(),
|
||||||
new MavlinkStreamAttitude(),
|
new MavlinkStreamAttitude(),
|
||||||
|
new MavlinkStreamGPSRawInt(),
|
||||||
|
new MavlinkStreamGlobalPositionInt(),
|
||||||
|
new MavlinkStreamLocalPositionNED(),
|
||||||
nullptr
|
nullptr
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -347,22 +501,6 @@ MavlinkStream *streams_list[] = {
|
||||||
// /* copy gps data into local buffer */
|
// /* copy gps data into local buffer */
|
||||||
// orb_copy(ORB_ID(vehicle_gps_position), l->mavlink->get_subs()->gps_sub, &gps);
|
// orb_copy(ORB_ID(vehicle_gps_position), l->mavlink->get_subs()->gps_sub, &gps);
|
||||||
//
|
//
|
||||||
// /* GPS COG is 0..2PI in degrees * 1e2 */
|
|
||||||
// float cog_deg = _wrap_2pi(gps.cog_rad) * M_RAD_TO_DEG_F;
|
|
||||||
//
|
|
||||||
// /* GPS position */
|
|
||||||
// mavlink_msg_gps_raw_int_send(l->mavlink->get_chan(),
|
|
||||||
// gps.timestamp_position,
|
|
||||||
// gps.fix_type,
|
|
||||||
// gps.lat,
|
|
||||||
// gps.lon,
|
|
||||||
// gps.alt,
|
|
||||||
// cm_uint16_from_m_float(gps.eph_m),
|
|
||||||
// cm_uint16_from_m_float(gps.epv_m),
|
|
||||||
// gps.vel_m_s * 1e2f, // from m/s to cm/s
|
|
||||||
// cog_deg * 1e2f, // from deg to deg * 100
|
|
||||||
// gps.satellites_visible);
|
|
||||||
//
|
|
||||||
// /* update SAT info every 10 seconds */
|
// /* update SAT info every 10 seconds */
|
||||||
// if (gps.satellite_info_available && (l->listener->gps_counter % 50 == 0)) {
|
// if (gps.satellite_info_available && (l->listener->gps_counter % 50 == 0)) {
|
||||||
// mavlink_msg_gps_status_send(l->mavlink->get_chan(),
|
// mavlink_msg_gps_status_send(l->mavlink->get_chan(),
|
||||||
|
@ -414,40 +552,6 @@ MavlinkStream *streams_list[] = {
|
||||||
// }
|
// }
|
||||||
//}
|
//}
|
||||||
//
|
//
|
||||||
//void
|
|
||||||
//MavlinkOrbListener::l_global_position(const struct listener *l)
|
|
||||||
//{
|
|
||||||
// /* copy global position data into local buffer */
|
|
||||||
// orb_copy(ORB_ID(vehicle_global_position), l->mavlink->get_subs()->global_pos_sub, &l->listener->global_pos);
|
|
||||||
//
|
|
||||||
// mavlink_msg_global_position_int_send(l->mavlink->get_chan(),
|
|
||||||
// l->listener->global_pos.timestamp / 1000,
|
|
||||||
// l->listener->global_pos.lat * 1e7,
|
|
||||||
// l->listener->global_pos.lon * 1e7,
|
|
||||||
// l->listener->global_pos.alt * 1000.0f,
|
|
||||||
// (l->listener->global_pos.alt - l->listener->home.alt) * 1000.0f,
|
|
||||||
// l->listener->global_pos.vel_n * 100.0f,
|
|
||||||
// l->listener->global_pos.vel_e * 100.0f,
|
|
||||||
// l->listener->global_pos.vel_d * 100.0f,
|
|
||||||
// _wrap_2pi(l->listener->global_pos.yaw) * M_RAD_TO_DEG_F * 100.0f);
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//void
|
|
||||||
//MavlinkOrbListener::l_local_position(const struct listener *l)
|
|
||||||
//{
|
|
||||||
// /* copy local position data into local buffer */
|
|
||||||
// orb_copy(ORB_ID(vehicle_local_position), l->mavlink->get_subs()->local_pos_sub, &l->listener->local_pos);
|
|
||||||
//
|
|
||||||
// if (l->mavlink->get_mode() == Mavlink::MODE_OFFBOARD)
|
|
||||||
// mavlink_msg_local_position_ned_send(l->mavlink->get_chan(),
|
|
||||||
// l->listener->local_pos.timestamp / 1000,
|
|
||||||
// l->listener->local_pos.x,
|
|
||||||
// l->listener->local_pos.y,
|
|
||||||
// l->listener->local_pos.z,
|
|
||||||
// l->listener->local_pos.vx,
|
|
||||||
// l->listener->local_pos.vy,
|
|
||||||
// l->listener->local_pos.vz);
|
|
||||||
//}
|
|
||||||
//
|
//
|
||||||
//void
|
//void
|
||||||
//MavlinkOrbListener::l_global_position_setpoint(const struct listener *l)
|
//MavlinkOrbListener::l_global_position_setpoint(const struct listener *l)
|
||||||
|
|
Loading…
Reference in New Issue