diff --git a/src/Neuro_Mujoco/README.md b/src/Neuro_Mujoco/README.md index c89de604be..280721adb1 100644 --- a/src/Neuro_Mujoco/README.md +++ b/src/Neuro_Mujoco/README.md @@ -1,19 +1,19 @@ # 基于 MuJoCo 的神经网络代理实现 -实现基于 MuJoCo 物理引擎的机器人、机械结构等智能体的感知、规划与控制,结合神经网络实现动态环境中的自主决策与行为生成。 +实现基于 MuJoCo 物理引擎的机器人、机械结构等智能体的感知、规划与控制,结合神经网络实现动态环境中的自主决策与行为生成。新增**强化学习策略推理**与**ROS 1 实时通信**功能,支持端到端的智能控制流程。 # 环境配置 平台:Windows 10/11,Ubuntu 20.04/22.04(ROS推荐),macOS(Intel/Apple Silicon) -软件:Python 3.7-3.12(需支持 3.7 及以上版本)、PyTorch(不依赖 TensorFlow) +软件:Python 3.7-3.12(需支持 3.7 及以上版本)、PyTorch(策略网络依赖) 核心依赖:MuJoCo 物理引擎、mujoco-python 绑定 # 基础依赖安装 安装 Python 3.11(推荐版本) -安装 MuJoCo 及相关依赖: +安装核心依赖: ```shell # 安装MuJoCo Python绑定 pip install mujoco -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com -# 安装PyTorch(根据系统配置选择合适版本) +# 安装PyTorch(策略网络必需,根据系统配置选择) pip3 install torch torchvision torchaudio -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com # 安装文档生成工具 @@ -24,9 +24,50 @@ pip install -r requirements.txt (可选)验证安装: ```shell python -c "import mujoco; print('MuJoCo version:', mujoco.__version__)" +python -c "import torch; print('PyTorch version:', torch.__version__)" # 验证策略依赖 mkdocs --version ``` +# 核心功能使用 +## 1. 模型可视化与控制 +支持直接加载模型文件或目录,集成策略控制与ROS通信: +```shell +# 基础可视化(无控制) +python mujoco_utils.py visualize /path/to/model.xml + +# 启用ROS 1模式(发布关节状态/基座姿态,接收控制指令) +python mujoco_utils.py visualize /path/to/model.xml --ros + +# 加载预训练策略模型(自动生成控制指令) +python mujoco_utils.py visualize /path/to/model.xml --policy /path/to/policy.pth + +# 联合模式(ROS + 策略控制) +python mujoco_utils.py visualize /path/to/model.xml --ros --policy /path/to/policy.pth +``` +- 交互说明:可视化窗口支持鼠标拖拽旋转、滚轮缩放,按ESC键退出 +- 控制优先级:ROS指令 > 策略推理 > 无控制 + +## 2. 模型格式转换 +支持XML与MJB(二进制)格式互转(MJB加载速度更快): +```shell +# XML转MJB +python mujoco_utils.py convert input.xml output.mjb + +# MJB转XML +python mujoco_utils.py convert input.mjb output.xml +``` + +## 3. 模拟速度测试 +多线程测试模型仿真性能,评估实时性: +```shell +# 默认参数(1线程,10000步) +python mujoco_utils.py testspeed /path/to/model.xml + +# 自定义配置(4线程,50000步,控制噪声0.02) +python mujoco_utils.py testspeed /path/to/model.xml --nthread 4 --nstep 50000 --ctrlnoise 0.02 +``` +输出指标包括:每秒步数、实时因子(仿真时间/真实时间)、线程耗时统计 + # ROS 集成配置(Ubuntu 专属) ### 1. ROS 版本要求 - Ubuntu 20.04 → ROS Noetic @@ -61,28 +102,27 @@ rm -rf build devel catkin_make -DPYTHON_EXECUTABLE=$(which python3) ``` -### 5. ROS 启动步骤 -#### 5.1 激活环境 -```shell -# 激活 Python 虚拟环境 -source ~/桌面/nn/.venv/bin/activate - -# 加载 Catkin 环境 -source ~/桌面/nn/catkin_ws/devel/setup.bash -``` -#### 5.2 启动仿真与 ROS 节点 -```shell -# 启动 Anymal B 模型 + ROS 控制/订阅节点 -roslaunch mujoco_ros main.launch -# 或使用绝对路径(避免软链接歧义) -roslaunch ~/桌面/nn/src/Neuro_Mujoco/mujoco_ros/launch/main.launch +# 策略网络说明 +## 网络结构 +轻量级多层感知器(MLP),适用于机器人关节控制: +```python +class PolicyNetwork(nn.Module): + def __init__(self, obs_dim: int, action_dim: int, hidden_dim: int = 64): + super().__init__() + self.net = nn.Sequential( + nn.Linear(obs_dim, hidden_dim), # 观测维度=关节位置数+速度数 + nn.Tanh(), + nn.Linear(hidden_dim, hidden_dim), + nn.Tanh(), + nn.Linear(hidden_dim, action_dim), # 输出维度=控制维度(nu) + nn.Tanh() # 输出范围[-1,1],自动映射到实际控制范围 + ) ``` -#### 5.3 核心节点说明 -- `mujoco_core`:MuJoCo 仿真核心,发布关节状态(`/mujoco/joint_states`)、基座姿态(`/mujoco/pose`) -- `mujoco_ctrl_publisher`:控制指令发布者,发布 `/mujoco/ctrl_cmd` 话题(适配 Anymal B 控制维度 nu=12) -- `mujoco_state_subscriber`:状态订阅者,实时打印关节状态与基座姿态 +## 观测与控制映射 +- 输入观测:`[关节位置(qpos) + 关节速度(qvel)]` +- 输出控制:归一化指令`[-1,1]`,通过模型`actuator_ctrlrange`自动映射到实际范围 # 文档查看 在命令行中进入项目根目录,运行: @@ -97,40 +137,33 @@ mkdocs serve → 错误导入 ROS 2 库,替换为 ROS 1 的 `rospy` 即可。 2. **`unrecognized arguments: __name:=mujoco_core`** - → 修改 `main.py` 中参数解析: + → 修改参数解析逻辑,忽略ROS自动添加的参数: ```python - # 原代码:args = parser.parse_args() - args, unknown = parser.parse_known_args() # 忽略 ROS 自动参数 + args, unknown = parser.parse_known_args() # 替代 parser.parse_args() ``` 3. **`模型文件不存在`** - → 修改 `launch/main.launch` 中的模型路径,指向真实 MuJoCo 模型(如 Anymal B:`/home/lan/桌面/nn/mujoco_menagerie/anybotics_anymal_b/anymal_b.xml`)。 + → 检查模型路径是否正确,可视化命令支持自动搜索目录下的`.xml`/`.mjb`文件。 -4. **`NameError: name 'count' is not defined`** - → 初始化 `count` 变量或注释冗余计数逻辑: - ```python - count = 0 # 循环前初始化 - while ...: - count += 1 - if count % 5 == 0: # 按需保留 - ... - ``` +4. **`策略模型加载失败`** + → 确认:① 模型文件存在 ② PyTorch已安装 ③ 模型输入/输出维度与环境匹配(obs_dim=qpos+qvel维度,action_dim=nu) + +5. **`ROS话题无数据`** + → 检查:① `roscore`是否启动 ② Catkin环境是否加载(`source devel/setup.bash`)③ 关节名称映射是否正确 # 贡献指南 提交代码前,请阅读 贡献指南。代码优化方向包括: - 遵循 PEP 8 代码风格 并完善注释 -- 实现神经网络在 MuJoCo 模拟环境中的应用(如强化学习控制、运动规划等) -- 撰写对应功能的 文档 -- 添加自动化测试(包括模型加载验证、物理模拟稳定性测试、神经网络推理性能测试等) -- 优化物理模拟与神经网络的交互效率(如数据采集、动作执行链路) -- 扩展 ROS 功能(如多机通信、RViz 可视化、Gazebo 联合仿真) +- 扩展策略网络类型(如CNN、RNN,适配视觉观测) +- 优化策略推理效率(如ONNX导出、TensorRT加速) +- 完善ROS功能(如服务调用、参数服务器配置) +- 增加自动化测试(模型加载/转换验证、策略性能基准测试) +- 支持多智能体仿真与分布式控制 # 参考资源 - MuJoCo 官方文档 -- MuJoCo GitHub 仓库 - MuJoCo Python 绑定教程 - MuJoCo 模型库(Menagerie) -- 神经网络基础原理 -- MuJoCo 强化学习教程(MJX) -- ROS Noetic 官方文档 -- Catkin 工作空间教程 \ No newline at end of file +- PyTorch 神经网络教程 +- ROS 1 Noetic 官方文档 +- 强化学习在MuJoCo中的应用(MJX框架) \ No newline at end of file