How to use rmw_uros_ping_agent() and rmw_uros_sync_session() correctly ?
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 25/100
- Tipo de issue
- Error
- Claridad
- Necesita aclaración
- Estado de actividad
- Estancado
- Stack tecnológico
- c
- Área
- embedded-iot, performance
Línea de trabajo
Comienza en check_connection() y create_entities(), y luego sigue rmw_uros_ping_agent(), rmw_uros_sync_session(), publish() y rclc_executor_spin_some(). Reproduce las mediciones de tiempo notificadas en el RP2040 Pico con serial-over-USB y determina si el retraso lo causa el ping, la sincronización de la sesión, el trabajo del executor o la publicación. Se considera terminado cuando el comportamiento temporal y el uso correcto de la API estén documentados o se haya identificado el problema subyacente.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Dear all,
I am currently implementing micro-ros client on a RP2040 Pico board to publish the IMU data every 5ms (i.e. 200Hz).
Each time I need to publish the data, I check the connection of which transport layer is serial over USB knowing that its typical latency is reported here : https://docs.vulcanexus.org/en/iron/rst/microros_documentation/benchmarking/benchmarking.html#latency
However, measuring the time (in microsecs) taken by critical code in my implementation gives:
proc_imu() already took : 415
proc_baro() already took : 9
check_connection() already took : 2635
publish() already took : 1645
Whole loop() already took : 6709
As one could see, the whole loop() exceeded the expected 5ms and the most critical function is check_connection() which is implementated as below :
void check_connection(){
switch (uros_conn_curr_state) {
case WAITING_AGENT:
EXECUTE_EVERY_N_MS(5, uros_conn_curr_state = (RMW_RET_OK == rmw_uros_ping_agent(100, 1)) ? AGENT_AVAILABLE : WAITING_AGENT;);
break;
case AGENT_AVAILABLE:
uros_conn_curr_state = (true == create_entities()) ? AGENT_CONNECTED : WAITING_AGENT;
if (uros_conn_curr_state == WAITING_AGENT) {
destroy_entities();
};
break;
case AGENT_CONNECTED:
EXECUTE_EVERY_N_MS(500, uros_conn_curr_state = (RMW_RET_OK == rmw_uros_ping_agent(100, 1)) ? AGENT_CONNECTED : AGENT_DISCONNECTED;);
if (uros_conn_curr_state == AGENT_CONNECTED) {
rclc_executor_spin_some(&executor, 1000);
};
break;
case AGENT_DISCONNECTED:
destroy_entities();
uros_conn_curr_state = WAITING_AGENT;
break;
default:
break;
}
}
And the rmw_uros_sync_session() is call within create_entities() :
bool create_entities()
{
..
// create executor
executor = rclc_executor_get_zero_initialized_executor();
RCCHECK(rclc_executor_init(&executor, &support.context, 2, &allocator));
RCCHECK(rclc_executor_add_service(&executor, &service_fps, &req_fps, &res_fps, service_fps_callback));
RCCHECK(rclc_executor_add_service(&executor, &service_exp, &req_exp, &res_exp, service_exp_callback));
RCSOFTCHECK(rmw_uros_sync_session(timeout_ms));
return true;
}
I put my doubt on the rmw_uros_ping_agent() function according to some issue reports, one of them is : https://github.com/micro-ROS/micro_ros_arduino/issues/506
To update, I also found cases that the check_connection() took less than 1ms but the publish() took > 6ms :
proc_imu() already took : 384
proc_baro() already took : 8
check_connection() already took : 953
publish() already took : 6375
Whole loop() already took : 9727
proc_imu() already took : 411
proc_baro() already took : 7
check_connection() already took : 986
publish() already took : 6668
Whole loop() already took : 10062
Thanks in advance for you advice / suggestion.
Khang
- Lenguaje dominante
- Python
- Estrellas
- 334
- Forks
- 111
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de micro-ROS/micro_ros_platformio
-
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
micro-ROS/micro_ros_platformio#177 · 16 comentarios ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 38/100
micro-ROS/micro_ros_platformio#167 · 6 comentarios ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 35/100
micro-ROS/micro_ros_platformio#153 · 8 comentarios ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 30/100
micro-ROS/micro_ros_platformio#149 · 4 comentarios · 1 reacción ·
-
ESP32-EVB support Abierto
Dificultad 5/5 Más de una semana Aptitud para principiantes 20/100
Todos los issues de micro-ROS/micro_ros_platformio
Issues similares
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
xinnan-tech/xiaozhi-fde-talk#263 ·
-
rules
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
huggingface/Repo2RLEnv#163 · 1 comentario ·
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 95/100
huggingface/sentence-transformers#4074 ·
-
comp/dashboard invalid P3
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
NousResearch/hermes-agent#121143 ·