|
|
|
@ -58,6 +58,8 @@
@@ -58,6 +58,8 @@
|
|
|
|
|
|
|
|
|
|
#include <zrzk/protocol/Message.hpp> |
|
|
|
|
#include <zrzk/protocol/Request.hpp> |
|
|
|
|
#include <zrzk/equipment/uav/PPKPOS.hpp> |
|
|
|
|
|
|
|
|
|
#include <uavcan/equipment/camera_gimbal/GEOPOICommand.hpp> |
|
|
|
|
#include <uavcan/equipment/camera_gimbal/AngularCommand.hpp> |
|
|
|
|
|
|
|
|
@ -144,7 +146,7 @@ static uavcan::Publisher<zrzk::equipment::uav::State>* zr_uav_state[MAX_NUMBER_O
@@ -144,7 +146,7 @@ static uavcan::Publisher<zrzk::equipment::uav::State>* zr_uav_state[MAX_NUMBER_O
|
|
|
|
|
static uavcan::Publisher<zrzk::equipment::uav::TimeStamp>* zr_uav_timestamp[MAX_NUMBER_OF_CAN_DRIVERS]; |
|
|
|
|
static uavcan::Publisher<zrzk::equipment::uav::Euler>* zr_uav_euler[MAX_NUMBER_OF_CAN_DRIVERS]; |
|
|
|
|
static uavcan::Publisher<zrzk::equipment::uav::Position> * zr_uav_pos[MAX_NUMBER_OF_CAN_DRIVERS]; |
|
|
|
|
|
|
|
|
|
static uavcan::Publisher<zrzk::equipment::uav::PPKPOS>* zr_uav_ppk[MAX_NUMBER_OF_CAN_DRIVERS];
|
|
|
|
|
// subscribers
|
|
|
|
|
|
|
|
|
|
// handler SafteyButton
|
|
|
|
@ -359,6 +361,10 @@ void AP_UAVCAN::init(uint8_t driver_index, bool enable_filters)
@@ -359,6 +361,10 @@ void AP_UAVCAN::init(uint8_t driver_index, bool enable_filters)
|
|
|
|
|
zr_uav_pos[driver_index]->setTxTimeout(uavcan::MonotonicDuration::fromMSec(100)); |
|
|
|
|
zr_uav_pos[driver_index]->setPriority(uavcan::TransferPriority::OneHigherThanLowest); |
|
|
|
|
|
|
|
|
|
zr_uav_ppk[driver_index] = new uavcan::Publisher<zrzk::equipment::uav::PPKPOS>(*_node); |
|
|
|
|
zr_uav_ppk[driver_index]->setTxTimeout(uavcan::MonotonicDuration::fromMSec(100)); |
|
|
|
|
zr_uav_ppk[driver_index]->setPriority(uavcan::TransferPriority::OneHigherThanLowest); |
|
|
|
|
|
|
|
|
|
safety_button_listener[driver_index] = new uavcan::Subscriber<ardupilot::indication::Button, ButtonCb>(*_node); |
|
|
|
|
if (safety_button_listener[driver_index]) { |
|
|
|
|
safety_button_listener[driver_index]->start(ButtonCb(this, &handle_button)); |
|
|
|
@ -487,6 +493,7 @@ void AP_UAVCAN::loop(void)
@@ -487,6 +493,7 @@ void AP_UAVCAN::loop(void)
|
|
|
|
|
zr_uav_version_send(); |
|
|
|
|
zr_uav_pos_send(); |
|
|
|
|
zr_uav_euler_send(); |
|
|
|
|
zr_uav_ppk_send(); |
|
|
|
|
AP::uavcan_server().verify_nodes(this); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -1235,4 +1242,29 @@ void AP_UAVCAN::handle_zr_camera_sum(AP_UAVCAN *ap_uavcan, uint8_t node_id, cons
@@ -1235,4 +1242,29 @@ void AP_UAVCAN::handle_zr_camera_sum(AP_UAVCAN *ap_uavcan, uint8_t node_id, cons
|
|
|
|
|
camera->update_zr_cam_sum(pkt); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void AP_UAVCAN::set_zr_ppk_pos(ppk_pos_data_t &data) |
|
|
|
|
{ |
|
|
|
|
WITH_SEMAPHORE(_zr_ppk_pos.sem); |
|
|
|
|
memcpy(&_zr_ppk_pos.data, &data, sizeof(ppk_pos_data_t)); |
|
|
|
|
_zr_ppk_pos.need_send = true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void AP_UAVCAN::zr_uav_ppk_send() |
|
|
|
|
{ |
|
|
|
|
if (!_zr_ppk_pos.need_send) |
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
zrzk::equipment::uav::PPKPOS msg; |
|
|
|
|
WITH_SEMAPHORE(_zr_ppk_pos.sem); |
|
|
|
|
msg.index = _zr_ppk_pos.data.index; |
|
|
|
|
msg.week = _zr_ppk_pos.data.week; |
|
|
|
|
msg.weekms = _zr_ppk_pos.data.weekms; |
|
|
|
|
msg.latitude_deg_1e7 = _zr_ppk_pos.data.latitude_deg_1e7; |
|
|
|
|
msg.longitude_deg_1e7 = _zr_ppk_pos.data.longitude_deg_1e7; |
|
|
|
|
msg.height_abs_cm = _zr_ppk_pos.data.height_abs_cm; |
|
|
|
|
msg.cam_number = _zr_ppk_pos.data.cam_number; |
|
|
|
|
zr_uav_ppk[_driver_index]->broadcast(msg); |
|
|
|
|
_zr_ppk_pos.need_send = false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#endif // HAL_WITH_UAVCAN
|
|
|
|
|