play-bittle-with-ros2-isaaclab-isaacsim

2026/01/24

Tags: Ros2 IsaacSim IsaacLab Bittle

Table of Contents

image-20260124163502790

_

2025.11 - 2025结束这段时间,跳槽到具身智能行业, 在同事的引导下摸索着自定义usd schema, 并使用非侵入的方式修改isaac sim的physX插件, 支持从UI上对USD scene中的prim增删自定义的schema api, 修改schema属性.

下一阶段的目标是在isaac lab上尝试替换物理引擎进行rl 训练

为了更快的适应工作要求,我给自己设定了一个快速入门的计划, 通过训练一个自己的机器人模型,来学习工作所需要的技能

本博客将围绕bittle 4足机器狗 记录

本文不会介绍rl 和 infer的具体细节,但会提供代码,操作步骤,

尝试探索代码,优化代码,这样才会有所收获

计划常常在随着工作,目标,兴趣 调整, 不保证能做完, 但是有完成,我都会更新博客(否则岂不是做了个寂寞)

0. Bittle

bittle是一款比较成熟的学习用的机器狗, 4条腿每条腿有两个自由度,还有脖子一个,共有9个自由度,不过训练行走的话,脖子可以简略,视作8个dof.

他有一个第三方的逆向建模, 但有一些小问题, 右边肢体的关节方向与左边不一样

我做了一些调整,统一所有肢体的行为, 使其关节角度为负时,向前抬起肢体,

除此之外,还修改了关节的名称, 把关节名称按 左右(L/R),关节位置(Front / Hind), 关节名称(Hip/Knee),关节行为(Flexion-Extention/Abduction- Adduction) 重命名

由于Bittle没有向外侧扩张/合拢的关节(HAA),所以没有办法走螃蟹步,修改后的8个关节名称为

如果想购买Bittle, 需要注意他有ardiuno版本和esp32版本, 其中ardiuno版本不支持读取关节角度

强烈建议不要太着急买, 直到需要真机部署时再买都来得及,

isaaclab/isaacsim中内置了一些4足机器人的example, 如spot ,anymal, 我训练参考了anymal c , 推理参考了spot

1. 代码获取

本文代码基于isaacsim 5.1 + isaaclab 2.3

主仓库 项目中包含4个git submodule

1
2
3
4
5
6
../
bittle_solution/
| IsaacLab_bittle/
| IsaacSim_bittle/ 
| bittle_URDF/		 # bittle 机器人资产, 如果想修改才需要使用,否则使用IsaacLab_bittle中的已添加的.usd就行
| ps_ros2_common/  # mac/ubuntu可用的ros包,对ros2-humble-joy 手柄消息解码后 publish到isaacsim中控制机器人

获取它们:

1
2
3
git clone git@github.com:nocanstillbb/bittle_solution.git
cd bittle_solution
git submodule update --init --recursive

2. 训练,导出模型

Isaaclab和isaacsim的安装, 请参考Installation using Isaac Sim Source Code

在isaaclab中 你需要把这个绝对路径修改为适合你环境的路径 (懒得改成相对路径)

训练

1
./isaaclab.sh  -p  scripts/reinforcement_learning/rsl_rl/train.py  --task Isaac-Velocity-Flat-Bittle-v0   --num_env 4096  agent.max_iterations=2000  --headless

–num_env 表示使用4096个环境,意味着训练时,仿真世界会有4096只bittle 学习走路

agent.max_iterations=2000 表示训练过程中最多更新2000次权重

–headless 表示训练过程不显示仿真,以提升性能,

训练完成后,

1
./isaaclab.sh  -p  scripts/reinforcement_learning/rsl_rl/play.py  --task Isaac-Velocity-Flat-Bittle-v0 --num_env 1  --checkpoint logs/rsl_rl/bittle_flat/2026-01-19_17-05-33/model_1999.pt 

其中2026-01-19_17-05-33需要修改为你真实训练的时间

执行这条指令后, log目录应为:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
logs/rsl_rl/bittle_flat/2026-01-19_17-05-33/
├── events.out.tfevents.1769061845.CNF202558106702.1893133.0
├── exported
│   ├── policy.onnx
│   └── policy.pt
├── git
│   └── IsaacLab_bittle.diff
├── model_0.pt
├── ...
├── model_1999.pt
└── params
    ├── agent.yaml
    └── env.yaml

exported目录和params目录在后面推理步骤会使用到.

3. 推理, ps5手柄控制

isaacsim 5.1 自带了一个ros2 humble , 与Python3.11兼容

我在m系 mac book上使用ros2 humble 通过组网过云端和 isaacsim中的ros2 humble进行通讯

因为使用的消息是ros标准消息,所以不必保证abi兼容,但需要ros组网,

为简便教程,我默认看本文的你使用的是ubuntu 22.04 本机ros2 humble和isaacsim的ros通讯

如果你在ubuntu上同时使用isaacsim ros2和ros2 通讯

不自定义消息则也不必考虑abi兼容, 否则需要自己参考nvidia文档为isaacsim编译python 11兼容的 ros2

因为ubuntu22.04 apt 安装的humble是python 10兼容的,而isaacsim 5.1 使用的python 11

假设你已经安装好ros2环境和ros2-humble-joy

1
2
3
4
mkdir -p ros2_ws/src
cd ros2_ws/src
cp -rf path/to/ps_ros2_common  .
cd ..

在编译前根据操作系统和Ps手柄型号 使用这个宏操作编译目标

开始编译

1
2
source /opt/ros/humble/setup.sh
colcon build 

设置ros环境变量到~/.bashrc末尾

1
2
3
4
5
cat << EOF >> ~/.bashrc
ROS_DOMAIN_ID=0 
RMW_IMPLEMENTATION=rmw_fastrtps_cpp 
ROS_DISTRO=humble
EOF

通过蓝牙或usb 连接你的ps手柄到你的主机上,然后重新打开3个终端,以便于上ros相送的环境变量生效

终端1运行

1
2
source /opt/ros/humble/setup.sh
ros2 run joy joy_node # publish joy messages

终端2运行

1
2
 source /opt/ros/humble/setup.sh
 ros2 run ps_ros2_common joy_test # subscrib joy messages , publish joy_directions message

终端3运行

1
2
source /opt/ros/humble/setup.sh
ros2 topic echo /joy_directions  # echo joy_directions messages for test

确认操作手柄方向后, 在终端3正常打印后, 就可以启动isaacsim进行下一步的测试了

同样需要修改加载的usd路径

以及修改isaacsim bittle examples中加载的模型文件路径

在isaacsim_bittle目录中执行

1
 ./isaac-sim.selector.sh

image-20260124153657100

选择ros2 bridge, humble后, 点击start

image-20260124153846141

选择 window->examples->robotics examples

image-20260124153932830

在下方选择 POLICY -> Bittle ,加载完成后, 将会自动运行仿真,但机器人不会动作, 这可能是isaacsim的Bug或我代码哪里有问题

解决方式是选择所有关节,把stiffness从0.01745修改为0.017451,

事实上只要值改变一下就正常了,在末尾加1显然是一个微不足道的小修改

image-20260124154124711

此时把ps5手柄通过蓝牙或type-c连接到mac book上, 就可以控制仿真世界的bittle 机器狗了.

如果不想使用ros和手柄, 只需要注释掉这部分代码这部分代码, 仍然可以使用键盘的方向键操作仿真环境中的bittle

4. sim2sim

5. sim2real

>> Home

Comments