主要实现了 Perceptive Locomotion Through Nonlinear Model-Predictive Control
测试环境为Vmware虚拟机 运行Ubuntu 20.04 使用I5 12490F 4.5Ghz 分配给虚拟机2个核心四个线程。
参考廖佬的legged_control的仿真框架,进行测试。
实际运行时,在梅花桩的地形成功率较低。求解很容易崩溃 。 在虚拟机仿真中,需要使用预先制作的高程图,若使用cpu版本的高程图,在大幅机动时,感知运算处理较慢,会导致建图出错,进而导致运动规划出错。
在实体机运行时,可以使用gpu版本的高程图。传感器使用深度相机,经过低通滤波和自碰撞滤波。
本项目使用 catkin tools 进行编译,包含 debug 和 release 配置。如遇到任何报错,请自行排查并调整相应的路径。
该仿真视频 Bilibili 视频链接。
如果需要编译 debug 版本,需要切换 catkin tools 的配置文件至 debug 配置。release 版本的编译文件夹后缀为 _rel。
进入 OCS2_ws 目录,执行以下命令:
catkin build ocs2_legged_robot ocs2_legged_robot_ros ocs2_self_collision_visualization ocs2_anymal ocs2_anymal_loopshaping_mpc
catkin build convex_plane_decomposition
catkin build grid_map编译完成后,应生成以下包:
../OCS2_ws/build/blasfeo_catkin../OCS2_ws/build/catkin_tools_prebuild../OCS2_ws/build/cgal5_catkin../OCS2_ws/build/convex_plane_decomposition../OCS2_ws/build/convex_plane_decomposition_msgs../OCS2_ws/build/convex_plane_decomposition_ros../OCS2_ws/build/grid_map_core../OCS2_ws/build/grid_map_cv../OCS2_ws/build/grid_map_demos../OCS2_ws/build/grid_map_filters../OCS2_ws/build/grid_map_filters_rsl../OCS2_ws/build/grid_map_loader../OCS2_ws/build/grid_map_msgs../OCS2_ws/build/grid_map_octomap../OCS2_ws/build/grid_map_ros../OCS2_ws/build/grid_map_rviz_plugin../OCS2_ws/build/grid_map_sdf../OCS2_ws/build/grid_map_visualization../OCS2_ws/build/hpipm_catkin../OCS2_ws/build/hpp-fcl../OCS2_ws/build/ocs2_anymal_commands../OCS2_ws/build/ocs2_anymal_loopshaping_mpc../OCS2_ws/build/ocs2_anymal_models../OCS2_ws/build/ocs2_anymal_mpc../OCS2_ws/build/ocs2_centroidal_model../OCS2_ws/build/ocs2_core../OCS2_ws/build/ocs2_ddp../OCS2_ws/build/ocs2_frank_wolfe../OCS2_ws/build/ocs2_ipm../OCS2_ws/build/ocs2_legged_robot../OCS2_ws/build/ocs2_legged_robot_ros../OCS2_ws/build/ocs2_mpc../OCS2_ws/build/ocs2_msgs../OCS2_ws/build/ocs2_oc../OCS2_ws/build/ocs2_pinocchio_interface../OCS2_ws/build/ocs2_qp_solver../OCS2_ws/build/ocs2_quadruped_interface../OCS2_ws/build/ocs2_quadruped_loopshaping_interface../OCS2_ws/build/ocs2_robotic_assets../OCS2_ws/build/ocs2_robotic_tools../OCS2_ws/build/ocs2_ros_interfaces../OCS2_ws/build/ocs2_self_collision../OCS2_ws/build/ocs2_self_collision_visualization../OCS2_ws/build/ocs2_sqp../OCS2_ws/build/ocs2_switched_model_interface../OCS2_ws/build/ocs2_switched_model_msgs../OCS2_ws/build/ocs2_thirdparty../OCS2_ws/build/pinocchio../OCS2_ws/build/segmented_planes_terrain_model
进入 perceptive_ocs2_ws 目录 。由于该仿真修改自 legged_control,因此可以参考他的编译过程。在编译前,需修改 .catkin_tools/profiles/default/config.yaml 文件,将当前工作空间扩展链接至 OCS2_ws。
执行以下命令进行编译:
catkin build plot_terrain
catkin build perceptive_trajectories
catkin build legged_perceptive_description
catkin build legged_perceptive_description_custom
catkin build legged_unitree_description
catkin build ocs2_legged_estimation
catkin build ocs2_legged_self_collishion
catkin build ocs2_legged_wbc
catkin build ocs2_unitree_controllers
catkin build ocs2_unitree_loopshaping_mpc
catkin build ocs2_unitree_models
catkin build ocs2_unitree_mpc编译后应生成以下包:
build_rel/catkin_tools_prebuildbuild_rel/legged_commonbuild_rel/legged_gazebobuild_rel/legged_perceptive_descriptionbuild_rel/legged_perceptive_description_custombuild_rel/legged_unitree_descriptionbuild_rel/ocs2_legged_estimationbuild_rel/ocs2_legged_self_collishionbuild_rel/ocs2_legged_wbcbuild_rel/ocs2_unitree_controllersbuild_rel/ocs2_unitree_loopshaping_mpcbuild_rel/ocs2_unitree_modelsbuild_rel/ocs2_unitree_mpcbuild_rel/perceptive_trajectoriesbuild_rel/plot_terrainbuild_rel/qpoases_catkin
仿真启动顺序必须严格遵循,因为仿真的定位数据来源于控制器,因此需要先启动控制器,然后启动地图发布器。地图发布直接使用地图的真值数据。
-
加载 Gazebo 地形图时,会在主目录生成
/home/me/.gazebo/models/stepping_stones_terrain文件夹,该文件夹存储地形数据。 -
启动仿真:
roslaunch legged_perceptive_description_custom empty_world.launch- 启动控制器:
roslaunch ocs2_unitree_controllers unitree.launch- 启动地图发布器:
roslaunch plot_terrain convex.launch- 启动键盘控制:
rosrun teleop_twist_keyboard teleop_twist_keyboard.py该项目支持使用 Rviz 的 nav 目标点功能,具体实现在 src/perceptive_trajectories 中。
roslaunch ocs2_unitree_mpc unitree.launchroslaunch plot_terrain convex.launch-
如果更改了 Gazebo 地形图,需要删除
/home/me/.gazebo/paging文件夹,这样 Gazebo 地形才能更新。 -
plot_terrain包使用的地形图与 Gazebo 存在 90 度的偏差,需要注意。 -
如果要更改地形图,可以使用修图工具对图片进行修改,生成旋转 90 度后的图片,分别放到
perceptive_ocs2_ws/src/plot_terrain/data目录和/home/me/.gazebo/models/stepping_stones_terrain目录,并修改对应的 launch 文件。 -
运行前需要将地图放到对应的目录下
/home/me/.gazebo/models/stepping_stones_terrain
- 机身旋转超过180°会崩溃,待修复。
