From db466ddafba0cd81a652e5a8d1be71b27709411a Mon Sep 17 00:00:00 2001 From: wangWking <842749351@qq.com> Date: Thu, 8 Dec 2022 11:30:41 +0800 Subject: [PATCH] add aikit280 one touch start --- .../ai_mycobot_280/scripts/ai_windows.py | 191 ++++++++++++++++++ 1 file changed, 191 insertions(+) create mode 100644 mycobot_ai/ai_mycobot_280/scripts/ai_windows.py diff --git a/mycobot_ai/ai_mycobot_280/scripts/ai_windows.py b/mycobot_ai/ai_mycobot_280/scripts/ai_windows.py new file mode 100644 index 0000000..09ad47f --- /dev/null +++ b/mycobot_ai/ai_mycobot_280/scripts/ai_windows.py @@ -0,0 +1,191 @@ +#!/usr/bin/env python3 +# encoding:utf-8 + +from tkinter import ttk +from tkinter import * +import os,sys +import time +import subprocess + +import threading +from multiprocessing import Process + + +class Application(object): + def __init__(self): + self.win = Tk() + # 窗口置顶 + self.win.wm_attributes('-topmost', 1) + self.ros = False + # 运行的文件 + self.run_py = "" + # 判断通信口并给权限 + try: + self.robot_m5 = os.popen("ls /dev/ttyUSB*").readline()[:-1] + self.robot_wio = os.popen("ls /dev/ttyACM*").readline()[:-1] + self.robot_raspi = os.popen("ls /dev/ttyAMA*").readline()[:-1] + self.robot_jes = os.popen("ls /dev/ttyTHS1").readline()[:-1] + if "dev" in self.robot_wio: + self.set_file(self.robot_wio) + elif "dev" in self.robot_m5: + self.set_file(self.robot_m5) + elif "dev" in self.robot_raspi: + self.change_file(self.robot_raspi) + elif "dev" in self.robot_jes: + self.change_file(self.robot_jes) + except Exception as e: + pass + + # 设置标题 + self.win.title("aikit启动工具") + self.win.geometry( + "600x400+100+100") # 290 160为窗口大小,+10 +10 定义窗口弹出时的默认展示位置 + # 打开ros按钮 + self.btn = Button(self.win, text="open ROS", command=self.open_ros) + self.btn.grid(row=0) + + self.chanse_code = Label(self.win, text="选择程序:", width=10) + self.chanse_code.grid(row=1) + + self.myComboList = [u"颜色识别", u"物体识别", u"二维码识别"] + self.myCombox = ttk.Combobox(self.win, values=self.myComboList) + self.myCombox.grid(row=1, column=1) + + self.add_btn = Button(self.win, text="添加新的物体图像", command=self.add_img) + self.add_btn.grid(row=1, column=2) + + self.tips = "1、首先打开ros,大概需要等待5s\n2、选择所要运行的程序点击运行即可,开启大概需要10秒,可以通过查看终端查看开启情况。\n\n添加新的图像:\n1、点击按钮,等待开启摄像头\n2、选中图像框,按z键拍照\n3、使用鼠标框出需要识别的图像区域\n4、按Enter键提取图像\n5、根据终端提示,输入数字(1~4)保存到相对应图像的文件夹,按下Enter键即可保存至对应文件夹。" + + self.btn = Button(self.win, text="运行", command=self.start_run) + self.btn.grid(row=5) + + self.close = Button(self.win, text="close", command=self.close_py) + self.close.grid(row=5, column=1) + + self.t2 = None + self.log_data = Text(self.win, width=74, height=20) + self.log_data.grid(row=16, column=0, columnspan=10) + self.log_data.insert(END, self.tips) + + # self.open_ros() + self.win.protocol('WM_DELETE_WINDOW', self.close_rviz) + + def close_rviz(self): + os.system( + "ps -ef | grep -E mycobot.rviz | grep -v 'grep' | awk '{print $2}' | xargs kill -9") + sys.exit(0) + + def set_file(self,port): + self.command = ''.format( + port) + # 根据通信口修改ros启动文件 + os.system( + "sed -i '2c {}' ~/catkin_ws/src/mycobot_ros/mycobot_ai/ai_mycobot_280/launch/vision_wio.launch" + .format(self.command)) + + def change_file(self, port): + command1 = ''.format(port) + command2 = ''.format(1000000) + # 根据通信口修改ros启动文件 + os.system( + "sed -i '2c {}' ~/catkin_ws/src/mycobot_ros/mycobot_ai/launch/vision.launch".format(command1)) + os.system( + "sed -i '3c {}' ~/catkin_ws/src/mycobot_ros/mycobot_ai/launch/vision.launch".format(command2)) + + def start_run(self): + try: + print(u"开始运行") + one = self.myCombox.get() + if one == u"颜色识别": + self.run_py = "combine_detect_obj_color.py" + t2 = threading.Thread(target=self.open_py1) + t2.setDaemon(True) + t2.start() + elif one == u"物体识别": + self.run_py = "combine_detect_obj_img_folder_opt.py" + t3 = threading.Thread(target=self.open_py) + t3.setDaemon(True) + t3.start() + elif one == u"二维码识别": + self.run_py = "detect_encode.py" + t3 = threading.Thread(target=self.open_py2) + t3.setDaemon(True) + t3.start() + except Exception as e: + self.tips = str(e) + self.log_data.insert(END, self.tips) + + def open_py(self): + os.system( + "cd /home/h/catkin_ws/src/mycobot_ros/mycobot_ai/ai_mycobot_280 && python scripts/combine_detect_obj_img_folder_opt.py" + ) + + def open_py1(self): + os.system( + "python ~/catkin_ws/src/mycobot_ros/mycobot_ai/ai_mycobot_280/scripts/combine_detect_obj_color.py" + ) + + def open_py2(self): + os.system( + "python ~/catkin_ws/src/mycobot_ros/mycobot_ai/ai_mycobot_280/scripts/detect_encode.py" + ) + + def add_img(self): + os.system( + "python ~/catkin_ws/src/mycobot_ros/mycobot_ai/ai_mycobot_280/scripts/add_img.py" + ) + + def open_ros(self): + if self.ros: + print("ros is opened") + return + # t1 = threading.Thread(target=self.ross) + # t1.setDaemon(True) + # t1.start() + self.ross() + self.ros = True + + def ross(self): + # os.system( + # "roslaunch ~/catkin_ws/src/mycobot_ros/mycobot_ai/ai_mycobot_280/launch/vision_wio.launch" + # ) + p = subprocess.Popen(["roslaunch", "/home/h/catkin_ws/src/mycobot_ros/mycobot_ai/ai_mycobot_280/launch/vision_wio.launch"],shell=False, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + + def close_py(self): + t1 = threading.Thread(target=self.close_p) + t1.setDaemon(True) + t1.start() + + def close_p(self): + # 关闭ai程序 + os.system("ps -ef | grep -E " + self.run_py + + " | grep -v 'grep' | awk '{print $2}' | xargs kill -9") + + def get_current_time(self): + # 日志时间 + """Get current time with format.""" + current_time = time.strftime("%Y-%m-%d %H:%M:%S", + time.localtime(time.time())) + return current_time + + def write_log_to_Text(self, logmsg): + # 设置日志函数 + global LOG_NUM + current_time = self.get_current_time() + logmsg_in = str(current_time) + " " + str(logmsg) + "\n" # 换行 + + if LOG_NUM <= 18: + self.log_data_Text.insert(END, logmsg_in) + LOG_NUM += len(logmsg_in.split("\n")) + # print(LOG_NUM) + else: + self.log_data_Text.insert(END, logmsg_in) + self.log_data_Text.yview("end") + + def run(self): + self.win.mainloop() + + +if __name__ == "__main__": + mc = Application() + mc.run()