解决点云投影与姿态欧拉角的转换关系
This commit is contained in:
parent
1967009793
commit
82480f4a7b
@ -5,7 +5,7 @@ Wants=network-online.target
|
|||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
Type=simple
|
Type=simple
|
||||||
WorkingDirectory=/home/jsfb/jsfb_ws/MassageRobot_aubo/IoT
|
WorkingDirectory=/home/jsfb/jsfb_ws/MassageRobot_Dobot/IoT
|
||||||
Environment="PATH=/home/jsfb/anaconda3/envs/CPU_robotarm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
Environment="PATH=/home/jsfb/anaconda3/envs/CPU_robotarm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
||||||
ExecStart=/home/jsfb/anaconda3/envs/CPU_robotarm/bin/python iot_lite.pyc
|
ExecStart=/home/jsfb/anaconda3/envs/CPU_robotarm/bin/python iot_lite.pyc
|
||||||
Restart=always
|
Restart=always
|
||||||
|
@ -976,10 +976,10 @@ class OTAListener(OTAListener):
|
|||||||
# 获取当前脚本所在目录的上一级目录
|
# 获取当前脚本所在目录的上一级目录
|
||||||
base_path = os.path.dirname(os.path.dirname(current_path))
|
base_path = os.path.dirname(os.path.dirname(current_path))
|
||||||
|
|
||||||
# 检查当前路径是否包含 MassageRobot_aubo- 开头的文件夹名
|
# 检查当前路径是否包含 MassageRobot_Dobot- 开头的文件夹名
|
||||||
if "MassageRobot_aubo-" in base_path:
|
if "MassageRobot_Dobot-" in base_path:
|
||||||
# 提取版本号部分并去除后续目录部分
|
# 提取版本号部分并去除后续目录部分
|
||||||
version = base_path.split("MassageRobot_aubo-")[-1].split("/")[0]
|
version = base_path.split("MassageRobot_Dobot-")[-1].split("/")[0]
|
||||||
else:
|
else:
|
||||||
# 如果没有匹配的版本号,则返回默认值
|
# 如果没有匹配的版本号,则返回默认值
|
||||||
version = "default"
|
version = "default"
|
||||||
|
@ -14,11 +14,11 @@ current_file_path = os.path.abspath(__file__)
|
|||||||
Language_Path = os.path.dirname(os.path.dirname(os.path.dirname(current_file_path)))
|
Language_Path = os.path.dirname(os.path.dirname(os.path.dirname(current_file_path)))
|
||||||
# print("Language_Path:",Language_Path)
|
# print("Language_Path:",Language_Path)
|
||||||
# 找到上三级目录的父级(project_root),然后拼接目标文件夹路径
|
# 找到上三级目录的父级(project_root),然后拼接目标文件夹路径
|
||||||
MassageRobot_aubo_Path = os.path.dirname(Language_Path)
|
MassageRobot_Dobot_Path = os.path.dirname(Language_Path)
|
||||||
# print("MassageRobot_aubo_Path:",MassageRobot_aubo_Path)
|
# print("MassageRobot_Dobot_Path:",MassageRobot_Dobot_Path)
|
||||||
|
|
||||||
# 添加目标文件夹到系统路径
|
# 添加目标文件夹到系统路径
|
||||||
sys.path.append(MassageRobot_aubo_Path)
|
sys.path.append(MassageRobot_Dobot_Path)
|
||||||
|
|
||||||
# # 测试
|
# # 测试
|
||||||
try:
|
try:
|
||||||
|
@ -13,11 +13,11 @@ current_file_path = os.path.abspath(__file__)
|
|||||||
Language_Path = os.path.dirname(os.path.dirname(os.path.dirname(current_file_path)))
|
Language_Path = os.path.dirname(os.path.dirname(os.path.dirname(current_file_path)))
|
||||||
# print("Language_Path:",Language_Path)
|
# print("Language_Path:",Language_Path)
|
||||||
# 找到上三级目录的父级(project_root),然后拼接目标文件夹路径
|
# 找到上三级目录的父级(project_root),然后拼接目标文件夹路径
|
||||||
MassageRobot_aubo_Path = os.path.dirname(Language_Path)
|
MassageRobot_Dobot_Path = os.path.dirname(Language_Path)
|
||||||
# print("MassageRobot_aubo_Path:",MassageRobot_aubo_Path)
|
# print("MassageRobot_Dobot_Path:",MassageRobot_Dobot_Path)
|
||||||
|
|
||||||
# 添加目标文件夹到系统路径
|
# 添加目标文件夹到系统路径
|
||||||
sys.path.append(MassageRobot_aubo_Path)
|
sys.path.append(MassageRobot_Dobot_Path)
|
||||||
|
|
||||||
# # 测试
|
# # 测试
|
||||||
try:
|
try:
|
||||||
|
@ -30,9 +30,9 @@ import os
|
|||||||
import copy
|
import copy
|
||||||
current_file_path = os.path.abspath(__file__)
|
current_file_path = os.path.abspath(__file__)
|
||||||
Language_Path = os.path.dirname(os.path.dirname(os.path.dirname(current_file_path)))
|
Language_Path = os.path.dirname(os.path.dirname(os.path.dirname(current_file_path)))
|
||||||
MassageRobot_aubo_Path = os.path.dirname(Language_Path)
|
MassageRobot_Dobot_Path = os.path.dirname(Language_Path)
|
||||||
print("MassageRobot_aubo_Path:",MassageRobot_aubo_Path)
|
print("MassageRobot_Dobot_Path:",MassageRobot_Dobot_Path)
|
||||||
sys.path.append(MassageRobot_aubo_Path)
|
sys.path.append(MassageRobot_Dobot_Path)
|
||||||
from VortXDB.client import VTXClient
|
from VortXDB.client import VTXClient
|
||||||
# 自定义输出类,将输出同时发送到终端和日志文件
|
# 自定义输出类,将输出同时发送到终端和日志文件
|
||||||
class MultiWriter:
|
class MultiWriter:
|
||||||
|
@ -149,7 +149,7 @@ if __name__ == "__main__":
|
|||||||
# 启动线程A,优先级为5
|
# 启动线程A,优先级为5
|
||||||
threading.Thread(
|
threading.Thread(
|
||||||
target=thread_play,
|
target=thread_play,
|
||||||
args=("/home/jsfb/jsfb_ws/MassageRobot_aubo/Language/pre_mp3/按摩已结束.mp3", 10),
|
args=("/home/jsfb/jsfb_ws/MassageRobot_Dobot/Language/pre_mp3/按摩已结束.mp3", 10),
|
||||||
).start()
|
).start()
|
||||||
|
|
||||||
# time.sleep(2)
|
# time.sleep(2)
|
||||||
@ -157,7 +157,7 @@ if __name__ == "__main__":
|
|||||||
# 启动线程B,优先级为7(更高),强制停止A并播放新的音频
|
# 启动线程B,优先级为7(更高),强制停止A并播放新的音频
|
||||||
threading.Thread(
|
threading.Thread(
|
||||||
target=thread_play,
|
target=thread_play,
|
||||||
args=("/home/jsfb/jsfb_ws/MassageRobot_aubo/Language/pre_mp3/我在/audio_1.mp3", 10),
|
args=("/home/jsfb/jsfb_ws/MassageRobot_Dobot/Language/pre_mp3/我在/audio_1.mp3", 10),
|
||||||
).start()
|
).start()
|
||||||
|
|
||||||
time.sleep(2)
|
time.sleep(2)
|
||||||
@ -165,7 +165,7 @@ if __name__ == "__main__":
|
|||||||
# 启动线程C,优先级为3(更低),不会打断线程B的播放
|
# 启动线程C,优先级为3(更低),不会打断线程B的播放
|
||||||
threading.Thread(
|
threading.Thread(
|
||||||
target=thread_play,
|
target=thread_play,
|
||||||
args=("/home/jsfb/jsfb_ws/MassageRobot_aubo/Language/pre_mp3/完成复位.mp3", 3),
|
args=("/home/jsfb/jsfb_ws/MassageRobot_Dobot/Language/pre_mp3/完成复位.mp3", 3),
|
||||||
).start()
|
).start()
|
||||||
|
|
||||||
time.sleep(2)
|
time.sleep(2)
|
||||||
@ -173,7 +173,7 @@ if __name__ == "__main__":
|
|||||||
# 启动线程D,优先级为5
|
# 启动线程D,优先级为5
|
||||||
threading.Thread(
|
threading.Thread(
|
||||||
target=thread_play,
|
target=thread_play,
|
||||||
args=("/home/jsfb/jsfb_ws/MassageRobot_aubo/Language/pre_mp3/connect_successfully.mp3", 5),
|
args=("/home/jsfb/jsfb_ws/MassageRobot_Dobot/Language/pre_mp3/connect_successfully.mp3", 5),
|
||||||
).start()
|
).start()
|
||||||
|
|
||||||
time.sleep(2)
|
time.sleep(2)
|
||||||
|
@ -14,9 +14,9 @@ from tools.log import CustomLogger
|
|||||||
import os
|
import os
|
||||||
current_file_path = os.path.abspath(__file__)
|
current_file_path = os.path.abspath(__file__)
|
||||||
Language_Path = os.path.dirname(os.path.dirname(os.path.dirname(current_file_path)))
|
Language_Path = os.path.dirname(os.path.dirname(os.path.dirname(current_file_path)))
|
||||||
MassageRobot_aubo_Path = os.path.dirname(Language_Path)
|
MassageRobot_Dobot_Path = os.path.dirname(Language_Path)
|
||||||
print("MassageRobot_aubo_Path:",MassageRobot_aubo_Path)
|
print("MassageRobot_Dobot_Path:",MassageRobot_Dobot_Path)
|
||||||
sys.path.append(MassageRobot_aubo_Path)
|
sys.path.append(MassageRobot_Dobot_Path)
|
||||||
from VortXDB.client import VTXClient
|
from VortXDB.client import VTXClient
|
||||||
|
|
||||||
# 获取当前文件的父目录的上三级路径
|
# 获取当前文件的父目录的上三级路径
|
||||||
@ -296,5 +296,5 @@ if __name__ == '__main__':
|
|||||||
# text,if_timeout,remaining_time = recognizer.speech_recognize()
|
# text,if_timeout,remaining_time = recognizer.speech_recognize()
|
||||||
# print(text,if_timeout)
|
# print(text,if_timeout)
|
||||||
## 音频语音识别
|
## 音频语音识别
|
||||||
# recognizer.speech_recognize_UI("/home/jsfb/jsfb_ws/MassageRobot_aubo/tmp/speech_audio.mp3")
|
# recognizer.speech_recognize_UI("/home/jsfb/jsfb_ws/MassageRobot_Dobot/tmp/speech_audio.mp3")
|
||||||
recognizer.test_token()
|
recognizer.test_token()
|
@ -13,9 +13,9 @@ from tools.log import CustomLogger
|
|||||||
import os
|
import os
|
||||||
current_file_path = os.path.abspath(__file__)
|
current_file_path = os.path.abspath(__file__)
|
||||||
Language_Path = os.path.dirname(os.path.dirname(os.path.dirname(current_file_path)))
|
Language_Path = os.path.dirname(os.path.dirname(os.path.dirname(current_file_path)))
|
||||||
MassageRobot_aubo_Path = os.path.dirname(Language_Path)
|
MassageRobot_Dobot_Path = os.path.dirname(Language_Path)
|
||||||
print("MassageRobot_aubo_Path:",MassageRobot_aubo_Path)
|
print("MassageRobot_Dobot_Path:",MassageRobot_Dobot_Path)
|
||||||
sys.path.append(MassageRobot_aubo_Path)
|
sys.path.append(MassageRobot_Dobot_Path)
|
||||||
from VortXDB.client import VTXClient
|
from VortXDB.client import VTXClient
|
||||||
|
|
||||||
# aliyun语音合成
|
# aliyun语音合成
|
||||||
@ -129,7 +129,7 @@ if __name__ == '__main__':
|
|||||||
from Audio_player import AudioPlayer
|
from Audio_player import AudioPlayer
|
||||||
def parse_args():
|
def parse_args():
|
||||||
parser = argparse.ArgumentParser(description='Speech processor')
|
parser = argparse.ArgumentParser(description='Speech processor')
|
||||||
parser.add_argument('--synthesizer_config_path', type=str, default='/home/jsfb/jsfb_ws/MassageRobot_aubo/Language/Speech_processor/config/aliyun_synthesize_config.yaml')
|
parser.add_argument('--synthesizer_config_path', type=str, default='/home/jsfb/jsfb_ws/MassageRobot_Dobot/Language/Speech_processor/config/aliyun_synthesize_config.yaml')
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
return args
|
return args
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@ Wants=network-online.target
|
|||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
Type=simple
|
Type=simple
|
||||||
WorkingDirectory=/home/jsfb/jsfb_ws/MassageRobot_aubo/Language
|
WorkingDirectory=/home/jsfb/jsfb_ws/MassageRobot_Dobot/Language
|
||||||
Environment="PATH=/home/jsfb/anaconda3/envs/CPU_robotarm/bin"
|
Environment="PATH=/home/jsfb/anaconda3/envs/CPU_robotarm/bin"
|
||||||
Environment="PULSE_SERVER=unix:/run/user/1000/pulse/native"
|
Environment="PULSE_SERVER=unix:/run/user/1000/pulse/native"
|
||||||
Environment="DISPLAY=:0"
|
Environment="DISPLAY=:0"
|
||||||
|
@ -5,7 +5,7 @@ Wants=network-online.target
|
|||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
Type=simple
|
Type=simple
|
||||||
WorkingDirectory=/home/jsfb/jsfb_ws/MassageRobot_aubo/License
|
WorkingDirectory=/home/jsfb/jsfb_ws/MassageRobot_Dobot/License
|
||||||
Environment="PATH=/home/jsfb/anaconda3/envs/CPU_robotarm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
Environment="PATH=/home/jsfb/anaconda3/envs/CPU_robotarm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
||||||
ExecStart=/home/jsfb/anaconda3/envs/CPU_robotarm/bin/python license_client.pyc
|
ExecStart=/home/jsfb/anaconda3/envs/CPU_robotarm/bin/python license_client.pyc
|
||||||
Restart=always
|
Restart=always
|
||||||
|
@ -26,7 +26,7 @@ import requests
|
|||||||
from tools.yaml_operator import read_yaml
|
from tools.yaml_operator import read_yaml
|
||||||
from tools.log import CustomLogger
|
from tools.log import CustomLogger
|
||||||
from typing import Literal
|
from typing import Literal
|
||||||
from MassageControl.MassageRobot_aubo import MassageRobot
|
from MassageControl.MassageRobot_nova5 import MassageRobot
|
||||||
from aucpuncture2point import ToolCamera, AbdomenDetector,BackDetector,LegDetector, CoordinateTransformer
|
from aucpuncture2point import ToolCamera, AbdomenDetector,BackDetector,LegDetector, CoordinateTransformer
|
||||||
from scipy.spatial.transform import Rotation as R
|
from scipy.spatial.transform import Rotation as R
|
||||||
from scipy.interpolate import make_interp_spline
|
from scipy.interpolate import make_interp_spline
|
||||||
@ -34,7 +34,7 @@ import matplotlib.pyplot as plt
|
|||||||
import datetime
|
import datetime
|
||||||
import shutil
|
import shutil
|
||||||
import importlib.util
|
import importlib.util
|
||||||
from MassageControl.hardware.force_sensor_aubo import XjcSensor
|
from MassageControl.hardware.force_sensor import XjcSensor
|
||||||
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||||
from VortXDB.client import VTXClient
|
from VortXDB.client import VTXClient
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@ sys.path.append(os.path.abspath(os.path.join(os.getcwd(), "Massage/MassageContro
|
|||||||
|
|
||||||
|
|
||||||
class XjcSensor:
|
class XjcSensor:
|
||||||
def __init__(self, port="/dev/ttyUSB0", baudrate=115200, rate=100):
|
def __init__(self, port=None, baudrate=115200, rate=250):
|
||||||
self.port = port
|
self.port = port
|
||||||
self.baudrate = baudrate
|
self.baudrate = baudrate
|
||||||
self.rate = rate
|
self.rate = rate
|
||||||
@ -29,6 +29,9 @@ class XjcSensor:
|
|||||||
self._last_reading = None
|
self._last_reading = None
|
||||||
self._reading_lock = threading.Lock()
|
self._reading_lock = threading.Lock()
|
||||||
|
|
||||||
|
if not self.port:
|
||||||
|
self.port = self.find_sensor_port()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.connect()
|
self.connect()
|
||||||
atexit.register(self.disconnect)
|
atexit.register(self.disconnect)
|
||||||
@ -48,6 +51,32 @@ class XjcSensor:
|
|||||||
def connect(self):
|
def connect(self):
|
||||||
self.ser = serial.Serial(self.port, self.baudrate,timeout=0.1)
|
self.ser = serial.Serial(self.port, self.baudrate,timeout=0.1)
|
||||||
|
|
||||||
|
def find_sensor_port(self):
|
||||||
|
"""寻找对应六维力传感器的串口"""
|
||||||
|
try:
|
||||||
|
# 目标 YAML 文件路径
|
||||||
|
yaml_file_path = '/home/jsfb/jsfb_ws/global_config/force_sensor.yaml'
|
||||||
|
|
||||||
|
# 读取现有的 YAML 文件内容
|
||||||
|
with open(yaml_file_path, 'r') as file:
|
||||||
|
data = yaml.safe_load(file) # 读取并解析 YAML 内容
|
||||||
|
|
||||||
|
# 获取 target_usb_device_path 的值
|
||||||
|
target_usb_device_path = data.get('target_usb_device_path')
|
||||||
|
|
||||||
|
print(f"已成功将 target_usb_device_path 添加到 {yaml_file_path}")
|
||||||
|
|
||||||
|
ports = serial.tools.list_ports.comports()
|
||||||
|
for port in ports:
|
||||||
|
print(port.usb_device_path)
|
||||||
|
if target_usb_device_path == port.usb_device_path:
|
||||||
|
print(f"找到六维力传感器在端口: {port.usb_device_path}")
|
||||||
|
return port.device
|
||||||
|
print("未找到具有指定描述的六维力传感器。")
|
||||||
|
except Exception as e:
|
||||||
|
print(f"查找串口时发生错误: {e}")
|
||||||
|
return None
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def generate_crc16_table():
|
def generate_crc16_table():
|
||||||
table = []
|
table = []
|
||||||
|
40
Massage/MassageControl/hardware/test.py
Normal file
40
Massage/MassageControl/hardware/test.py
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
import numpy as np
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
from mpl_toolkits.mplot3d import Axes3D
|
||||||
|
from scipy.spatial.transform import Rotation as R
|
||||||
|
|
||||||
|
# 定义你的坐标系(原点 + 欧拉角,单位为角度)
|
||||||
|
frames = [
|
||||||
|
{"origin": [0, 0, 0], "euler": [0, 0, 0]},
|
||||||
|
{"origin": [2, 2, 2], "euler": [0, 150, 90]},
|
||||||
|
{"origin": [3, 3, 3], "euler": [-30, -180, 0]},
|
||||||
|
]
|
||||||
|
|
||||||
|
def draw_frame(ax, origin, rot_matrix, length=0.5):
|
||||||
|
origin = np.array(origin)
|
||||||
|
x_axis = origin + rot_matrix @ np.array([length, 0, 0])
|
||||||
|
y_axis = origin + rot_matrix @ np.array([0, length, 0])
|
||||||
|
z_axis = origin + rot_matrix @ np.array([0, 0, length])
|
||||||
|
ax.quiver(*origin, *(x_axis - origin), color='r')
|
||||||
|
ax.quiver(*origin, *(y_axis - origin), color='g')
|
||||||
|
ax.quiver(*origin, *(z_axis - origin), color='b')
|
||||||
|
|
||||||
|
fig = plt.figure()
|
||||||
|
ax = fig.add_subplot(111, projection='3d')
|
||||||
|
ax.set_box_aspect([1,1,1])
|
||||||
|
|
||||||
|
for frame in frames:
|
||||||
|
origin = frame["origin"]
|
||||||
|
euler_deg = frame["euler"]
|
||||||
|
rotation = R.from_euler('xyz', euler_deg, degrees=True)
|
||||||
|
rot_matrix = rotation.as_matrix()
|
||||||
|
draw_frame(ax, origin, rot_matrix)
|
||||||
|
|
||||||
|
ax.set_xlim(-1, 3)
|
||||||
|
ax.set_ylim(-1, 3)
|
||||||
|
ax.set_zlim(-1, 3)
|
||||||
|
ax.set_xlabel("X")
|
||||||
|
ax.set_ylabel("Y")
|
||||||
|
ax.set_zlabel("Z")
|
||||||
|
plt.title("Multiple 3D Coordinate Frames (Euler Angles)")
|
||||||
|
plt.show()
|
@ -8,7 +8,7 @@ import time
|
|||||||
from scipy.spatial.transform import Rotation as R
|
from scipy.spatial.transform import Rotation as R
|
||||||
|
|
||||||
sys.path.append(str(Path(__file__).resolve().parent.parent))
|
sys.path.append(str(Path(__file__).resolve().parent.parent))
|
||||||
sys.path.append('/home/jsfb/jsfb_ws/MassageRobot_aubo/Massage/MassageControl')
|
sys.path.append('/home/jsfb/jsfb_ws/MassageRobot_Dobot/Massage/MassageControl')
|
||||||
from hardware.remote_cam import ToolCamera
|
from hardware.remote_cam import ToolCamera
|
||||||
from hardware.aubo_C5 import AuboC5
|
from hardware.aubo_C5 import AuboC5
|
||||||
|
|
||||||
|
@ -380,9 +380,13 @@ class CoordinateTransformer:
|
|||||||
temp_point[:, :3] = point[:, :3]
|
temp_point[:, :3] = point[:, :3]
|
||||||
|
|
||||||
# 计算欧拉角
|
# 计算欧拉角
|
||||||
|
# temp_point[0][3] = -math.asin(point[0][4])
|
||||||
|
# temp_point[0][4] = -math.atan2(-point[0][3], point[0][5])
|
||||||
|
# temp_point[0][5] = 0.0
|
||||||
|
|
||||||
temp_point[0][3] = -math.asin(point[0][4])
|
temp_point[0][3] = -math.asin(point[0][4])
|
||||||
temp_point[0][4] = -math.atan2(-point[0][3], point[0][5])
|
temp_point[0][4] = math.atan2(point[0][3], point[0][5])
|
||||||
temp_point[0][5] = 0.0
|
temp_point[0][5] = -np.pi/2
|
||||||
|
|
||||||
# 确保角度在[-pi, pi]范围内
|
# 确保角度在[-pi, pi]范围内
|
||||||
if temp_point[0][5] > np.pi:
|
if temp_point[0][5] > np.pi:
|
||||||
|
@ -68,6 +68,6 @@ def display_rgb_point_cloud(rgb_image, depth_image, camera_intrinsics):
|
|||||||
o3d.visualization.draw_geometries([point_cloud])
|
o3d.visualization.draw_geometries([point_cloud])
|
||||||
|
|
||||||
intrinsics = {'fx': 454.114136, 'fy': 454.114136, 'cx': 325.119751, 'cy': 235.403824}
|
intrinsics = {'fx': 454.114136, 'fy': 454.114136, 'cx': 325.119751, 'cy': 235.403824}
|
||||||
color_image = cv2.imread('/home/jsfb/jsfb_ws/MassageRobot_aubo/Massage/aucpuncture2point/configs/using_img/color.png')
|
color_image = cv2.imread('/home/jsfb/jsfb_ws/MassageRobot_Dobot/Massage/aucpuncture2point/configs/using_img/color.png')
|
||||||
depth_img = cv2.imread('/home/jsfb/jsfb_ws/MassageRobot_aubo/Massage/aucpuncture2point/configs/using_img/depth.png', cv2.IMREAD_UNCHANGED)
|
depth_img = cv2.imread('/home/jsfb/jsfb_ws/MassageRobot_Dobot/Massage/aucpuncture2point/configs/using_img/depth.png', cv2.IMREAD_UNCHANGED)
|
||||||
display_rgb_point_cloud(color_image, depth_img, intrinsics)
|
display_rgb_point_cloud(color_image, depth_img, intrinsics)
|
@ -5,7 +5,7 @@ Wants=network-online.target
|
|||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
Type=simple
|
Type=simple
|
||||||
WorkingDirectory=/home/jsfb/jsfb_ws/MassageRobot_aubo/Massage/MassageControl/hardware/
|
WorkingDirectory=/home/jsfb/jsfb_ws/MassageRobot_Dobot/Massage/MassageControl/hardware/
|
||||||
Environment="PATH=/home/jsfb/anaconda3/envs/CPU_robotarm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
Environment="PATH=/home/jsfb/anaconda3/envs/CPU_robotarm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
||||||
ExecStart=/home/jsfb/anaconda3/envs/CPU_robotarm/bin/python controller.pyc
|
ExecStart=/home/jsfb/anaconda3/envs/CPU_robotarm/bin/python controller.pyc
|
||||||
Restart=on-failure
|
Restart=on-failure
|
||||||
|
@ -5,9 +5,9 @@ Wants=network-online.target
|
|||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
Type=simple
|
Type=simple
|
||||||
WorkingDirectory=/home/jsfb/jsfb_ws/MassageRobot_aubo/Massage
|
WorkingDirectory=/home/jsfb/jsfb_ws/MassageRobot_Dobot/Massage
|
||||||
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/jsfb/anaconda3/envs/CPU_robotarm/bin"
|
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/jsfb/anaconda3/envs/CPU_robotarm/bin"
|
||||||
ExecStart=/bin/bash -c "source /opt/ros/noetic/setup.bash; echo $PATH; exec /home/jsfb/anaconda3/envs/CPU_robotarm/bin/python /home/jsfb/jsfb_ws/MassageRobot_aubo/Massage/Massage.pyc"
|
ExecStart=/bin/bash -c "source /opt/ros/noetic/setup.bash; echo $PATH; exec /home/jsfb/anaconda3/envs/CPU_robotarm/bin/python /home/jsfb/jsfb_ws/MassageRobot_Dobot/Massage/Massage.pyc"
|
||||||
Restart=on-failure
|
Restart=on-failure
|
||||||
User=jsfb
|
User=jsfb
|
||||||
Group=jsfb
|
Group=jsfb
|
||||||
|
@ -8,7 +8,7 @@ import time
|
|||||||
import subprocess
|
import subprocess
|
||||||
import psutil
|
import psutil
|
||||||
import sys
|
import sys
|
||||||
# sys.path.append("/home/jsfb/jsfb_ws/MassageRobot_aubo/Massage/MassageControl")
|
# sys.path.append("/home/jsfb/jsfb_ws/MassageRobot_Dobot/Massage/MassageControl")
|
||||||
from tools.ssh_tools import execute_command_on_remote
|
from tools.ssh_tools import execute_command_on_remote
|
||||||
from tools.serial_tools import start_virtual_serial,stop_virtual_serial
|
from tools.serial_tools import start_virtual_serial,stop_virtual_serial
|
||||||
|
|
||||||
|
@ -8,8 +8,8 @@ current_file_path = os.path.abspath(__file__)
|
|||||||
current_file_floder = os.path.dirname(current_file_path)
|
current_file_floder = os.path.dirname(current_file_path)
|
||||||
Path = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(current_file_path))))
|
Path = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(current_file_path))))
|
||||||
print(Path)
|
print(Path)
|
||||||
MassageRobot_aubo_Path = os.path.dirname(Path)
|
MassageRobot_Dobot_Path = os.path.dirname(Path)
|
||||||
sys.path.append(MassageRobot_aubo_Path)
|
sys.path.append(MassageRobot_Dobot_Path)
|
||||||
|
|
||||||
from VortXDB.client import VTXClient
|
from VortXDB.client import VTXClient
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import os
|
import os
|
||||||
|
|
||||||
# 获取项目根目录的绝对路径(MassageRobot_aubo 目录)
|
# 获取项目根目录的绝对路径(MassageRobot_Dobot 目录)
|
||||||
BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||||
|
|
||||||
def read_log_file(log_type, keyword=None, page=1 , page_size=400):
|
def read_log_file(log_type, keyword=None, page=1 , page_size=400):
|
||||||
|
@ -5,7 +5,7 @@ Wants=network-online.target
|
|||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
Type=simple
|
Type=simple
|
||||||
WorkingDirectory=/home/jsfb/jsfb_ws/MassageRobot_aubo/UI_next
|
WorkingDirectory=/home/jsfb/jsfb_ws/MassageRobot_Dobot/UI_next
|
||||||
Environment="PATH=/home/jsfb/anaconda3/envs/CPU_robotarm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
Environment="PATH=/home/jsfb/anaconda3/envs/CPU_robotarm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
||||||
Environment="PULSE_SERVER=unix:/run/user/1000/pulse/native"
|
Environment="PULSE_SERVER=unix:/run/user/1000/pulse/native"
|
||||||
Environment="DISPLAY=:0"
|
Environment="DISPLAY=:0"
|
||||||
|
@ -6,7 +6,7 @@ Requires=NetworkManager.service
|
|||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
Type=simple
|
Type=simple
|
||||||
WorkingDirectory=/home/jsfb/jsfb_ws/MassageRobot_aubo/UI_next
|
WorkingDirectory=/home/jsfb/jsfb_ws/MassageRobot_Dobot/UI_next
|
||||||
Environment="PATH=/home/jsfb/anaconda3/envs/CPU_robotarm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
Environment="PATH=/home/jsfb/anaconda3/envs/CPU_robotarm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
||||||
Environment="PULSE_SERVER=unix:/run/user/1000/pulse/native"
|
Environment="PULSE_SERVER=unix:/run/user/1000/pulse/native"
|
||||||
Environment="DISPLAY=:0"
|
Environment="DISPLAY=:0"
|
||||||
|
2
setup.sh
2
setup.sh
@ -7,7 +7,7 @@ PASSWORD="jsfb"
|
|||||||
CURRENT_DIR=$(pwd)
|
CURRENT_DIR=$(pwd)
|
||||||
|
|
||||||
# 定义要替换的路径和新路径
|
# 定义要替换的路径和新路径
|
||||||
OLD_PATH="/home/jsfb/jsfb_ws/MassageRobot_aubo"
|
OLD_PATH="/home/jsfb/jsfb_ws/MassageRobot_Dobot"
|
||||||
NEW_PATH="$CURRENT_DIR"
|
NEW_PATH="$CURRENT_DIR"
|
||||||
|
|
||||||
# Conda 环境名称
|
# Conda 环境名称
|
||||||
|
21
版本说明.txt
21
版本说明.txt
@ -1,20 +1 @@
|
|||||||
MassageRobot_aubo-1.2.5-alpha-rc1 # 发往日本的稳定版本(无多语言)
|
|
||||||
MassageRobot_aubo-1.2.5-alpha-rc2 # 发往日本的稳定版本(多语言)10.25更新
|
|
||||||
MassageRobot_aubo-1.2.5-alpha-rc3 # 发往日本的稳定版本(多语言)10.25更新:修复断网可继续播音频问题
|
|
||||||
MassageRobot_aubo-1.2.5-alpha-rc4 # 发往日本的稳定版本(多语言)10.25更新:jiaru lichuanganqizhuantaipanduantangchuan
|
|
||||||
MassageRobot_aubo-1.2.5-alpha-rc5-yoyo # 发往日本的稳定版本(多语言)10.26更新:这个唤醒词为yoyo,修改按摩头、语音路径
|
|
||||||
MassageRobot_aubo-1.2.5-alpha-rc5-sakuna # 发往日本的稳定版本(多语言)10.26更新:这个唤醒词为heisakuna,修改按摩头、语音路径
|
|
||||||
MassageRobot_aubo-1.2.5-alpha-rc6-yoyo # 发往日本的稳定版本(多语言)10.26更新:这个唤醒词为yoyo,修改按摩头、语音路径,ota
|
|
||||||
MassageRobot_aubo-1.2.5-alpha-rc6-sakuna # 发往日本的稳定版本(多语言)10.26更新:这个唤醒词为heisakuna,修改按摩头、语音路径ota
|
|
||||||
MassageRobot_aubo-1.2.6-alpha-rc8-cn # 发往安徽版本 11.2更新:取消用戶取頭置零操作,以及新的視覺模型修改
|
|
||||||
MassageRobot_aubo-1.2.8-alpha-rc1-cn # 新发出去的三台前的稳定版本,加入稳定冲击波和滚珠
|
|
||||||
MassageRobot_aubo-1.2.8-alpha-rc2-cn # 加入滚珠揉腹部,设置中加入语音重启
|
|
||||||
MassageRobot_aubo-1.2.8-alpha-rc3-cn # 加入开发者虚拟模式支持空跑,进入设置需要密码
|
|
||||||
MassageRobot_aubo-1.2.8-alpha-rc4-cn # 去掉冲击波绝对路径
|
|
||||||
MassageRobot_aubo-1.2.8-alpha-rc8-cn # 1.滚珠改成不过脊柱轨迹;2.加入hybridPid控制方式
|
|
||||||
MassageRobot_aubo-1.2.8-alpha-rc9-cn # 旧版OTA的最后一个版本,用于衔接新版OTA
|
|
||||||
MassageRobot_aubo-1.2.9-alpha-cn # 新版OTA 语音加入唤醒词可选
|
|
||||||
MassageRobot_aubo-1.2.9-alpha-rc1-cn # ???
|
|
||||||
MassageRobot_aubo-1.2.9-alpha-rc2-cn # ???
|
|
||||||
MassageRobot_aubo-1.2.9-alpha-rc2-iot-cn # rc2版本的iot分支,用于测试iot lite版
|
|
||||||
MassageRobot_aubo-1.2.9-alpha-rc3-cn # 添加WiFi配网功能
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user