Robotics
ONNX
English
Chinese
real-world
dual-arm
whole body control
manipulation
zjt2656404169 commited on
Commit
6d34989
·
verified ·
1 Parent(s): 77e28ab

Upload 3 files

Browse files
G0_Images/g0_ros2_v3_client/data/docker_g0_hs_start_v3_1-lite.sh ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ SESSION_NAME="g0_three_tasks"
5
+ CURL_RETRIES=5
6
+ CURL_SLEEP=2
7
+
8
+
9
+ # 函数:显示用法
10
+ usage() {
11
+ echo "用法: $0 <0或1>"
12
+ echo " 0 - 表示VLM使用默认Gemini"
13
+ echo " 1 - 表示VLM使用Qwen"
14
+ }
15
+
16
+ # 检查参数
17
+ if [ $# -ne 1 ]; then
18
+ echo "错误: 需要一个参数0或1,用于选择VLM使用模型"
19
+ usage
20
+ exit 1
21
+ fi
22
+
23
+ VLM_USE_QWEN=$1
24
+
25
+ if tmux has-session -t "${SESSION_NAME}" 2>/dev/null; then
26
+ echo "已存在tmux session: ${SESSION_NAME},正在清除进程..."
27
+ tmux kill-session -t "${SESSION_NAME}"
28
+ echo "原tmux session: ${SESSION_NAME}已killed!"
29
+ fi
30
+
31
+ ensure_tmux_installed() {
32
+ if ! command -v tmux >/dev/null 2>&1; then
33
+ echo "未检测到 tmux,正在安装..."
34
+ if command -v apt-get >/dev/null 2>&1; then
35
+ sudo apt-get update && sudo apt-get install -y tmux
36
+ elif command -v dnf >/dev/null 2>&1; then
37
+ sudo dnf install -y tmux
38
+ elif command -v yum >/dev/null 2>&1; then
39
+ sudo yum install -y tmux
40
+ elif command -v pacman >/dev/null 2>&1; then
41
+ sudo pacman -Sy --noconfirm tmux
42
+ else
43
+ echo "未找到已知包管理器,请手动安装 tmux 后重试。"
44
+ exit 1
45
+ fi
46
+ fi
47
+ }
48
+
49
+ create_tmux_windows_and_run() {
50
+ tmux new-session -d -s "${SESSION_NAME}" -n g0_VLA_node
51
+
52
+ # ---------------- Window 0 ----------------
53
+ CMD1="cd /home/ros/g0_ros2/galaxea_0 && \
54
+ python experiments/robot/galaxea_real/run.py --run_dir runs/pick_and_place_ckpt/ --ckpt-id 100000 --use-vlm --interface-config.with_torso --interface-config.with_chassis --enable_debug"
55
+ tmux send-keys -t "${SESSION_NAME}:0" "bash -lc '${CMD1}; exec \$SHELL'" C-m
56
+
57
+ # ---------------- Window 1 (简化版 Code2) ----------------
58
+ tmux new-window -t "${SESSION_NAME}" -n g0_VLM_node
59
+
60
+ # 使用未加单引号的 heredoc,这样 ${VLM_USE_QWEN} 会在此处被展开为实际值
61
+ CMD2=$(cat <<EOF
62
+ # 读取并规范化环境变量(在 tmux 窗口内运行)
63
+ # (这里会在构造 CMD2 时由父 shell 展开 ${VLM_USE_QWEN})
64
+
65
+ if [[ "${VLM_USE_QWEN}" == "1" ]]; then
66
+ echo "[Code2] VLM_USE_QWEN=1,直接使用 Qwen 模式启动(跳过代理与网络检测)..."
67
+ cd /home/ros/g0_ros2/Hierarchical_System || { echo "[Code2] 无法进入工作目录"; exec \$SHELL; }
68
+ ros2 run g0_vlm_node vlm_main -- --use-qwen
69
+ echo "[Code2] ros2 run 已退出,保留 shell 供查看。"
70
+ exec \$SHELL
71
+ fi
72
+
73
+ export https_proxy=http://127.0.0.1:7897
74
+ export http_proxy=http://127.0.0.1:7897
75
+ export all_proxy=http://127.0.0.1:7897
76
+
77
+ cd /home/ros/g0_ros2/Hierarchical_System || { echo "[Code2] 无法进入工作目录"; exec \$SHELL; }
78
+
79
+ echo "[Code2] VLM_USE_QWEN!=1,已设置代理,开始检查网络连通性(最多 5 次)..."
80
+ for i in {1..5}; do
81
+ RESP=\$(curl -sI --max-time 8 www.google.com | head -n 1)
82
+ echo "[尝试 #\$i] \$RESP"
83
+ if echo "\$RESP" | grep -q "200 OK"; then
84
+ echo "[Code2] 检测到 200 OK,启动 ROS2 节点(默认模式)..."
85
+ ros2 run g0_vlm_node vlm_main -- --no-use-qwen
86
+ echo "[Code2] ros2 run 已退出,保留 shell 供查看。"
87
+ exec \$SHELL
88
+ fi
89
+ sleep 2
90
+ done
91
+
92
+ echo "[Code2][错误] 多次尝试后仍无法获得 200 OK,停止执行 ros2 run。请检查代理或网络设置。"
93
+ exec \$SHELL
94
+ EOF
95
+ )
96
+
97
+ tmux send-keys -t "${SESSION_NAME}:1" "bash -lc '${CMD2}'" C-m
98
+
99
+ # ---------------- Window 2 ----------------
100
+ tmux new-window -t "${SESSION_NAME}" -n rosbridge_for_EHI
101
+ CMD3="ros2 launch rosbridge_server rosbridge_websocket_launch.xml"
102
+ tmux send-keys -t "${SESSION_NAME}:2" "bash -lc '${CMD3}; exec \$SHELL'" C-m
103
+
104
+ tmux select-window -t "${SESSION_NAME}:0"
105
+
106
+ echo "tmux 会话 ${SESSION_NAME} 已创建。"
107
+ echo "使用命令查看: tmux attach -t ${SESSION_NAME}"
108
+ }
109
+
110
+ main() {
111
+ ensure_tmux_installed
112
+ create_tmux_windows_and_run
113
+ }
114
+
115
+ main
G0_Images/g0_ros2_v3_client/g0_hs_start_v3_1-lite-client.sh ADDED
@@ -0,0 +1,141 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ # ------------------ 循环输入:EXEC_MODE ------------------
5
+ while true; do
6
+ echo "请输入执行模式(0 或 1,按 q 退出):"
7
+ echo "0: 初次执行(docker run,并拷贝权重文件)"
8
+ echo "1: 二次执行(docker start,仅一键拉起双系统Docker容器)"
9
+ read -r EXEC_MODE
10
+
11
+ if [[ "$EXEC_MODE" == "q" ]]; then
12
+ echo "已退出。"
13
+ exit 0
14
+ fi
15
+
16
+ if [[ "$EXEC_MODE" == "0" || "$EXEC_MODE" == "1" ]]; then
17
+ break
18
+ else
19
+ echo "输入无效,请重新输入。"
20
+ fi
21
+ done
22
+
23
+ # ------------------ 循环输入:USE_QWEN_FLAG ------------------
24
+ while true; do
25
+ echo "是否启用 VLM 的 Qwen 模型?(0 或 1,按 q 退出)"
26
+ echo "0: 不启用(使用默认 Gemini,注意宿主机需正确配置代理)"
27
+ echo "1: 启用(宿主机无需代理)"
28
+ read -r USE_QWEN_FLAG
29
+
30
+ if [[ "$USE_QWEN_FLAG" == "q" ]]; then
31
+ echo "已退出。"
32
+ exit 0
33
+ fi
34
+
35
+ if [[ "$USE_QWEN_FLAG" == "0" || "$USE_QWEN_FLAG" == "1" ]]; then
36
+ break
37
+ else
38
+ echo "输入无效,请重新输入。"
39
+ fi
40
+ done
41
+
42
+ # ------------------ 变量定义 ------------------
43
+ ckpt_dir_name="G0_Plus_P&P"
44
+ ckpt_id="282276"
45
+
46
+ if [[ "$USE_QWEN_FLAG" == "0" ]]; then
47
+ vlm_use_qwen="0"
48
+ else
49
+ vlm_use_qwen="1"
50
+ fi
51
+
52
+
53
+ echo "------------------当前配置------------------"
54
+ echo "Checkpoint 目录:${ckpt_dir_name}"
55
+ echo "Checkpoint ID:${ckpt_id}"
56
+ echo "VLM 使用 Qwen 模型:${vlm_use_qwen}"
57
+ echo "------------------------------------------"
58
+
59
+
60
+ DEFAULT_RLROBOT_PORT="180"
61
+ echo "请输入要使用的机器人端口ID 10.42.0.<PORT>(回车使用默认:${DEFAULT_RLROBOT_PORT}):"
62
+ read -r USER_RLROBOT_PORT
63
+
64
+ if [[ -z "$USER_RLROBOT_PORT" ]]; then
65
+ rlrobot_port="$DEFAULT_RLROBOT_PORT"
66
+ else
67
+ rlrobot_port="$USER_RLROBOT_PORT"
68
+ fi
69
+
70
+
71
+
72
+ DEFAULT_CONTAINER="g0_ros2_v3_1-lite"
73
+
74
+ echo "【最后一项】请输入要使用的 Docker 容器名称(回车使用默认:${DEFAULT_CONTAINER}):"
75
+ read -r USER_CONTAINER_INPUT
76
+
77
+ if [[ -z "$USER_CONTAINER_INPUT" ]]; then
78
+ CONTAINER="$DEFAULT_CONTAINER"
79
+ else
80
+ CONTAINER="$USER_CONTAINER_INPUT"
81
+ fi
82
+
83
+
84
+
85
+ # ------------------ 根据 EXEC_MODE 执行不同命令 ------------------
86
+
87
+ if [[ "$EXEC_MODE" == "0" ]]; then
88
+ echo "执行模式 0:初次执行,启动容器..."
89
+ docker run -itd --name "$CONTAINER" \
90
+ --network host --gpus all --shm-size 256G -e DISPLAY="$DISPLAY" \
91
+ -v /tmp/.X11-unix:/tmp/.X11-unix:rw \
92
+ -v "$HOME/g0_ros2_v3/data":/data \
93
+ -v /usr/local/cuda-12.4:/usr/local/cuda-12.4:ro \
94
+ -e CUDA_HOME=/usr/local/cuda-12.4 \
95
+ -e LD_LIBRARY_PATH=/usr/local/cuda-12.4/lib64:${LD_LIBRARY_PATH:-} \
96
+ -u ros g0:ros2-v3.1-lite-client /bin/bash
97
+
98
+ echo "拷贝权重文件...拷贝配置文件..."
99
+
100
+ docker exec -it "$CONTAINER" bash -lc "\
101
+ cp -f /data/docker_g0_hs_start_v3_1-lite.sh /home/ros/docker_g0_hs_start_v3_1-lite.sh && \
102
+ mkdir -p /home/ros/g0_ros2/galaxea_0/google && \
103
+ rm -rf /home/ros/g0_ros2/galaxea_0/google && \
104
+ cp -a /data/google /home/ros/g0_ros2/galaxea_0/google && \
105
+ mkdir -p /home/ros/g0_ros2/galaxea_0/runs/pick_and_place_ckpt && \
106
+ rm -rf /home/ros/g0_ros2/galaxea_0/runs/pick_and_place_ckpt && \
107
+ cp -a /data/${ckpt_dir_name} /home/ros/g0_ros2/galaxea_0/runs/pick_and_place_ckpt && \
108
+ mv -f /home/ros/g0_ros2/galaxea_0/runs/pick_and_place_ckpt/model_${ckpt_id}.pt \
109
+ /home/ros/g0_ros2/galaxea_0/runs/pick_and_place_ckpt/model_100000.pt || true && \
110
+ echo \"export FASTRTPS_DEFAULT_PROFILES_FILE=/home/ros/super_client_configuration_file.xml\" >> /home/ros/.bashrc && \
111
+ sed \"s/RLROBOT_PORT/${rlrobot_port}/g\" \
112
+ /home/ros/super_client_configuration_file.xml.tpl \
113
+ > /home/ros/super_client_configuration_file.xml && \
114
+ cd /home/ros && \
115
+ chmod +x docker_g0_hs_start_v3_1-lite.sh && \
116
+ ./docker_g0_hs_start_v3_1-lite.sh ${vlm_use_qwen}"
117
+
118
+ else
119
+ echo "执行模式 1:将一键拉起双系统Docker容器,不进行拷贝。"
120
+ if ! docker inspect "$CONTAINER" >/dev/null 2>&1; then
121
+ echo "错误:容器 '$CONTAINER' 不存在。" >&2
122
+ exit 1
123
+ fi
124
+
125
+ is_running=$(docker inspect -f '{{.State.Running}}' "$CONTAINER")
126
+
127
+ if [ "$is_running" = "true" ]; then
128
+ echo "容器 '$CONTAINER' 已在运行,跳过 docker start。"
129
+ else
130
+ echo "容器 '$CONTAINER' 未运行,正在启动..."
131
+ docker start "$CONTAINER" || { echo "启动失败"; exit 1; }
132
+ fi
133
+ docker exec -it "$CONTAINER" bash -lc "\
134
+ cp -f /data/docker_g0_hs_start_v3_1-lite.sh /home/ros/docker_g0_hs_start_v3_1-lite.sh && \
135
+ cd /home/ros && \
136
+ chmod +x docker_g0_hs_start_v3_1-lite.sh && \
137
+ ./docker_g0_hs_start_v3_1-lite.sh ${vlm_use_qwen}"
138
+ fi
139
+
140
+ echo "执行完成!进入容器并附着 tmux 会话..."
141
+ docker exec -it "$CONTAINER" bash -lc "tmux a"
G0_Images/g0_ros2_v3_client/g0_ros2-v3.1-lite-client.tar ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:7eacf674d4403e31e43e2d5e3ff23978b86bf1eddc2d1d6899e70fa05efe113c
3
+ size 19851821056