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 |