|
|
|
@ -296,15 +296,15 @@ void AP_UAVCAN::init(uint8_t driver_index, bool enable_filters)
@@ -296,15 +296,15 @@ void AP_UAVCAN::init(uint8_t driver_index, bool enable_filters)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
zr_camera_command[driver_index] = new uavcan::Publisher<zrzk::equipment::camera::Command>(*_node); |
|
|
|
|
zr_camera_command[driver_index]->setTxTimeout(uavcan::MonotonicDuration::fromMSec(2)); |
|
|
|
|
zr_camera_command[driver_index]->setTxTimeout(uavcan::MonotonicDuration::fromMSec(20)); |
|
|
|
|
zr_camera_command[driver_index]->setPriority(uavcan::TransferPriority::OneHigherThanLowest); |
|
|
|
|
|
|
|
|
|
cam_angular[driver_index] = new uavcan::Publisher<uavcan::equipment::camera_gimbal::AngularCommand>(*_node); |
|
|
|
|
cam_angular[driver_index]->setTxTimeout(uavcan::MonotonicDuration::fromMSec(2)); |
|
|
|
|
cam_angular[driver_index]->setTxTimeout(uavcan::MonotonicDuration::fromMSec(20)); |
|
|
|
|
cam_angular[driver_index]->setPriority(uavcan::TransferPriority::OneHigherThanLowest); |
|
|
|
|
|
|
|
|
|
cam_geopoi[driver_index] = new uavcan::Publisher<uavcan::equipment::camera_gimbal::GEOPOICommand>(*_node); |
|
|
|
|
cam_geopoi[driver_index]->setTxTimeout(uavcan::MonotonicDuration::fromMSec(2)); |
|
|
|
|
cam_geopoi[driver_index]->setTxTimeout(uavcan::MonotonicDuration::fromMSec(20)); |
|
|
|
|
cam_geopoi[driver_index]->setPriority(uavcan::TransferPriority::OneHigherThanLowest); |
|
|
|
|
|
|
|
|
|
safety_button_listener[driver_index] = new uavcan::Subscriber<ardupilot::indication::Button, ButtonCb>(*_node); |
|
|
|
@ -399,11 +399,15 @@ void AP_UAVCAN::loop(void)
@@ -399,11 +399,15 @@ void AP_UAVCAN::loop(void)
|
|
|
|
|
_SRV_conf[i].esc_pending = false; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
zr_cam_cmd_send(); |
|
|
|
|
cam_aular_send(); |
|
|
|
|
cam_geopoi_send(); |
|
|
|
|
zr_rgb_led_send(); |
|
|
|
|
led_out_send(); |
|
|
|
|
buzzer_send(); |
|
|
|
|
rtcm_stream_send(); |
|
|
|
|
safety_state_send(); |
|
|
|
|
|
|
|
|
|
AP::uavcan_server().verify_nodes(this); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -769,55 +773,130 @@ void AP_UAVCAN::handle_traffic_report(AP_UAVCAN* ap_uavcan, uint8_t node_id, con
@@ -769,55 +773,130 @@ void AP_UAVCAN::handle_traffic_report(AP_UAVCAN* ap_uavcan, uint8_t node_id, con
|
|
|
|
|
adsb->handle_adsb_vehicle(vehicle); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool AP_UAVCAN::send_zr_rgb_led(uint8_t mode, uint8_t red, uint8_t green, uint8_t blue){ |
|
|
|
|
zrzk::equipment::indication::ZrRGB msg; |
|
|
|
|
msg.rgb_mode = mode; |
|
|
|
|
msg.rgb_r = red; |
|
|
|
|
msg.rgb_g = green; |
|
|
|
|
msg.rgb_b = blue; |
|
|
|
|
zr_rgb_led[_driver_index]->broadcast(msg); |
|
|
|
|
return true; |
|
|
|
|
bool AP_UAVCAN::set_zr_rgb_led(uint8_t mode, uint8_t red, uint8_t green, uint8_t blue) |
|
|
|
|
{ |
|
|
|
|
WITH_SEMAPHORE(_zr_rgb_led.sem); |
|
|
|
|
|
|
|
|
|
_zr_rgb_led.mode = mode; |
|
|
|
|
_zr_rgb_led.red = red; |
|
|
|
|
_zr_rgb_led.green = green; |
|
|
|
|
_zr_rgb_led.blue = blue; |
|
|
|
|
_zr_rgb_led.is_send = true; |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void AP_UAVCAN::send_zr_cam_cmd(uint8_t gimbal_id, uint8_t mode,uint8_t v1, uint8_t v2,uint8_t v3,uint8_t v4) |
|
|
|
|
void AP_UAVCAN::set_zr_cam_cmd(uint8_t gimbal_id, uint8_t mode, uint8_t v1, uint8_t v2, uint8_t v3, uint8_t v4) |
|
|
|
|
{ |
|
|
|
|
zrzk::equipment::camera::Command msg; |
|
|
|
|
|
|
|
|
|
msg.id = gimbal_id; |
|
|
|
|
msg.command_mode = mode; |
|
|
|
|
msg.command_1 =v1; |
|
|
|
|
msg.command_2 =v2; |
|
|
|
|
msg.command_3 =v3; |
|
|
|
|
msg.command_4 =v4; |
|
|
|
|
zr_camera_command[_driver_index]->broadcast(msg); |
|
|
|
|
|
|
|
|
|
WITH_SEMAPHORE(_zr_cam_cmd.sem); |
|
|
|
|
|
|
|
|
|
_zr_cam_cmd.gimbal_id = gimbal_id; |
|
|
|
|
_zr_cam_cmd.mode = mode; |
|
|
|
|
_zr_cam_cmd.v1 = v1; |
|
|
|
|
_zr_cam_cmd.v2 = v2; |
|
|
|
|
_zr_cam_cmd.v3 = v3; |
|
|
|
|
_zr_cam_cmd.v4 = v4; |
|
|
|
|
_zr_cam_cmd.is_send = true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void AP_UAVCAN::send_cam_geopoi(uint8_t id,uint8_t mode,int32_t longitude_deg_1e7,int32_t latitude_deg_1e7,int32_t height_cm,int8_t height_type) |
|
|
|
|
{
|
|
|
|
|
void AP_UAVCAN::set_cam_geopoi(uint8_t id, uint8_t mode, int32_t longitude_deg_1e7, int32_t latitude_deg_1e7, int32_t height_cm, int8_t height_type) |
|
|
|
|
{ |
|
|
|
|
WITH_SEMAPHORE(_cam_geopoi.sem); |
|
|
|
|
_cam_geopoi.id = id; |
|
|
|
|
_cam_geopoi.mode = mode; |
|
|
|
|
_cam_geopoi.latitude_deg_1e7 = latitude_deg_1e7; |
|
|
|
|
_cam_geopoi.longitude_deg_1e7 = longitude_deg_1e7; |
|
|
|
|
_cam_geopoi.height_cm = height_cm; |
|
|
|
|
_cam_geopoi.height_type = height_type; |
|
|
|
|
_cam_geopoi.is_send =true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void AP_UAVCAN:: set_cam_angular(uint8_t id,uint8_t mode,float pitch,float roll,float yaw) |
|
|
|
|
{ |
|
|
|
|
WITH_SEMAPHORE(_cam_angular.sem); |
|
|
|
|
|
|
|
|
|
_cam_angular.id = id; |
|
|
|
|
_cam_angular.mode= mode; |
|
|
|
|
_cam_angular.pitch= pitch;//ahrs.pitch_sensor*1e-2f;
|
|
|
|
|
_cam_angular.roll =roll; |
|
|
|
|
_cam_angular.yaw= yaw; |
|
|
|
|
_cam_angular.is_send =true; |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void AP_UAVCAN::cam_geopoi_send() |
|
|
|
|
{ |
|
|
|
|
if(!_cam_geopoi.is_send) |
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
uavcan::equipment::camera_gimbal::GEOPOICommand msg; |
|
|
|
|
WITH_SEMAPHORE(_cam_geopoi.sem); |
|
|
|
|
|
|
|
|
|
uint8_t gimbal_id = id; |
|
|
|
|
msg.gimbal_id = gimbal_id; |
|
|
|
|
msg.mode.command_mode = mode; |
|
|
|
|
msg.latitude_deg_1e7 =latitude_deg_1e7; |
|
|
|
|
msg.longitude_deg_1e7 = longitude_deg_1e7; |
|
|
|
|
msg.height_cm = height_cm; |
|
|
|
|
msg.gimbal_id = _cam_geopoi.id; |
|
|
|
|
msg.mode.command_mode = _cam_geopoi.mode; |
|
|
|
|
msg.latitude_deg_1e7 = _cam_geopoi.latitude_deg_1e7; |
|
|
|
|
msg.longitude_deg_1e7 = _cam_geopoi.longitude_deg_1e7; |
|
|
|
|
msg.height_cm = _cam_geopoi.height_cm; |
|
|
|
|
msg.height_reference = _cam_geopoi.height_type; |
|
|
|
|
|
|
|
|
|
cam_geopoi[_driver_index]->broadcast(msg); |
|
|
|
|
_cam_geopoi.is_send = false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void AP_UAVCAN:: send_cam_angular(uint8_t id,uint8_t mode,float pitch,float roll,float yaw) |
|
|
|
|
void AP_UAVCAN::cam_aular_send() |
|
|
|
|
{ |
|
|
|
|
uavcan::equipment::camera_gimbal::AngularCommand msg; |
|
|
|
|
if(!_cam_angular.is_send) |
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
uint8_t gimbal_id = id; |
|
|
|
|
msg.gimbal_id = gimbal_id; |
|
|
|
|
msg.mode.command_mode = mode; |
|
|
|
|
msg.quaternion_xyzw[0] = pitch;//ahrs.pitch_sensor*1e-2f;
|
|
|
|
|
msg.quaternion_xyzw[1] =roll; |
|
|
|
|
msg.quaternion_xyzw[2] = yaw; |
|
|
|
|
uavcan::equipment::camera_gimbal::AngularCommand msg; |
|
|
|
|
WITH_SEMAPHORE(_cam_angular.sem); |
|
|
|
|
|
|
|
|
|
msg.gimbal_id = _cam_angular.id; |
|
|
|
|
msg.mode.command_mode = _cam_angular.mode; |
|
|
|
|
msg.quaternion_xyzw[0] = _cam_angular.pitch; //ahrs.pitch_sensor*1e-2f;
|
|
|
|
|
msg.quaternion_xyzw[1] = _cam_angular.roll; |
|
|
|
|
msg.quaternion_xyzw[2] = _cam_angular.yaw; |
|
|
|
|
|
|
|
|
|
cam_angular[_driver_index]->broadcast(msg); |
|
|
|
|
_cam_angular.is_send =false; |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void AP_UAVCAN::zr_cam_cmd_send() |
|
|
|
|
{ |
|
|
|
|
if(!_zr_cam_cmd.is_send) |
|
|
|
|
return; |
|
|
|
|
zrzk::equipment::camera::Command msg; |
|
|
|
|
WITH_SEMAPHORE(_zr_cam_cmd.sem); |
|
|
|
|
msg.id =_zr_cam_cmd.gimbal_id ; |
|
|
|
|
msg.command_mode =_zr_cam_cmd. mode; |
|
|
|
|
msg.command_1 =_zr_cam_cmd.v1; |
|
|
|
|
msg.command_2 =_zr_cam_cmd.v2; |
|
|
|
|
msg.command_3 =_zr_cam_cmd.v3; |
|
|
|
|
msg.command_4 =_zr_cam_cmd.v4; |
|
|
|
|
|
|
|
|
|
zr_camera_command[_driver_index]->broadcast(msg); |
|
|
|
|
_zr_cam_cmd.is_send =false; |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void AP_UAVCAN::zr_rgb_led_send() |
|
|
|
|
{ |
|
|
|
|
if(!_zr_rgb_led.is_send) |
|
|
|
|
{ |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
zrzk::equipment::indication::ZrRGB msg; |
|
|
|
|
WITH_SEMAPHORE(_zr_rgb_led.sem); |
|
|
|
|
|
|
|
|
|
msg.rgb_mode = _zr_rgb_led.mode; |
|
|
|
|
msg.rgb_r =_zr_rgb_led. red; |
|
|
|
|
msg.rgb_g = _zr_rgb_led.green; |
|
|
|
|
msg.rgb_b = _zr_rgb_led.blue; |
|
|
|
|
zr_rgb_led[_driver_index]->broadcast(msg); |
|
|
|
|
_zr_rgb_led.is_send =false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void AP_UAVCAN::handle_zr_camera_feedback(AP_UAVCAN *ap_uavcan, uint8_t node_id, const ZrCamFeedBackCb &cb) |
|
|
|
|