fp ?= 1 lp ?= 0 name ?= edu3 # args = $(filter-out $@,$(MAKECMDGOALS)) # Start existing docker container # usage: make start e= 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= 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= 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= 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= 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