1 X2 MuJoCo 运控仿真
本页用于在 x86_64 Ubuntu 22.04 电脑上启动 MuJoCo、MC 和 AimDK 示例。支持本地部署和 Docker 部署两种方式。
1.1 目录
1.2 软件组成
组件 |
作用 |
启动入口 |
|---|---|---|
|
基于 MuJoCo 的物理仿真,模拟机器人本体(HAL 层) |
|
|
运动控制模块,运行步态和动作并输出关节命令 |
|
SDK( |
发送控制指令,提供 |
|
控制链路如下:
SDK(py_examples)──高层指令──▶ MC ──关节命令──▶ sim_mujoco
set_mc_action / 速度 / 动画 │ /aima/hal/joint/*/command
└──◀──关节和 IMU 状态── /aima/hal/joint/*/state, imu
1.3 前置条件
项目 |
要求 |
|---|---|
电脑 |
x86_64,建议 16 GiB 或以上内存 |
系统 |
Ubuntu 22.04,带图形桌面 |
网络 |
首次部署需要下载镜像或 Ubuntu 软件包 |
GPU |
可选,无 NVIDIA GPU 也可使用 |
选择一种部署方式:
方式 |
适用条件 |
|---|---|
本地部署 |
电脑已安装 ROS 2 Humble,并允许在宿主机安装依赖 |
Docker 部署(推荐) |
电脑已安装 Docker;宿主机无需安装 ROS 2 |
在宿主机确认 xhost 已安装:
if ! command -v xhost >/dev/null 2>&1; then
sudo apt update
sudo apt install -y x11-xserver-utils
fi
1.4 准备软件目录
将交付文件放到同一工作目录,目录名称和所在路径可自行选择:
x2_simulation/
├── aimdk/
├── sim_mujoco/
├── mc/
├── Dockerfile # 仅 Docker 部署需要
└── run_docker.sh # 仅 Docker 部署需要
进入工作目录:
cd <x2_simulation所在路径>/x2_simulation
1.5 方案一:本地部署
本方案不使用 Docker,MuJoCo、MC 和 AimDK 全部直接运行在 Ubuntu 22.04 宿主机上。
配置国内软件源
中国大陆网络建议先将 Ubuntu 和 ROS 2 软件源配置为阿里云镜像。先备份 Ubuntu 原软件源并替换下载地址:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo sed -i -E \
-e 's@https?://archive\.ubuntu\.com/ubuntu@https://mirrors.aliyun.com/ubuntu@g' \
-e 's@https?://security\.ubuntu\.com/ubuntu@https://mirrors.aliyun.com/ubuntu@g' \
-e 's@https?://cn\.archive\.ubuntu\.com/ubuntu@https://mirrors.aliyun.com/ubuntu@g' \
/etc/apt/sources.list
sudo apt update
sudo apt install -y curl gnupg2 dirmngr lsb-release ca-certificates
添加 ROS 2 软件源:
sudo mkdir -p /root/.gnupg
sudo chmod 700 /root/.gnupg
sudo gpg --no-default-keyring \
--keyring /usr/share/keyrings/ros-archive-keyring.gpg \
--keyserver hkp://keyserver.ubuntu.com:80 \
--recv-keys F42ED6FBAB17C654
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] https://mirrors.aliyun.com/ros2/ubuntu jammy main" | sudo tee /etc/apt/sources.list.d/ros2.list >/dev/null
安装依赖
sudo apt update
sudo apt install -y \
build-essential \
cmake \
libcurl4-openssl-dev \
libeigen3-dev \
libgflags-dev \
libgl1 \
libgl1-mesa-dri \
libglx-mesa0 \
libncurses-dev \
liboctomap1.9 \
libopencv-dev \
libscrypt0 \
libyaml-cpp-dev \
mesa-utils \
pkg-config \
python3-colcon-common-extensions \
ros-humble-desktop-full \
ros-humble-grid-map-msgs \
ros-humble-grid-map-ros \
ros-humble-rmw-fastrtps-cpp
创建 MC 运行时目录
sudo mkdir -p /agibot/data/var/
sudo chown "$USER:$USER" -R /agibot
构建 AimDK
cd <x2_simulation所在路径>/x2_simulation/aimdk
source /opt/ros/humble/setup.bash
colcon build
source install/local_setup.bash
终端 1:启动 MuJoCo
cd <x2_simulation所在路径>/x2_simulation
source /opt/ros/humble/setup.bash
export RMW_IMPLEMENTATION=rmw_fastrtps_cpp
cd sim_mujoco/bin
./start_sim.sh -s
MuJoCo 窗口显示机器人后,保持终端运行。
终端 2:启动 MC
新开一个宿主机终端:
cd <x2_simulation所在路径>/x2_simulation
source /opt/ros/humble/setup.bash
export RMW_IMPLEMENTATION=rmw_fastrtps_cpp
cd mc/bin
unset AGIBOT_SOFTWARE_HOME
./em_run.sh
终端 3:检查通信
再新开一个宿主机终端:
cd <x2_simulation所在路径>/x2_simulation/aimdk
source /opt/ros/humble/setup.bash
source install/local_setup.bash
export RMW_IMPLEMENTATION=rmw_fastrtps_cpp
ros2 run py_examples get_mc_action
返回 Mode name 和 Mode status 即表示通信正常。
1.6 方案二:Docker 部署
请先确认电脑已安装 Docker。
配置 Docker 镜像加速(宿主机)
中国大陆网络建议先配置 Docker 镜像加速。以下配置优先使用 DaoCloud 镜像代理,docker.1ms.run 作为备用:
sudo mkdir -p /etc/docker
sudo cp /etc/docker/daemon.json /etc/docker/daemon.json.bak 2>/dev/null || true
echo '{"registry-mirrors":["https://docker.m.daocloud.io","https://docker.1ms.run"]}' | sudo tee /etc/docker/daemon.json >/dev/null
sudo systemctl restart docker
下载 ROS 2 基础镜像(宿主机)
FROM osrf/ros:humble-desktop-full 表示以 ROS 2 Humble 官方镜像为基础创建新镜像。客户电脑不需要提前拥有该镜像,执行:
docker pull osrf/ros:humble-desktop-full
出现 Downloaded newer image 或 Image is up to date 即表示成功。
创建 MC 运行时目录(宿主机)
创建 MC 运行时所需目录:
sudo mkdir -p /agibot/data/var/
sudo chown "$USER:$USER" -R /agibot
创建 Dockerfile(宿主机)
在工作目录创建 Dockerfile,内容如下:
FROM osrf/ros:humble-desktop-full
ENV DEBIAN_FRONTEND=noninteractive
ENV RMW_IMPLEMENTATION=rmw_fastrtps_cpp
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
ca-certificates \
cmake \
curl \
libcurl4-openssl-dev \
libeigen3-dev \
libgflags-dev \
libgl1 \
libgl1-mesa-dri \
libglx-mesa0 \
libncurses-dev \
liboctomap1.9 \
libopencv-dev \
libscrypt0 \
libyaml-cpp-dev \
mesa-utils \
pkg-config \
python3-colcon-common-extensions \
python3-pip \
ros-humble-cv-bridge \
ros-humble-grid-map-msgs \
ros-humble-grid-map-ros \
ros-humble-joy \
ros-humble-rmw-fastrtps-cpp \
&& rm -rf /var/lib/apt/lists/*
RUN printf '%s\n' \
'source /opt/ros/humble/setup.bash' \
'export RMW_IMPLEMENTATION=rmw_fastrtps_cpp' \
'if [ -f /workspace/aimdk/install/local_setup.bash ]; then source /workspace/aimdk/install/local_setup.bash; fi' \
>> /root/.bashrc
WORKDIR /workspace
CMD ["bash"]
创建启动脚本(宿主机)
在工作目录创建 run_docker.sh,内容如下:
#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
IMAGE_NAME=x2-simulation:latest
CONTAINER_NAME=x2-sim
for dir in aimdk sim_mujoco mc; do
test -d "${ROOT_DIR}/${dir}" || {
echo "缺少目录:${ROOT_DIR}/${dir}" >&2
exit 1
}
done
xhost +si:localuser:root >/dev/null
docker rm -f "${CONTAINER_NAME}" >/dev/null 2>&1 || true
DOCKER_ARGS=(
run -it
--name "${CONTAINER_NAME}"
--network host
--ipc host
-e "DISPLAY=${DISPLAY:-:0}"
-e QT_X11_NO_MITSHM=1
-e RMW_IMPLEMENTATION=rmw_fastrtps_cpp
-v "${ROOT_DIR}/aimdk:/workspace/aimdk:rw"
-v "${ROOT_DIR}/sim_mujoco:/workspace/sim_mujoco:rw"
-v "${ROOT_DIR}/mc:/workspace/mc:rw"
-v /agibot:/agibot:rw
-v /tmp/.X11-unix:/tmp/.X11-unix:rw
-w /workspace
)
if [[ -d /dev/dri ]]; then
DOCKER_ARGS+=(--device /dev/dri)
fi
docker "${DOCKER_ARGS[@]}" "${IMAGE_NAME}" bash
赋予执行权限:
chmod +x run_docker.sh
构建镜像(宿主机)
docker build -t x2-simulation:latest .
构建成功后检查:
docker images x2-simulation
能看到 x2-simulation 和 latest 即表示成功。
启动容器(宿主机)
./run_docker.sh
命令执行后会直接进入容器。保留该终端,后续用作终端 1。
构建 AimDK(容器内)
如果 /workspace/aimdk/install/local_setup.bash 已存在,跳过本节。否则在终端 1 的容器内执行:
cd /workspace/aimdk
source /opt/ros/humble/setup.bash
colcon build
source install/local_setup.bash
没有 Failed 即表示构建成功。
启动仿真与 MC
必须按以下顺序启动。
终端 1:启动 MuJoCo
在 ./run_docker.sh 进入的容器中执行:
cd /workspace/sim_mujoco/bin
./start_sim.sh -s
按提示选择与交付包配套的机器人型号。MuJoCo 窗口显示机器人后,保持终端运行。
终端 2:启动 MC
新开一个宿主机终端,进入容器:
docker exec -it x2-sim bash -l
进入容器后执行:
cd /workspace/mc/bin
unset AGIBOT_SOFTWARE_HOME
./em_run.sh
MC 持续运行且没有崩溃即可继续。
终端 3:检查通信
再新开一个宿主机终端,进入容器:
docker exec -it x2-sim bash -l
进入容器后执行:
source /workspace/aimdk/install/local_setup.bash
ros2 run py_examples get_mc_action
返回 Mode name 和 Mode status 即表示通信正常。
1.7 验证运动控制
以下命令均在终端 3 执行。
站立
ros2 run py_examples set_mc_action SD
前进
ros2 run py_examples set_mc_action LD
ros2 run py_examples mc_locomotion_velocity
依次输入:
0.2
0
0
机器人应前进约 5 秒并停止。
转向
再次运行 mc_locomotion_velocity,依次输入:
0.2
0
0.5
机器人应边前进边左转。当前 MC 步态不保证纯角速度原地启步。
1.8 停止环境
本地部署
先在终端 3 停止示例,再依次在终端 2 和终端 1 按 Ctrl+C。
Docker 部署
先在终端 3 停止示例,再在终端 2 和终端 1 按 Ctrl+C。最后在宿主机执行:
docker rm -f x2-sim
xhost -si:localuser:root 2>/dev/null || true
1.9 常见问题
基础镜像下载失败
先重试:
docker pull osrf/ros:humble-desktop-full
仍失败时,检查客户网络、DNS 或按前文配置 Docker 镜像加速。
MuJoCo 窗口没有打开
echo "$DISPLAY"
xhost +si:localuser:root
确认宿主机已进入图形桌面,然后重新执行 ./run_docker.sh。
MC 启动后崩溃
sudo mkdir -p /agibot/data/var/
sudo chown "$USER:$USER" -R /agibot
重新执行 ./run_docker.sh,确保宿主机 /agibot 已挂载到容器内的 /agibot。
AimDK 与 MC 无法通信
三个终端都应输出 rmw_fastrtps_cpp:
echo "$RMW_IMPLEMENTATION"
如果不是,执行:
export RMW_IMPLEMENTATION=rmw_fastrtps_cpp