File size: 3,929 Bytes
856afc3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
fp ?= 1 
lp ?= 0
name ?= edu3

# args = $(filter-out $@,$(MAKECMDGOALS))

# Start existing docker container 
# usage: make start e=<CONTAINER NAME>
start:
# 	pactl load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1
	make audio-set-host
	sudo docker start -i $(name)

# Run new docker container using existing image
# usage: make start e=<CONTAINER NAME>
run: 
	@# docker run --rm -it --gpus all -v "$$PWD":"/home/" -w /home --name ros nvidia/cuda:13.2.0-cudnn-devel-ubuntu24.04
	@# sudo docker run -it --gpus all --runtime=nvidia -v "$$PWD":"/home/" -w /home --name edurobot ros-ubuntu24
	@# sudo docker run -it --gpus all -v "$$PWD":"/home/" -w /home --name edurobot ros-ubuntu22
	@# -v $$XDG_RUNTIME_DIR/pulse/native:/tmp/runtime-dir/pulse/native:ro \

	sudo docker run -it \
		--gpus all \
		\
		--net host --privileged \
		--volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
		--device /dev/dri:/dev/dri \
		-v /dev:/dev \
		\
		-e DISPLAY=$$DISPLAY \
		-e WAYLAND_DISPLAY=$$WAYLAND_DISPLAY \
		-e XDG_RUNTIME_DIR=/tmp/runtime-dir \
		-v $$XDG_RUNTIME_DIR/$$WAYLAND_DISPLAY:/tmp/runtime-dir/$$WAYLAND_DISPLAY:ro \
		-v $$XDG_RUNTIME_DIR/pulse:/tmp/runtime-dir/pulse \
		-e PULSE_SERVER=unix:/tmp/runtime-dir/pulse/native \
		--device /dev/input \
		--device /dev/bus/usb \
		--device /dev/video0 --device /dev/video2 --device /dev/video4 \
		--volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
		\
		-v "$$PWD":"/home/" \
		-w /root \
		--name edu3 \
		ros-ubuntu22


r:
	sudo docker run -it \
		--gpus all \
		\
		-e WAYLAND_DISPLAY=$$WAYLAND_DISPLAY \
		-e XDG_RUNTIME_DIR=/tmp/runtime-dir \
		-v $$XDG_RUNTIME_DIR/$$WAYLAND_DISPLAY:/tmp/runtime-dir/$$WAYLAND_DISPLAY:ro \
		
		-v $$XDG_RUNTIME_DIR/pulse/native:/tmp/runtime-dir/pulse/native:ro \
		--device /dev/input \
		--device /dev/bus/usb \
		--device /dev/video0 --device /dev/video2 --device /dev/video4 \
		--volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
		--device /dev/dri:/dev/dri \
		\
		-v /dev:/dev \
		\
		-v "$$PWD":"/home/" \
		-w /root \
		--name edu2 \
		--rm \
		ros-ubuntu22

		
# Execute new terminal for existing running container 
# usage: make exec e=<CONTAINER NAME>
ID = $(shell id -u)
aa: 
	echo $(ID)
exec: 
	sudo docker exec -it $(name) bash
# 	sudo docker exec -e PULSE_SERVER=unix:/run/user/1005/pulse/native -it $(name) bash


# Remove container
# usage: make rm e=<CONTAINER NAME>
rm: 
	sudo docker rm $(name)

rmi: 
	sudo docker image rm $(name)

# Build from dockerfile
# usage: make build
build_img:
	@# docker build -t ros -f ros_dockerfile
	@# sudo docker build -t ros-ubuntu24 .
	sudo docker build -t ros-ubuntu22 .

# View active docker processes
# usage: make dps
dps:
	sudo docker ps -a 

# View existing images
# usage: make dps
dils:
	sudo docker image ls -a 

# Inspect container IP address 
# usage: make inspect_server env=<CONTAINER NAME>
inspect:
	sudo docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(name)

ros:
	bash setup_ros.sh



lfp: 
	lerobot-find-port
	
reset:
	python reset_env.py --port /dev/ttyACM${fp}

audio-set-host:
	xhost +local:docker
	pactl load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1

audio-test:
	arecord -f cd -d 5 test.wav && aplay test.wav && rm test.wav

# 	arecord -D hw:1,0 -f cd -d 5 test.wav && aplay test.wav && rm test.wav
# 	ffplay -f pulse -i default -showmode 2
# 	

audio-reset:
	systemctl --user restart pipewire
	pulseaudio -k && pulseaudio --start
	fuser -v /dev/snd/* 2>&1 | awk 'NR>1 {print $3}' | grep [0-9] | xargs kill -9 | 
	# print new PID 
	fuser -v /dev/snd/* 

	


cal-f:
	lerobot-calibrate \
			--robot.type=so101_follower \
			--robot.port=/dev/ttyACM1 \
			--robot.id=my_awesome_follower_arm


tel: 
	lerobot-teleoperate \
		--robot.type=so101_follower \
		--robot.port=/dev/ttyACM$(fp) \
		--robot.id=my_awesome_follower_arm \
		--teleop.type=so101_leader \
		--teleop.port=/dev/ttyACM$(lp) \
		--teleop.id=my_awesome_leader_arm