mirror of
https://github.com/PX4/PX4-Autopilot.git
synced 2026-06-02 20:28:37 +08:00
[UAVCANv1] Publisher default timeout, has to be tuned further for all publishers
This commit is contained in:
committed by
Lorenz Meier
parent
1804cea92c
commit
8b3aa46c01
@@ -102,7 +102,7 @@ public:
|
|||||||
|
|
||||||
CanardPortID arming_pid = static_cast<CanardPortID>(static_cast<uint32_t>(_port_id) + 1);
|
CanardPortID arming_pid = static_cast<CanardPortID>(static_cast<uint32_t>(_port_id) + 1);
|
||||||
CanardTransfer transfer = {
|
CanardTransfer transfer = {
|
||||||
.timestamp_usec = hrt_absolute_time() + CANARD_DEFAULT_TRANSFER_ID_TIMEOUT_USEC,
|
.timestamp_usec = hrt_absolute_time() + PUBLISHER_DEFAULT_TIMEOUT_USEC,
|
||||||
.priority = CanardPriorityNominal,
|
.priority = CanardPriorityNominal,
|
||||||
.transfer_kind = CanardTransferKindMessage,
|
.transfer_kind = CanardTransferKindMessage,
|
||||||
.port_id = arming_pid, // This is the subject-ID.
|
.port_id = arming_pid, // This is the subject-ID.
|
||||||
@@ -145,7 +145,7 @@ public:
|
|||||||
uint8_t esc_sp_payload_buffer[reg_drone_service_actuator_common_sp_Vector31_0_1_SERIALIZATION_BUFFER_SIZE_BYTES_];
|
uint8_t esc_sp_payload_buffer[reg_drone_service_actuator_common_sp_Vector31_0_1_SERIALIZATION_BUFFER_SIZE_BYTES_];
|
||||||
|
|
||||||
CanardTransfer transfer = {
|
CanardTransfer transfer = {
|
||||||
.timestamp_usec = hrt_absolute_time() + CANARD_DEFAULT_TRANSFER_ID_TIMEOUT_USEC,
|
.timestamp_usec = hrt_absolute_time() + PUBLISHER_DEFAULT_TIMEOUT_USEC,
|
||||||
.priority = CanardPriorityNominal,
|
.priority = CanardPriorityNominal,
|
||||||
.transfer_kind = CanardTransferKindMessage,
|
.transfer_kind = CanardTransferKindMessage,
|
||||||
.port_id = _port_id, // This is the subject-ID.
|
.port_id = _port_id, // This is the subject-ID.
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ set(LEGACY_DSDL_DIR ${CMAKE_CURRENT_SOURCE_DIR}/legacy_data_types)
|
|||||||
|
|
||||||
px4_add_git_submodule(TARGET git_libcanard PATH ${LIBCANARD_DIR})
|
px4_add_git_submodule(TARGET git_libcanard PATH ${LIBCANARD_DIR})
|
||||||
px4_add_git_submodule(TARGET git_public_regulated_data_types PATH ${DSDL_DIR})
|
px4_add_git_submodule(TARGET git_public_regulated_data_types PATH ${DSDL_DIR})
|
||||||
|
px4_add_git_submodule(TARGET git_legacy_data_types PATH ${LEGACY_DSDL_DIR})
|
||||||
|
|
||||||
find_program(NNVG_PATH nnvg)
|
find_program(NNVG_PATH nnvg)
|
||||||
if(NNVG_PATH)
|
if(NNVG_PATH)
|
||||||
@@ -88,5 +89,6 @@ px4_add_module(
|
|||||||
DEPENDS
|
DEPENDS
|
||||||
git_libcanard
|
git_libcanard
|
||||||
git_public_regulated_data_types
|
git_public_regulated_data_types
|
||||||
|
git_legacy_data_types
|
||||||
version
|
version
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ bool NodeManager::HandleNodeIDRequest(uavcan_pnp_NodeIDAllocationData_1_0 &msg)
|
|||||||
uint8_t node_id_alloc_payload_buffer[uavcan_pnp_NodeIDAllocationData_1_0_SERIALIZATION_BUFFER_SIZE_BYTES_];
|
uint8_t node_id_alloc_payload_buffer[uavcan_pnp_NodeIDAllocationData_1_0_SERIALIZATION_BUFFER_SIZE_BYTES_];
|
||||||
|
|
||||||
CanardTransfer transfer = {
|
CanardTransfer transfer = {
|
||||||
.timestamp_usec = hrt_absolute_time() + CANARD_DEFAULT_TRANSFER_ID_TIMEOUT_USEC,
|
.timestamp_usec = hrt_absolute_time() + PUBLISHER_DEFAULT_TIMEOUT_USEC,
|
||||||
.priority = CanardPriorityNominal,
|
.priority = CanardPriorityNominal,
|
||||||
.transfer_kind = CanardTransferKindMessage,
|
.transfer_kind = CanardTransferKindMessage,
|
||||||
.port_id = uavcan_pnp_NodeIDAllocationData_1_0_FIXED_PORT_ID_, // This is the subject-ID.
|
.port_id = uavcan_pnp_NodeIDAllocationData_1_0_FIXED_PORT_ID_, // This is the subject-ID.
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ public:
|
|||||||
uint8_t geo_payload_buffer[reg_drone_physics_kinematics_geodetic_Point_0_1_SERIALIZATION_BUFFER_SIZE_BYTES_];
|
uint8_t geo_payload_buffer[reg_drone_physics_kinematics_geodetic_Point_0_1_SERIALIZATION_BUFFER_SIZE_BYTES_];
|
||||||
|
|
||||||
CanardTransfer transfer = {
|
CanardTransfer transfer = {
|
||||||
.timestamp_usec = hrt_absolute_time() + CANARD_DEFAULT_TRANSFER_ID_TIMEOUT_USEC,
|
.timestamp_usec = hrt_absolute_time() + PUBLISHER_DEFAULT_TIMEOUT_USEC,
|
||||||
.priority = CanardPriorityNominal,
|
.priority = CanardPriorityNominal,
|
||||||
.transfer_kind = CanardTransferKindMessage,
|
.transfer_kind = CanardTransferKindMessage,
|
||||||
.port_id = _port_id, // This is the subject-ID.
|
.port_id = _port_id, // This is the subject-ID.
|
||||||
@@ -107,7 +107,7 @@ public:
|
|||||||
CanardPortID _port_id_2 = static_cast<CanardPortID>((uint16_t)_port_id + 1U);
|
CanardPortID _port_id_2 = static_cast<CanardPortID>((uint16_t)_port_id + 1U);
|
||||||
|
|
||||||
CanardTransfer transfer2 = {
|
CanardTransfer transfer2 = {
|
||||||
.timestamp_usec = hrt_absolute_time() + CANARD_DEFAULT_TRANSFER_ID_TIMEOUT_USEC,
|
.timestamp_usec = hrt_absolute_time() + PUBLISHER_DEFAULT_TIMEOUT_USEC,
|
||||||
.priority = CanardPriorityNominal,
|
.priority = CanardPriorityNominal,
|
||||||
.transfer_kind = CanardTransferKindMessage,
|
.transfer_kind = CanardTransferKindMessage,
|
||||||
.port_id = _port_id_2, // This is the subject-ID.
|
.port_id = _port_id_2, // This is the subject-ID.
|
||||||
|
|||||||
@@ -50,6 +50,12 @@
|
|||||||
#include "../CanardInterface.hpp"
|
#include "../CanardInterface.hpp"
|
||||||
#include "../ParamManager.hpp"
|
#include "../ParamManager.hpp"
|
||||||
|
|
||||||
|
/* This is a default baseline timeout for publishers
|
||||||
|
* Still it's recommended for implementers to check if their publisher
|
||||||
|
* has timing requirements and if it should drop messages that are too old in favour of newer messages
|
||||||
|
*/
|
||||||
|
#define PUBLISHER_DEFAULT_TIMEOUT_USEC 100000UL
|
||||||
|
|
||||||
class UavcanPublisher
|
class UavcanPublisher
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ public:
|
|||||||
uint8_t readiness_payload_buffer[reg_drone_service_common_Readiness_0_1_SERIALIZATION_BUFFER_SIZE_BYTES_];
|
uint8_t readiness_payload_buffer[reg_drone_service_common_Readiness_0_1_SERIALIZATION_BUFFER_SIZE_BYTES_];
|
||||||
|
|
||||||
CanardTransfer transfer = {
|
CanardTransfer transfer = {
|
||||||
.timestamp_usec = hrt_absolute_time() + CANARD_DEFAULT_TRANSFER_ID_TIMEOUT_USEC,
|
.timestamp_usec = hrt_absolute_time() + PUBLISHER_DEFAULT_TIMEOUT_USEC,
|
||||||
.priority = CanardPriorityNominal,
|
.priority = CanardPriorityNominal,
|
||||||
.transfer_kind = CanardTransferKindMessage,
|
.transfer_kind = CanardTransferKindMessage,
|
||||||
.port_id = _port_id, // This is the subject-ID.
|
.port_id = _port_id, // This is the subject-ID.
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ public:
|
|||||||
uint8_t response_payload_buffer[uavcan_register_Access_Response_1_0_SERIALIZATION_BUFFER_SIZE_BYTES_];
|
uint8_t response_payload_buffer[uavcan_register_Access_Response_1_0_SERIALIZATION_BUFFER_SIZE_BYTES_];
|
||||||
|
|
||||||
CanardTransfer transfer = {
|
CanardTransfer transfer = {
|
||||||
.timestamp_usec = hrt_absolute_time() + CANARD_DEFAULT_TRANSFER_ID_TIMEOUT_USEC,
|
.timestamp_usec = hrt_absolute_time() + PUBLISHER_DEFAULT_TIMEOUT_USEC,
|
||||||
.priority = CanardPriorityNominal,
|
.priority = CanardPriorityNominal,
|
||||||
.transfer_kind = CanardTransferKindResponse,
|
.transfer_kind = CanardTransferKindResponse,
|
||||||
.port_id = uavcan_register_Access_1_0_FIXED_PORT_ID_, // This is the subject-ID.
|
.port_id = uavcan_register_Access_1_0_FIXED_PORT_ID_, // This is the subject-ID.
|
||||||
|
|||||||
@@ -108,7 +108,7 @@ public:
|
|||||||
uint8_t response_payload_buffer[uavcan_node_GetInfo_Response_1_0_SERIALIZATION_BUFFER_SIZE_BYTES_];
|
uint8_t response_payload_buffer[uavcan_node_GetInfo_Response_1_0_SERIALIZATION_BUFFER_SIZE_BYTES_];
|
||||||
|
|
||||||
CanardTransfer response = {
|
CanardTransfer response = {
|
||||||
.timestamp_usec = hrt_absolute_time() + CANARD_DEFAULT_TRANSFER_ID_TIMEOUT_USEC,
|
.timestamp_usec = hrt_absolute_time() + PUBLISHER_DEFAULT_TIMEOUT_USEC,
|
||||||
.priority = CanardPriorityNominal,
|
.priority = CanardPriorityNominal,
|
||||||
.transfer_kind = CanardTransferKindResponse,
|
.transfer_kind = CanardTransferKindResponse,
|
||||||
.port_id = uavcan_node_GetInfo_1_0_FIXED_PORT_ID_, // This is the subject-ID.
|
.port_id = uavcan_node_GetInfo_1_0_FIXED_PORT_ID_, // This is the subject-ID.
|
||||||
|
|||||||
@@ -47,6 +47,8 @@
|
|||||||
|
|
||||||
#include <uavcan/_register/Access_1_0.h>
|
#include <uavcan/_register/Access_1_0.h>
|
||||||
|
|
||||||
|
#include "../Publishers/Publisher.hpp"
|
||||||
|
|
||||||
class UavcanAccessServiceRequest
|
class UavcanAccessServiceRequest
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -68,7 +70,7 @@ public:
|
|||||||
uint8_t request_payload_buffer[uavcan_register_Access_Request_1_0_SERIALIZATION_BUFFER_SIZE_BYTES_];
|
uint8_t request_payload_buffer[uavcan_register_Access_Request_1_0_SERIALIZATION_BUFFER_SIZE_BYTES_];
|
||||||
|
|
||||||
CanardTransfer transfer = {
|
CanardTransfer transfer = {
|
||||||
.timestamp_usec = hrt_absolute_time() + CANARD_DEFAULT_TRANSFER_ID_TIMEOUT_USEC,
|
.timestamp_usec = hrt_absolute_time() + PUBLISHER_DEFAULT_TIMEOUT_USEC,
|
||||||
.priority = CanardPriorityNominal,
|
.priority = CanardPriorityNominal,
|
||||||
.transfer_kind = CanardTransferKindRequest,
|
.transfer_kind = CanardTransferKindRequest,
|
||||||
.port_id = uavcan_register_Access_1_0_FIXED_PORT_ID_, // This is the subject-ID.
|
.port_id = uavcan_register_Access_1_0_FIXED_PORT_ID_, // This is the subject-ID.
|
||||||
|
|||||||
@@ -47,6 +47,8 @@
|
|||||||
|
|
||||||
#include <uavcan/_register/List_1_0.h>
|
#include <uavcan/_register/List_1_0.h>
|
||||||
|
|
||||||
|
#include "../Publishers/Publisher.hpp"
|
||||||
|
|
||||||
class UavcanListServiceRequest
|
class UavcanListServiceRequest
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -62,7 +64,7 @@ public:
|
|||||||
uint8_t request_payload_buffer[uavcan_register_List_Request_1_0_SERIALIZATION_BUFFER_SIZE_BYTES_];
|
uint8_t request_payload_buffer[uavcan_register_List_Request_1_0_SERIALIZATION_BUFFER_SIZE_BYTES_];
|
||||||
|
|
||||||
CanardTransfer request = {
|
CanardTransfer request = {
|
||||||
.timestamp_usec = hrt_absolute_time() + CANARD_DEFAULT_TRANSFER_ID_TIMEOUT_USEC,
|
.timestamp_usec = hrt_absolute_time() + PUBLISHER_DEFAULT_TIMEOUT_USEC,
|
||||||
.priority = CanardPriorityNominal,
|
.priority = CanardPriorityNominal,
|
||||||
.transfer_kind = CanardTransferKindRequest,
|
.transfer_kind = CanardTransferKindRequest,
|
||||||
.port_id = uavcan_register_List_1_0_FIXED_PORT_ID_, // This is the subject-ID.
|
.port_id = uavcan_register_List_1_0_FIXED_PORT_ID_, // This is the subject-ID.
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ public:
|
|||||||
// Set _port_id from _uavcan_param
|
// Set _port_id from _uavcan_param
|
||||||
uavcan_register_Value_1_0 value;
|
uavcan_register_Value_1_0 value;
|
||||||
_param_manager.GetParamByName(uavcan_param, value);
|
_param_manager.GetParamByName(uavcan_param, value);
|
||||||
uint16_t new_id = value.natural16.value.elements[0];
|
int32_t new_id = value.integer32.value.elements[0];
|
||||||
|
|
||||||
/* FIXME how about partial subscribing */
|
/* FIXME how about partial subscribing */
|
||||||
if (curSubj->_canard_sub._port_id != new_id) {
|
if (curSubj->_canard_sub._port_id != new_id) {
|
||||||
|
|||||||
@@ -417,7 +417,7 @@ void UavcanNode::sendHeartbeat()
|
|||||||
|
|
||||||
|
|
||||||
CanardTransfer transfer = {
|
CanardTransfer transfer = {
|
||||||
.timestamp_usec = hrt_absolute_time() + CANARD_DEFAULT_TRANSFER_ID_TIMEOUT_USEC,
|
.timestamp_usec = hrt_absolute_time() + PUBLISHER_DEFAULT_TIMEOUT_USEC,
|
||||||
.priority = CanardPriorityNominal,
|
.priority = CanardPriorityNominal,
|
||||||
.transfer_kind = CanardTransferKindMessage,
|
.transfer_kind = CanardTransferKindMessage,
|
||||||
.port_id = uavcan_node_Heartbeat_1_0_FIXED_PORT_ID_,
|
.port_id = uavcan_node_Heartbeat_1_0_FIXED_PORT_ID_,
|
||||||
|
|||||||
Reference in New Issue
Block a user