Este paquete calcula la cinemática inversa del brazo humano usando las posiciones cartesianas obtenidas del topic /skeleton_3D y ejecuta un modelo URDF sobre el esqueleto de puntos obtenido del sistema de visión.
-
- URDF
-
- IK_arm_calculator.py
-
- pose_shoulder_TF_publisher.py
-
- human_boy_to_joint_states_converter.py
-
- tf2_listener.py
-
- Lanzamiento del sistema
El archivo human_right_arm.xacro contiene un modelo URDF del brazo humano con la longitud visual del upperarm y del forearm parametrizadas. Se especifican desde el archivo de lanzamiento.
El URDF se ha modelado con 4 articulaciones rotativas y 2 prismáticas. Estas son:
- q1: Elevación frontal del hombro, en rad.
- q2: Elevación lateral del hombro, en rad.
- q3: Rotación interna/externa del hombro, en rad.
- q4: Flexión del codo, en rad.
- upperarm_length: Longitud entre el hombro y el codo, medida en m.
- forearm_length: Longitud entre el codo y la muñeca, medida en m.
Adicionalmente, el URDF consta de una quinta articulación de rotación, q5, encargada de modelar la pronación y supinación del antebrazo.
Se han utilizado articulaciones prismáticas para adecuar el modelo al sistema de visión y eliminar el error entre las posiciones cartesianas de las articulaciones.
Este script calcula el modelo cinemático inverso del brazo humano mediante la resolución del problema geométrico.
- Calcula el modelo cinemático inverso y publica las posiciones articulares q1, q2, q3, q4
- Publica las longitudes articulares del upperarm y del forearm, medidas como diferencias entre keypoints.
- Subscribers: Receives
Skeleton3Dmessages del topic/skeleton_3D - Publisher: Publishes a
HumanBodymessage containing the articular positions and link lengths en el topic/human_body/description
Este nodo localiza el URDF del brazo en el kp del hombro derecho.
Este script convierte el mensaje HumanBody contenido en el topic /human_body/description en un mensaje del tipo sensor_msgs/JointState, apto para el nodo robot_state_publisher.
- Subscribers: Se subscribe al topic
/human_bodyy recibe un mensaje del tipoHumanBody - Publisher: Publica en el topic
/joint_statesun mensaje del tiposensor_msgs/JointState.
El nodo robot_state_publisher calcula la Cinemática Directa del URDF y este nodo extrae las transformaciones y las posiciones cartesianas de las articulaciones
- Subscribers: Se subscribe al topic
/TFy obtiene las matrices de transformación entre base_link y las articulaciones. - Publisher:
- Publica en el topic
/kp_URDFlas posiciones cartesianas de las articulaciones del URDF. - Publica en el topic
/kp_visionlas posiciones cartesianas de las articulaciones obtenidas del sistema de visión. Esta información ya está disponible en otros topics, simplemente se publica aqui para un análisis más sencillo en MATLAB.
- Publica en el topic
Para el uso del sistema se debe ejecutar el siguiente comando:
roslaunch human_articular_space kinematics_right_arm.launchFlags:
use_rviz. Visualización del URDF sobre el esqueleto articular.use_tf2_listener. Ejecuta el nodo encargado de publicar la posición cartesiana de las articulaciones.
Ejemplos de uso:
- Uso básico con rviz
roslaunch human_articular_space kinematics_right_arm.launch- Uso básico sin rviz
roslaunch human_articular_space kinematics_right_arm.launch use_rviz:=false use_tf2_listener:=false- Uso completo: Con RViz y obteniendo las posiciones cartesianas del URDF.
roslaunch human_articular_space kinematics_right_arm.launch use_rviz:=true use_tf2_listener:=trueMICIU / AEI / FEDER
This work is part of project PID2021-127221OB-I00 (CONCERTO — Control Colaborativo para Interacción física Empática entre RoboT y humanO), funded by MICIU/AEI/10.13039/501100011033/FEDER, UE.
