-
This commit is contained in:
+50
-14
@@ -254,19 +254,7 @@ class AGVCommandServer:
|
||||
def _connect_roboflow(self):
|
||||
self.roboflow = RoboFlowClient()
|
||||
if self.roboflow.connect():
|
||||
logger.info("RoboFlow 连接成功")
|
||||
# 连接成功后自动上电并激活机械臂
|
||||
time.sleep(1)
|
||||
try:
|
||||
resp = self.roboflow.send_recv("power_on()")
|
||||
logger.info(f"机械臂上电: {resp}")
|
||||
except Exception as e:
|
||||
logger.warning(f"机械臂上电失败: {e}")
|
||||
try:
|
||||
resp = self.roboflow.send_recv("state_on()")
|
||||
logger.info(f"机械臂激活: {resp}")
|
||||
except Exception as e:
|
||||
logger.warning(f"机械臂激活失败: {e}")
|
||||
logger.info("RoboFlow 连接成功(上电由 power_on_arm() 完成)")
|
||||
else:
|
||||
logger.warning("RoboFlow 连接失败,服务将以 limited 模式运行")
|
||||
|
||||
@@ -342,13 +330,61 @@ class AGVCommandServer:
|
||||
|
||||
|
||||
# ========== 入口 ==========
|
||||
import time
|
||||
|
||||
def power_on_arm(max_retries: int = 5) -> bool:
|
||||
"""通过 ElephantRobot 给机械臂上电并激活(带重试)"""
|
||||
from pymycobot import ElephantRobot
|
||||
|
||||
for attempt in range(1, max_retries + 1):
|
||||
try:
|
||||
logger.info(f"正在通过 ElephantRobot 连接 RoboFlow (尝试 {attempt}/{max_retries})...")
|
||||
el = ElephantRobot("127.0.0.1", 5001)
|
||||
el.start_client()
|
||||
logger.info("ElephantRobot start_client 成功,等待2秒...")
|
||||
time.sleep(2)
|
||||
|
||||
el._power_on()
|
||||
logger.info("power_on 指令已发送,等待2秒...")
|
||||
time.sleep(2)
|
||||
|
||||
el.start_robot()
|
||||
logger.info("start_robot 指令已发送,等待5秒...")
|
||||
time.sleep(5)
|
||||
logger.info("✅ 机械臂上电+激活 全部完成")
|
||||
return True
|
||||
except Exception as e:
|
||||
logger.warning(f"⚠️ 第 {attempt} 次尝试失败: {e}")
|
||||
if attempt < max_retries:
|
||||
logger.info(f"等待 3 秒后重试...")
|
||||
time.sleep(3)
|
||||
else:
|
||||
logger.error(f"❌ 所有 {max_retries} 次尝试均失败,将以 limited 模式运行")
|
||||
return False
|
||||
return False
|
||||
|
||||
|
||||
def main():
|
||||
import signal
|
||||
|
||||
# 先通过 ElephantRobot 给机械臂上电并激活
|
||||
power_on_arm()
|
||||
|
||||
server = AGVCommandServer(port=5002)
|
||||
|
||||
# 启动 Flask 视频流服务(端口 5003)
|
||||
arm_server_http = make_server("0.0.0.0", 5003, arm_video_app, threaded=True)
|
||||
from werkzeug.serving import make_server
|
||||
arm_server_http = None
|
||||
for attempt in range(5):
|
||||
try:
|
||||
arm_server_http = make_server("0.0.0.0", 5003, arm_video_app, threaded=True)
|
||||
break
|
||||
except OSError as e:
|
||||
if attempt < 4 and "Address already in use" in str(e):
|
||||
logger.warning(f"端口 5003 被占用(第{attempt+1}次),等待...")
|
||||
time.sleep(3)
|
||||
else:
|
||||
raise
|
||||
http_thread = threading.Thread(target=arm_server_http.serve_forever, daemon=True)
|
||||
http_thread.start()
|
||||
logger.info("机械臂视频流服务已启动: http://0.0.0.0:5003")
|
||||
|
||||
Reference in New Issue
Block a user