Skip to content

Commit 6c815f6

Browse files
authored
Merge pull request #41 from pawanw17/pawan/launchers_patch
Unifying launchers
2 parents cdc7a5f + fbf0474 commit 6c815f6

7 files changed

Lines changed: 107 additions & 250 deletions
Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,44 @@
1-
"""Launcher for Console"""""
2-
import time
31
from src.manager.manager.launcher.launcher_interface import ILauncher
42
from src.manager.manager.docker_thread.docker_thread import DockerThread
5-
3+
from src.manager.manager.vnc.vnc_server import Vnc_server
4+
import time
5+
import os
6+
import stat
67

78

89
class LauncherConsole(ILauncher):
9-
"""Launcher for Console"""
1010
display: str
1111
internal_port: str
1212
external_port: str
1313
running = False
1414
threads = []
1515

1616
def run(self, callback):
17-
xserver_cmd = f"/usr/bin/Xorg -noreset +extension GLX +extension RANDR +extension RENDER -logfile ./xdummy.log -config ./xorg.conf {self.display}"
18-
xserver_thread = DockerThread(xserver_cmd)
19-
xserver_thread.start()
20-
self.threads.append(xserver_thread)
21-
time.sleep(0.1)
22-
# Start VNC server without password, forever running in background
23-
x11vnc_cmd = f"x11vnc -display {self.display} -nopw -forever -xkb -bg -rfbport {self.internal_port}"
24-
x11vnc_thread = DockerThread(x11vnc_cmd)
25-
x11vnc_thread.start()
26-
self.threads.append(x11vnc_thread)
27-
28-
# Start noVNC with default port 6080 listening to VNC server on 5900
29-
novnc_cmd = f"/noVNC/utils/launch.sh --listen {self.external_port} --vnc localhost:{self.internal_port}"
30-
novnc_thread = DockerThread(novnc_cmd)
31-
novnc_thread.start()
32-
self.threads.append(novnc_thread)
33-
34-
# Write display config and start the console
35-
console_cmd = "export DISPLAY=:1;xterm -geometry 100x10+0+0 -fa 'Monospace' -fs 10 -bg black -fg white"
17+
DRI_PATH = os.path.join("/dev/dri", os.environ.get("DRI_NAME", "card0"))
18+
ACCELERATION_ENABLED = self.check_device(DRI_PATH)
19+
20+
console_vnc = Vnc_server()
21+
22+
if (ACCELERATION_ENABLED):
23+
console_vnc.start_vnc_gpu(self.display, self.internal_port, self.external_port,DRI_PATH)
24+
# Write display config and start the console
25+
console_cmd = f"export VGL_DISPLAY={DRI_PATH}; export DISPLAY={self.display}; vglrun xterm -fullscreen -sb -fa 'Monospace' -fs 10 -bg black -fg white"
26+
else:
27+
console_vnc.start_vnc(self.display, self.internal_port, self.external_port)
28+
# Write display config and start the console
29+
console_cmd = f"export DISPLAY={self.display};xterm -geometry 100x10+0+0 -fa 'Monospace' -fs 10 -bg black -fg white"
30+
3631
console_thread = DockerThread(console_cmd)
3732
console_thread.start()
3833
self.threads.append(console_thread)
3934

4035
self.running = True
36+
37+
def check_device(self, device_path):
38+
try:
39+
return stat.S_ISCHR(os.lstat(device_path)[stat.ST_MODE])
40+
except:
41+
return False
4142

4243
def is_running(self):
4344
return self.running
@@ -49,4 +50,4 @@ def terminate(self):
4950
self.running = False
5051

5152
def died(self):
52-
pass
53+
pass

manager/manager/launcher/launcher_console_ros2.py

Lines changed: 0 additions & 53 deletions
This file was deleted.
Lines changed: 34 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1-
"""Launcher for Gazebo View"""""
2-
import time
31
from src.manager.manager.launcher.launcher_interface import ILauncher
42
from src.manager.manager.docker_thread.docker_thread import DockerThread
5-
3+
from src.manager.manager.vnc.vnc_server import Vnc_server
4+
import time
5+
import os
6+
import stat
67

78

89
class LauncherGazeboView(ILauncher):
9-
"""Launcher for Gazebo View"""
10+
exercise_id: str
1011
display: str
1112
internal_port: str
1213
external_port: str
@@ -16,35 +17,43 @@ class LauncherGazeboView(ILauncher):
1617
threads = []
1718

1819
def run(self, callback):
19-
xserver_cmd = f"/usr/bin/Xorg -noreset +extension GLX +extension RANDR +extension RENDER -logfile ./xdummy.log -config ./xorg.conf {self.display}"
20-
xserver_thread = DockerThread(xserver_cmd)
21-
xserver_thread.start()
22-
self.threads.append(xserver_thread)
23-
time.sleep(0.1)
24-
# Start VNC server without password, forever running in background
25-
x11vnc_cmd = f"x11vnc -display {self.display} -nopw -forever -xkb -bg -rfbport {self.internal_port}"
26-
x11vnc_thread = DockerThread(x11vnc_cmd)
27-
x11vnc_thread.start()
28-
self.threads.append(x11vnc_thread)
29-
30-
# Start noVNC with default port 6080 listening to VNC server on 5900
31-
novnc_cmd = f"/noVNC/utils/launch.sh --listen {self.external_port} --vnc localhost:{self.internal_port}"
32-
novnc_thread = DockerThread(novnc_cmd)
33-
novnc_thread.start()
34-
self.threads.append(novnc_thread)
20+
DRI_PATH = os.path.join(
21+
"/dev/dri", os.environ.get("DRI_NAME", "card0"))
22+
ACCELERATION_ENABLED = self.check_device(DRI_PATH)
3523

3624
# Configure browser screen width and height for gzclient
3725
gzclient_config_cmds = f"echo [geometry] > ~/.gazebo/gui.ini; echo x=0 >> ~/.gazebo/gui.ini; echo y=0 >> ~/.gazebo/gui.ini; echo width={self.width} >> ~/.gazebo/gui.ini; echo height={self.height} >> ~/.gazebo/gui.ini;"
38-
time.sleep(0.1)
39-
# Write display config and start gzclient
40-
gzclient_cmd = (
41-
f"export DISPLAY=:0; {gzclient_config_cmds} gzclient --verbose")
26+
gz_vnc = Vnc_server()
27+
28+
if ACCELERATION_ENABLED:
29+
gz_vnc.start_vnc_gpu(self.display, self.internal_port, self.external_port, DRI_PATH)
30+
# Write display config and start gzclient
31+
gzclient_cmd = (
32+
f"export DISPLAY=:0; {gzclient_config_cmds} export VGL_DISPLAY={DRI_PATH}; vglrun gzclient --verbose")
33+
else:
34+
gz_vnc.start_vnc(self.display, self.internal_port, self.external_port)
35+
# Write display config and start gzclient
36+
gzclient_cmd = (
37+
f"export DISPLAY=:0; {gzclient_config_cmds} gzclient --verbose")
38+
39+
# wait for vnc and gazebo servers to load properly
40+
if (self.exercise_id == "follow_person_newmanager"):
41+
time.sleep(6)
42+
else:
43+
time.sleep(0.1)
44+
4245
gzclient_thread = DockerThread(gzclient_cmd)
4346
gzclient_thread.start()
4447
self.threads.append(gzclient_thread)
4548

4649
self.running = True
4750

51+
def check_device(self, device_path):
52+
try:
53+
return stat.S_ISCHR(os.lstat(device_path)[stat.ST_MODE])
54+
except:
55+
return False
56+
4857
def is_running(self):
4958
return self.running
5059

@@ -55,4 +64,4 @@ def terminate(self):
5564
self.running = False
5665

5766
def died(self):
58-
pass
67+
pass

manager/manager/launcher/launcher_gazebo_view_ros2.py

Lines changed: 0 additions & 67 deletions
This file was deleted.
Lines changed: 33 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
from src.manager.manager.launcher.launcher_interface import ILauncher
22
from src.manager.manager.docker_thread.docker_thread import DockerThread
3+
from src.manager.manager.vnc.vnc_server import Vnc_server
34
import time
5+
import os
6+
import stat
47

58

69
class LauncherRobotDisplayView(ILauncher):
@@ -10,34 +13,43 @@ class LauncherRobotDisplayView(ILauncher):
1013
height: int
1114
width: int
1215
running = False
16+
threads = []
1317

1418
def run(self, callback):
15-
xserver_cmd = f"/usr/bin/Xorg -noreset +extension GLX +extension RANDR +extension RENDER -logfile ./xdummy.log -config ./xorg.conf {self.display}"
16-
xserver_thread = DockerThread(xserver_cmd)
17-
xserver_thread.start()
18-
time.sleep(0.1)
19-
# Start VNC server without password, forever running in background
20-
x11vnc_cmd = f"x11vnc -display {self.display} -nopw -forever -xkb -bg -rfbport {self.internal_port}"
21-
x11vnc_thread = DockerThread(x11vnc_cmd)
22-
x11vnc_thread.start()
23-
24-
# Start noVNC with default port 2303 listening to VNC server on 5902
25-
novnc_cmd = f"/noVNC/utils/launch.sh --listen {self.external_port} --vnc localhost:{self.internal_port}"
26-
novnc_thread = DockerThread(novnc_cmd)
27-
novnc_thread.start()
28-
29-
# Write display config and start RobotDisplayViewVNC
30-
robot_cmd = (f"export DISPLAY=2;")
31-
robot_thread = DockerThread(robot_cmd)
32-
33-
robot_thread.start()
34-
self.running = True
19+
DRI_PATH = os.path.join("/dev/dri", os.environ.get("DRI_NAME", "card0"))
20+
ACCELERATION_ENABLED = self.check_device(DRI_PATH)
21+
22+
robot_display_vnc = Vnc_server()
23+
24+
if (ACCELERATION_ENABLED):
25+
robot_display_vnc.start_vnc_gpu(self.display, self.internal_port, self.external_port,DRI_PATH)
26+
# Write display config and start the console
27+
console_cmd = f"export VGL_DISPLAY={DRI_PATH}; export DISPLAY={self.display}; /usr/bin/Xorg -noreset +extension GLX +extension RANDR +extension RENDER -logfile ./xdummy.log -config ./xorg.conf {self.display}"
28+
else:
29+
robot_display_vnc.start_vnc(self.display, self.internal_port, self.external_port)
30+
# Write display config and start the console
31+
console_cmd = f"export DISPLAY={self.display};/usr/bin/Xorg -noreset +extension GLX +extension RANDR +extension RENDER -logfile ./xdummy.log -config ./xorg.conf {self.display}"
32+
33+
console_thread = DockerThread(console_cmd)
34+
console_thread.start()
35+
self.threads.append(console_thread)
36+
37+
self.running = True
38+
39+
def check_device(self, device_path):
40+
try:
41+
return stat.S_ISCHR(os.lstat(device_path)[stat.ST_MODE])
42+
except:
43+
return False
3544

3645
def is_running(self):
3746
return self.running
3847

3948
def terminate(self):
40-
pass
49+
for thread in self.threads:
50+
thread.terminate()
51+
thread.join()
52+
self.running = False
4153

4254
def died(self):
4355
pass

0 commit comments

Comments
 (0)