소스 검색

feat(config): 更新相机配置参数和设备控制功能

- 修改 camera_focal_distance 处理逻辑,添加 float 类型转换
- 调整多个电机到位偏差参数的地址映射
- 添加伺服加速、减速时间和最大速度配置参数
- 将相机焦段最大运动距离改为浮点类型并调整精度
- 新增错误延迟、自动关机判断和电机状态监控参数
- 添加 get_dynamic_config_signle 方法获取单个动态配置
- 实现 set_stepper_disable 和 to_recheck_focal 设备控制方法
- 更新消息处理器以支持新的配置获取和设备控制命令
rambo 3 주 전
부모
커밋
0da9956020
3개의 변경된 파일110개의 추가작업 그리고 18개의 파일을 삭제
  1. 55 17
      python/conifg_info.py
  2. 31 1
      python/mcu/DeviceControl.py
  3. 24 0
      python/sockets/message_handler.py

+ 55 - 17
python/conifg_info.py

@@ -153,7 +153,7 @@ class ConfigManager:
                 case "is_camera_has_focal":
                     dataParams[item["key"]] = True if value else False
                 case "camera_focal_distance":
-                    dataParams[item["key"]] = int(value)
+                    dataParams[item["key"]] = int(float(value))
                 case "camera_focal_ratio":
                     dataParams[item["key"]] = float(value)
         return dataParams
@@ -356,58 +356,70 @@ class ConfigManager:
             _key="auto_check_motor_stop", _addr=121, _tips="每秒自动检查电机是否停止"
         )
 
-        # 前后移动电机是否存在
-        self.turntable_move_is_exist = 1
-        self._set_key_int(
-            _key="turntable_move_is_exist", _addr=122, _tips="前后移动电机是否存在"
-        )
-
         # 升降电机的到位偏差
         self.camera_high_motor_arrived_deviation = 100
         self._set_key_int(
-            _key="camera_high_motor_arrived_deviation", _addr=123, _tips="升降电机的到位偏差"
+            _key="camera_high_motor_arrived_deviation", _addr=122, _tips="升降电机的到位偏差"
         )
 
         # 相机角度电机的到位偏差
         self.camera_steering_arrived_deviation = 100
         self._set_key_int(
-            _key="camera_steering_arrived_deviation", _addr=124, _tips="相机角度电机的到位偏差"
+            _key="camera_steering_arrived_deviation", _addr=123, _tips="相机角度电机的到位偏差"
         )
 
         # 焦段电机的到位偏差
         self.camera_zoom_arrived_deviation = 100
         self._set_key_int(
-            _key="camera_zoom_arrived_deviation", _addr=125, _tips="焦段电机的到位偏差"
+            _key="camera_zoom_arrived_deviation", _addr=124, _tips="焦段电机的到位偏差"
         )
 
         # 前后移动电机的到位偏差
         self.move_turntable_arrived_deviation = 100
         self._set_key_int(
-            _key="move_turntable_arrived_deviation", _addr=126, _tips="前后移动电机的到位偏差"
+            _key="move_turntable_arrived_deviation", _addr=125, _tips="前后移动电机的到位偏差"
         )
 
         # 转盘角度电机的到位偏差
         self.turntable_steering_arrived_deviation = 100
         self._set_key_int(
-            _key="turntable_steering_arrived_deviation", _addr=127, _tips="转盘角度电机的到位偏差"
+            _key="turntable_steering_arrived_deviation", _addr=126, _tips="转盘角度电机的到位偏差"
         )
 
         # 转盘转速比例
         self.turntable_speed_raito = 1.0
         self._set_key_float(
-            _key="turntable_speed_raito", _addr=128, _tips="转盘转速比例"
+            _key="turntable_speed_raito", _addr=127, _tips="转盘转速比例"
         )
 
         # 变焦初始化力矩
         self.c_torque_max_electric = 800
         self._set_key_int(
-            _key="c_torque_max_electric", _addr=129, _tips="变焦初始化力矩"
+            _key="c_torque_max_electric", _addr=128, _tips="变焦初始化力矩"
         )
 
         # 变焦运动方向
         self.zoom_dir = 0
         self._set_key_int(
-            _key="zoom_dir", _addr=130, _tips="变焦运动方向"
+            _key="zoom_dir", _addr=129, _tips="变焦运动方向"
+        )
+
+        # 伺服加速时间单位ms
+        self.servo_up_time = 1300
+        self._set_key_int(
+            _key="servo_up_time", _addr=130, _tips="伺服加速时间单位ms"
+        )
+
+        # 伺服减速时间单位ms
+        self.servo_down_time = 1300
+        self._set_key_int(
+            _key="servo_down_time", _addr=131, _tips="伺服减速时间单位ms"
+        )
+
+        # 伺服最大速度
+        self.servo_max_speed = 1800
+        self._set_key_int(
+            _key="servo_max_speed", _addr=132, _tips="伺服最大速度"
         )
 
         # -------------------------------------
@@ -464,8 +476,10 @@ class ConfigManager:
         self._set_key_int(_key="camera_has_focal", _addr=208, _tips="相机调焦功能支持")
 
         # 相机焦段最大运动距离
-        self.camera_max_distance = 8000
-        self._set_key_int(_key="camera_max_distance", _addr=209, _tips="相机焦段最大运动距离")
+        self.camera_zoom_max_distance = 1
+        self._set_key_float(
+            _key="camera_zoom_max_distance", _addr=209, _tips="相机焦段最大运动距离", _precision=2
+        )
 
         # 相机焦段步进ratio
         self.camera_focal_ratio = 0.0
@@ -488,6 +502,30 @@ class ConfigManager:
             _key="servo_add_v", _addr=212, _tips="伺服电机每次运动后的偏移数值"
         )
 
+        # 伺服触发报警后安全时间
+        self.error_delay = 2.0
+        self._set_key_float(
+            _key="error_delay", _addr=213, _tips="伺服触发报警后安全时间"
+        )
+
+        # 是否自动判断关机
+        self.is_c_to_power_off = 1
+        self._set_key_int(
+            _key="is_c_to_power_off", _addr=214, _tips="是否自动判断关机"
+        )
+
+        # 相机焦段状态
+        self.camera_zoom_motor_state = 0
+        self._set_key_float(
+            _key="camera_zoom_motor_state", _addr=215, _tips="相机焦段状态", _readonly=True
+        )
+
+        # 电机判断停止速度
+        self.servo_speed_stop = 100
+        self._set_key_int(
+            _key="servo_speed_stop", _addr=216, _tips="电机判断停止速度"
+        )
+
         # =====================================================
         # 获取剩余内存
         self.get_memory = 0

+ 31 - 1
python/mcu/DeviceControl.py

@@ -197,6 +197,16 @@ class DeviceControl(BaseClass, metaclass=SingletonType):
 
         return self.config_manager.CONFIG_METADATA
 
+    def get_dynamic_config_signle(self, name):
+        """
+        获取动态参数配置-单独
+        """
+        data = {"addr": name}
+        print("参数值打印", data)
+        item_value = self.config_manager.get_dynamic_value(data)
+
+        return item_value
+
     def get_device_info(self):
         if not self.init_state:
             self.sendSocketMessage(code=1, msg="mcu设备未初始化", device_status=4)
@@ -686,6 +696,24 @@ class DeviceControl(BaseClass, metaclass=SingletonType):
             # 重置初始化标记为  从未初始化
             self.is_just_init_time = False
 
+        return
+
+    def set_stepper_disable(self, device_name, flag):
+        if device_name in self.device_name_dict:
+            device_id = self.device_name_dict[device_name]
+            buf = [self.command["set_stepper_disable"],
+                   device_id,
+                   1 if flag else 0,
+                   ]
+            self.add_send_data_queue(buf)
+
+    def to_recheck_focal(self, device_name, is_force=False):
+        # 重新校准对焦圈
+        device_id = self.device_name_dict[device_name]
+        cmd = 2
+        data = [cmd, device_id, 1]
+
+        self.add_send_data_queue(data)
         return True
 
     # 设置其他信息
@@ -1708,7 +1736,9 @@ class DeviceControl(BaseClass, metaclass=SingletonType):
             case "to_deal_device":
                 self.to_deal_device(device_name, value=value, _type=0, times=1)
             case "camera_zoom_motor":
-                self.to_deal_device(device_name="camera_zoom_motor")
+                self.to_device_move(device_name="camera_zoom_motor", value=int(value))
+            case "camera_focal_distance":
+                self.to_device_move(device_name="camera_zoom_motor", value=int(value))
             case _:
                 pass
 

+ 24 - 0
python/sockets/message_handler.py

@@ -796,6 +796,20 @@ async def handlerSend(
                 data=dynamic_configs,
             )
             await manager.send_personal_message(data, websocket)
+        case "get_dynamic_config_signle":
+            device_ctrl = DeviceControl(
+                websocket_manager=manager, smart_shooter=smart_shooter
+            )
+            name = data.get("name")
+            value = device_ctrl.get_dynamic_config_signle(name)
+            # print("dynamic_configs", dynamic_configs)
+            data = manager.jsonMessage(
+                code=0,
+                msg="成功",
+                msg_type="get_dynamic_config_signle",
+                data={"value": value},
+            )
+            await manager.send_personal_message(data, websocket)
         case "set_dynamic_config":
             # 设置动态参数
             device_ctrl = DeviceControl(
@@ -820,6 +834,16 @@ async def handlerSend(
             device_ctrl.getDeviationInfo()
             await asyncio.sleep(0.1)
             device_ctrl.get_device_info()
+        case "to_recheck_focal":
+            device_ctrl = DeviceControl(
+                websocket_manager=manager, smart_shooter=smart_shooter
+            )
+            device_ctrl.to_recheck_focal("camera_zoom_motor")
+        case "oneclick_release":
+            device_ctrl = DeviceControl(
+                websocket_manager=manager, smart_shooter=smart_shooter
+            )
+            device_ctrl.set_stepper_disable("mcu", False)
         case _:
             data = manager.jsonMessage(code=1, msg="未知消息")
             await manager.send_personal_message(data, websocket)