2525#include < map>
2626#include < string>
2727#include < vector>
28+ #include < regex>
2829
2930#include < boost/algorithm/string.hpp>
3031
@@ -46,6 +47,7 @@ typedef struct
4647 int32_t value_of_max_radian_position;
4748 int32_t value_of_min_radian_position;
4849 uint16_t model_num;
50+ uint8_t firmware_version;
4951
5052 std::vector<ControlItem> item;
5153 std::map<std::string, double > unit_map;
@@ -60,6 +62,12 @@ class DynamixelInfo
6062
6163 std::string dxl_model_file_dir;
6264
65+ // Firmware version-aware model file selection
66+ std::string SelectModelFileByFirmwareVersion (
67+ const std::string & base_model_name,
68+ uint8_t firmware_version);
69+ uint8_t ExtractFirmwareVersionFromFilename (const std::string & filename);
70+
6371public:
6472 // Id, Control table
6573 std::map<uint8_t , DxlInfo> dxl_info_;
@@ -71,6 +79,7 @@ class DynamixelInfo
7179 void InitDxlModelInfo ();
7280
7381 void ReadDxlModelFile (uint8_t id, uint16_t model_num);
82+ void ReadDxlModelFile (uint8_t id, uint16_t model_num, uint8_t firmware_version);
7483 bool GetDxlControlItem (uint8_t id, std::string item_name, uint16_t & addr, uint8_t & size);
7584 bool CheckDxlControlItem (uint8_t id, std::string item_name);
7685
@@ -89,6 +98,8 @@ class DynamixelInfo
8998
9099 int32_t ConvertRadianToValue (uint8_t id, double radian);
91100 double ConvertValueToRadian (uint8_t id, int32_t value);
101+
102+ std::string GetModelName (uint16_t model_number) const ;
92103};
93104
94105// Template implementations
0 commit comments