Skip to content

Commit 02841dd

Browse files
authored
Merge pull request #59 from ROBOTIS-GIT/feature-ffw-sensor
Support ffw sensor board
2 parents f519f98 + 7be4742 commit 02841dd

File tree

6 files changed

+91
-27
lines changed

6 files changed

+91
-27
lines changed

CHANGELOG.rst

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22
Changelog for package dynamixel_hardware_interface
33
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
44

5+
1.4.9 (2025-06-24)
6+
------------------
7+
* Support ffw sensor model
8+
* Contributors: Woojin Wie
9+
510
1.4.8 (2025-06-23)
611
------------------
712
* Added new model for OMY to use virtual_dxl

package.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
33
<package format="3">
44
<name>dynamixel_hardware_interface</name>
5-
<version>1.4.8</version>
5+
<version>1.4.9</version>
66
<description>
77
ROS 2 package providing a hardware interface for controlling Dynamixel motors via the ROS 2 control framework.
88
</description>

param/dxl_model/dynamixel.model

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,19 @@
11
Number Name
2+
220 omy_hat.model
3+
230 omy_end.model
4+
231 omy_end_rh_p12_rn.model
25
350 xl320.model
6+
536 sensorxel_joy.model
7+
537 ffw_g40_imu.model
8+
600 sensorxel_joy.model
9+
601 ffw_g10_led.model
10+
602 ffw_g10_rcu.model
11+
620 ffw_sg2_steer_1.model
12+
621 ffw_sg2_steer_2.model
13+
622 ffw_sg2_steer_3.model
14+
623 ffw_sg2_drive_1.model
15+
624 ffw_sg2_drive_2.model
16+
625 ffw_sg2_drive_3.model
317
1000 xh430_w350.model
418
1001 xd430_t350.model
519
1010 xh430_w210.model
@@ -44,15 +58,3 @@ Number Name
4458
4150 ym080_230_r099.model
4559
4170 ym080_230_a099.model
4660
35074 rh_p12_rn.model
47-
220 omy_hat.model
48-
230 omy_end.model
49-
231 omy_end_rh_p12_rn.model
50-
536 sensorxel_joy.model
51-
600 sensorxel_joy.model
52-
602 ffw_g10_rcu.model
53-
620 ffw_sg2_steer_1.model
54-
621 ffw_sg2_steer_2.model
55-
622 ffw_sg2_steer_3.model
56-
623 ffw_sg2_drive_1.model
57-
624 ffw_sg2_drive_2.model
58-
625 ffw_sg2_drive_3.model

param/dxl_model/ffw_g10_led.model

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
[control table]
2+
Address Size Data Name
3+
0 2 Model Number
4+
2 1 ROBOT_Generation
5+
3 1 Board_Number
6+
5 1 Firmware_Version_Major
7+
6 1 Firmware_Version_Minor
8+
7 1 ID
9+
8 1 Baud Rate (Bus)
10+
9 1 HW_REV
11+
10 1 Boot_Version_Major
12+
11 1 Boot_Version_Minor
13+
12 4 Error_Code
14+
20 4 Micros
15+
24 4 Millis
16+
100 1 Neopixel_Head_Left_Red
17+
101 1 Neopixel_Head_Left_Green
18+
102 1 Neopixel_Head_Left_Blue
19+
103 1 Neopixel_Head_Left_Brightness
20+
104 1 Neopixel_Head_Left_Mode
21+
105 2 Neopixel_Head_Left_Control_Time
22+
107 1 Neopixel_Head_Left_Led_Count
23+
108 2 Dummy_1
24+
110 1 Neopixel_Head_Right_Red
25+
111 1 Neopixel_Head_Right_Green
26+
112 1 Neopixel_Head_Right_Blue
27+
113 1 Neopixel_Head_Right_Brightness
28+
114 1 Neopixel_Head_Right_Mode
29+
115 2 Neopixel_Head_Right_Control_Time
30+
117 1 Neopixel_Head_Right_Led_Count

param/dxl_model/ffw_g40_imu.model

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
[control table]
2+
Address Size Data Name
3+
0 2 Model Number
4+
2 1 ROBOT_Generation
5+
3 1 Board_Number
6+
5 1 Firmware_Version_Major
7+
6 1 Firmware_Version_Minor
8+
7 1 ID
9+
8 1 Baud Rate (Bus)
10+
9 1 HW_REV
11+
10 1 Boot_Version_Major
12+
11 1 Boot_Version_Minor
13+
12 4 Error_Code
14+
20 4 Micros
15+
24 4 Millis
16+
32 2 IMU ACC SCALE
17+
34 2 IMU GYRO SCALE
18+
36 4 IMU TIMESTAMP
19+
40 2 IMU ACC X
20+
42 2 IMU ACC Y
21+
44 2 IMU ACC Z
22+
46 2 IMU GYRO X
23+
48 2 IMU GYRO Y
24+
50 2 IMU GYRO Z

src/dynamixel/dynamixel.cpp

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -304,11 +304,7 @@ DxlError Dynamixel::SetDxlReadItems(
304304

305305
DxlError Dynamixel::SetMultiDxlRead()
306306
{
307-
if (read_data_list_.size() < 2) {
308-
read_type_ = SYNC;
309-
} else {
310-
read_type_ = checkReadType();
311-
}
307+
read_type_ = checkReadType();
312308

313309
fprintf(stderr, "Dynamixel Read Type : %s\n", read_type_ ? "bulk read" : "sync read");
314310
if (read_type_ == SYNC) {
@@ -411,13 +407,10 @@ DxlError Dynamixel::SetDxlWriteItems(
411407

412408
return DxlError::OK;
413409
}
410+
414411
DxlError Dynamixel::SetMultiDxlWrite()
415412
{
416-
if (write_data_list_.size() < 2) {
417-
write_type_ = SYNC;
418-
} else {
419-
write_type_ = checkWriteType();
420-
}
413+
write_type_ = checkWriteType();
421414

422415
fprintf(stderr, "Dynamixel Write Type : %s\n", write_type_ ? "bulk write" : "sync write");
423416
if (write_type_ == SYNC) {
@@ -447,12 +440,10 @@ DxlError Dynamixel::SetMultiDxlWrite()
447440
}
448441

449442
if (write_type_ == SYNC) {
450-
SetSyncWriteItemAndHandler();
443+
return SetSyncWriteItemAndHandler();
451444
} else {
452-
SetBulkWriteItemAndHandler();
445+
return SetBulkWriteItemAndHandler();
453446
}
454-
455-
return DxlError::OK;
456447
}
457448

458449
DxlError Dynamixel::DynamixelEnable(std::vector<uint8_t> id_arr)
@@ -873,6 +864,12 @@ DxlError Dynamixel::WriteMultiDxlData()
873864

874865
bool Dynamixel::checkReadType()
875866
{
867+
if (read_data_list_.size() == 1) {
868+
if (CheckIndirectReadAvailable(read_data_list_.at(0).comm_id) != DxlError::OK) {
869+
return BULK;
870+
}
871+
}
872+
876873
for (size_t dxl_index = 1; dxl_index < read_data_list_.size(); dxl_index++) {
877874
// Check if Indirect Data Read address and size are different
878875
uint16_t indirect_addr[2]; // [i-1], [i]
@@ -919,6 +916,12 @@ bool Dynamixel::checkReadType()
919916

920917
bool Dynamixel::checkWriteType()
921918
{
919+
if (write_data_list_.size() == 1) {
920+
if (CheckIndirectWriteAvailable(write_data_list_.at(0).comm_id) != DxlError::OK) {
921+
return BULK;
922+
}
923+
}
924+
922925
for (size_t dxl_index = 1; dxl_index < write_data_list_.size(); dxl_index++) {
923926
// Check if Indirect Data Write address and size are different
924927
uint16_t indirect_addr[2]; // [i-1], [i]

0 commit comments

Comments
 (0)