Skip to content

Commit 9d6cb06

Browse files
committed
Feat: add position cmd subscriber
1 parent 4e09113 commit 9d6cb06

File tree

8 files changed

+25
-98
lines changed

8 files changed

+25
-98
lines changed

resource/ros2_lx16a_driver

Whitespace-only changes.

ros2_lx16a_driver/__init__.py

Whitespace-only changes.

ros2_lx16a_driver/lx16a_driver.py

-29
This file was deleted.

ros2_lx16a_driver/lx16a_node.py

-32
This file was deleted.

setup.cfg

-4
This file was deleted.

setup.py

-25
This file was deleted.

src/lx16a_node.py

+25
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from rclpy.node import Node
44
from pylx16a.lx16a import LX16A
55
from ros2_lx16a_driver.srv import GetServoInfo
6+
from std_msgs.msg import Float32MultiArray # Message utilisé pour la commande de position
67

78
class LX16AController(Node):
89
def __init__(self):
@@ -20,6 +21,14 @@ def __init__(self):
2021
# Création du service GetServoInfo
2122
self.srv = self.create_service(GetServoInfo, '/get_servo_info', self.handle_get_servo_info)
2223

24+
# Création du subscriber pour la commande de position
25+
self.position_subscriber = self.create_subscription(
26+
Float32MultiArray, # Type de message
27+
'/servo_positions', # Nom du topic
28+
self.handle_position_command, # Callback
29+
10 # Taille de la file d'attente
30+
)
31+
2332
self.get_logger().info('Nœud LX-16A prêt.')
2433

2534
def get_servo(self, servo_id):
@@ -73,6 +82,21 @@ def handle_get_servo_info(self, request, response):
7382

7483
return response
7584

85+
def handle_position_command(self, msg):
86+
"""Callback pour gérer la commande de position des servos."""
87+
if len(msg.data) == 0:
88+
self.get_logger().warn("Aucune commande de position reçue.")
89+
return
90+
91+
# Appliquer la commande de position à chaque servo
92+
for i, position in enumerate(msg.data):
93+
servo = self.get_servo(i + 1) # Récupère le servo correspondant à l'index (1 basé)
94+
if servo is not None:
95+
try:
96+
servo.move(position) # Méthode pour déplacer le servo à la position donnée
97+
self.get_logger().info(f"Servo {i+1} déplacé à la position {position}.")
98+
except Exception as e:
99+
self.get_logger().error(f"Erreur lors du déplacement du servo {i+1} : {e}")
76100

77101
def main(args=None):
78102
rclpy.init(args=args)
@@ -88,3 +112,4 @@ def main(args=None):
88112

89113
if __name__ == '__main__':
90114
main()
115+

test/test_lx16a.py

-8
This file was deleted.

0 commit comments

Comments
 (0)