docker中安装ROS 在宇树四足机器人运行 强化学习GenLoco算法

四足机器人强化学习控制第二篇

第一篇 Isaac Gym环境安装和四足机器人模型的训练
第三篇 IsaacGym四足机器人sim to real全过程详细解析(walk these ways方法)


在这里插入图片描述

前言

本文使用Aliengo四足机器人,所有SDK和ros to real 都是官方适配Aliengo机器人。
电脑使用是ubuntu20.04系统,所以使用Docker来安装ROS 的melodic版本。
GenLoco是一种用于训练四足机器人的通用运动(GenLoco)控制器的框架,该框架合成了通用的运动控制器,可部署在具有类似形态的各种四足机器人上。该方法是一种简单而有效的形态随机化方法,该方法按程序生成了一组不同的仿真机器人用于训练。

Docker安装

官方安装方法

也可以参考我的文章
如果使用docker必须使用sudo可以把当前用户添加进入dcoker用户组

# 添加docker用户组,一般已存在,不需要执行
sudo groupadd docker     
# 将登陆用户加入到docker用户组中
sudo gpasswd -a ${USER} docker
# 更新用户组
newgrp docker   
# 测试docker命令是否可以使用sudo正常使用
docker version

转自《为什么需要在docker命令前面加sudo?》

Docker中安装Ros

官方ros docker中安装教程链接
docker官网的不同ros镜像链接
这里使用命令为参考来自《Docker内运行ROS(melodic版本)以及使用Rviz

nvidia英伟达docker容器安装指南

#拉镜像
sudo docker pull osrf/ros:melodic-desktop-full
#运行dockerfile
sudo docker build -f dockerfile -t ros:noetic .
#运行镜像
sudo docker run -it -v [/home/xxx/Projects:/home/xxx/Projects] --device=/dev/dri --group-add video --volume=/tmp/.X11-unix:/tmp/.X11-unix  --env="DISPLAY=$DISPLAY"  --name=[name] [IMAGE_ID]  /bin/bash
#我运行镜像示例-v是共享文件夹 网络模式选择host模式,即和宿主机网络配置相同
sudo docker run -it -v /home/zeven/GenLoco-main:/home/zeven/GenLoco-main --device=/dev/dri --group-add video --volume=/tmp/.X11-unix:/tmp/.X11-unix --network=host --env="DISPLAY=$DISPLAY"  --name=ros_melodic 1c31848a952c  /bin/bash

#运行容器
docker start [contatiner id]
docker start cfc8bd80eeb3
#多terminal
sudo docker exec -it [container_id] /bin/bash
sudo docker exec -it cfc8bd80eeb3 /bin/bash
#重要!!进入容器内需要先配置bashrc,否则运行有问题
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc
#显示端口占用
ps -ef | grep 【端口】 

使用宇树的Ros to Real控制机器人

Aliengo网络架构
使用的宇树Aliengo四足机器人
宇树的开发文档
宇树的Ros:Github链接
宇树的Ros to Real :Github链接
宇树SDK:Github链接

# SDK使用方法
mkdir build
cd build
cmake ../
make
sudo ./example_walk

下载lcm:链接

cd lcm-x.x.x
mkdir build
cd build
cmake ../
make
sudo make install

安装Boost

sudo apt-get update
sudo apt-get install libboost-all-dev

错误解决

# 运行时报错:liblcm.so.1: cannot open shared object file: No such file or directory
sudo ldconfig -v

创建ROS工作空间
把宇树的Ros,Ros to Real,SDK都放到src文件夹下

source devel/setup.bash
catkin_make

在进行低级控制之前,请按L2+A使机器人坐下,然后按L1+L2+启动使机器人进入可以进行低级控制的模式,最后确保在运行低级控制之前将机器人挂起。(非)

出现的问题都在宇树的开发文档可以找到。
注意更新src中代码后要删除build和devel

# 安装相关包
sudo apt-get install ros-noetic-controller-interface  ros-noetic-gazebo-ros-control ros-noetic-joint-state-controller ros-noetic-effort-controllers ros-noetic-joint-trajectory-controller
sudo apt-get install ros-noetic-joint-state-publisher-gui

使用GenLoco强化学习方法

使用的强化学习方法是GenLoco
他继承自谷歌的Motion Imitation

GenLoco是一种用于训练四足机器人的通用运动(GenLoco)控制器的框架,该框架合成了通用的运动控制器,可部署在具有类似形态的各种四足机器人上。该方法是一种简单而有效的形态随机化方法,该方法按程序生成了一组不同的仿真机器人用于训练。

配置环境地址

vim ~/.bashrc
#增加下面
source ~/catkin_ws/devel/setup.bash
export ROS_PACKAGE_PATH=~/catkin_ws:${ROS_PACKAGE_PATH}
export GAZEBO_PLUGIN_PATH=~/catkin_ws/devel/lib:${GAZEBO_PLUGIN_PATH}
export LD_LIBRARY_PATH=~/catkin_ws/devel/lib:${LD_LIBRARY_PATH}
export UNITREE_LEGGED_SDK_PATH=~/catkin_ws/src/unitree_ros/unitree_legged_sdk
#amd64, arm32, arm64
export UNITREE_PLATFORM="amd64"

#本人的文件地址为/home/zeven/GenLoco-main/catkin,下面是示例
export ROS_PACKAGE_PATH=/home/zeven/GenLoco-main/catkin:${ROS_PACKAGE_PATH}
export GAZEBO_PLUGIN_PATH=/home/zeven/GenLoco-main/catkin/devel/lib:${GAZEBO_PLUGIN_PATH}
export LD_LIBRARY_PATH=/home/zeven/GenLoco-main/catkin/devel/lib:${LD_LIBRARY_PATH}
export UNITREE_LEGGED_SDK_PATH=/home/zevenccatkin/src/unitree_ros/unitree_legged_sdk
#amd64, arm32, arm64
export UNITREE_PLATFORM="amd64"

source /opt/ros/melodic/setup.bash
#source /home/nuc4/My_Ros_WorkSpace/can_workspace/devel/setup.bash
source /home/zeven/GenLoco-main/catkin/devel/setup.bash

安装Genloco需要的环境文件,可以不再Docker中安装。

# 实验出必须3.7的python要不tensoflow不能装1.15.4
conda create -n genloco python=3.7
conda activate genloco 
# 必须先装protobuf再装Tensorflow
pip install protobuf==3.19.0
pip install tensorflow==1.15.4
pip install gym==0.17.1
pip install pybullet
pip3 install -r requirements.txt

# 训练
python3 motion_imitation/run.py --mode train --randomized_robot --phase_only --int_save_freq 10000000 --timesteps_per_actorbatch 8192 --optim_batchsize 512 --visualize
# 测试
python3 motion_imitation/run.py --mode test --model_file motion_imitation/data/policies/morphology_generator_pace_model.zip --robot aliengo --phase_only --visualize

论文中写出Each policy was trained with 800 million samples, taking
approximately 2 weeks on 16 CPU workers.

部署GenLoco模型到宇树真机Aliengo

本人使用Aliengo四足机器人

  1. 设置IP地址
    在强化学习策略里和ROS里为UDP通讯设置IP。
    通讯时Policy side通过socket通信ROS side。如果ROS side和Policy side都在同一个PC中就使用local。
    IP设置位置:
  • Policy side: in file motion_imitation/real_a1/a1_robot_real.py
  • ROS side: in file reinforce_controller/yaml/

ROS和Policy通讯使用,即python和c++通讯,如果两个代码都是运行在本地可以参考下面地址。

recv_IP="127.0.0.1",
recv_port=8000,
send_IP="127.0.0.1",
send_port=8001

ROS端和机器人端通讯不需要特殊设置使用默认地址即可。
SDK中的udp通讯,如果SDK正常使用则不用更改。

  1. 设置LCM服务
    这一步骤Github上没有提供,应该是漏了。
    下载宇树ros to real 3.2版本Github链接
    复制到项目中后,删除src/exe/下的文件因为会起冲突。编辑CMakeLists
    删除相关内容
add_executable(position_lcm src/exe/position_mode.cpp)
target_link_libraries(position_lcm ${EXTRA_LIBS} ${catkin_LIBRARIES})
add_dependencies(position_lcm ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})

add_executable(velocity_lcm src/exe/velocity_mode.cpp)
target_link_libraries(velocity_lcm ${EXTRA_LIBS} ${catkin_LIBRARIES})
add_dependencies(velocity_lcm ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})

add_executable(torque_lcm src/exe/torque_mode.cpp)
target_link_libraries(torque_lcm ${EXTRA_LIBS} ${catkin_LIBRARIES})
add_dependencies(torque_lcm ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})

add_executable(walk_lcm src/exe/walk_mode.cpp)
target_link_libraries(walk_lcm ${EXTRA_LIBS} ${catkin_LIBRARIES})
add_dependencies(walk_lcm ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
  1. 启动lcm服务器
roslaunch unitree_legged_real real.launch rname:=aliengo ctrl_level:=lowlevel firmwork:=3_2
  1. 启动ROS 中的rl controller
roslaunch reinforce_controller rl_control_real.launch config_file:=${yaml_config_file_name}
  1. 启动ROS节点position_lcm
rosrun reinforce_controller position_lcm
  1. 在rl controller界面启动站立模式,即mode stand: press [s + /Enter]preload → stand_wait → stand_on.
  2. 在rl controller界面启动行走模式,即mode walk: press [w + /Enter] stand_on → walking_on
  3. 在ros节点都启动成功了,机器人站立了后再启动强化学习策略
python motion_imitation/run.py --robot real_aliengo --motion_file motion_imitation/data/motions/laikago_pace.txt --mode test --model motion_imitation/data/policies/morphology_generator_pace_model.zip --phase_only
  1. mode damp: press [d + /Enter] any → damp_on.

问题总结

  1. GenLoco问题1:catkin_make编译过程中出现找不到头文件问题
/home/zeven/GenLoco-main/catkin/src/unitree_ros/reinforce_controller/src/exe/position_mode.cpp:13:10: fatal error: unitree_legged_sdk/unitree_legged_sdk.h: No such file or directory
   13 | #include "unitree_legged_sdk/unitree_legged_sdk.h"
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make[2]: *** [unitree_ros/reinforce_controller/CMakeFiles/position_lcm.dir/build.make:63: unitree_ros/reinforce_controller/CMakeFiles/position_lcm.dir/src/exe/position_mode.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:2624: unitree_ros/reinforce_controller/CMakeFiles/position_lcm.dir/all] Error 2
make: *** [Makefile:141: all] Error 2
Invoking "make -j16 -l16" failed

解决方法
是因为无法访问到环境变量,或环境变量写错
在unitree_ros/unitree_legged_sdk/CMakeLists.txt文件中增加一行

include_directories(./)

在/unitree_ros/reinforce_controller/CMakeLists.txt改变以下部分,直接变成相对位置不使用环境变量位置。

// 下面三行进行替换,注意amd64要改成你电脑的架构
//include_directories($ENV{UNITREE_LEGGED_SDK_PATH}/include)
//link_directories($ENV{UNITREE_LEGGED_SDK_PATH}/lib)
//string(CONCAT LEGGED_SDK_NAME libunitree_legged_sdk_$ENV{UNITREE_PLATFORM}.so)
include_directories(${CMAKE_SOURCE_DIR}/unitree_ros/unitree_legged_sdk/include)
link_directories(${CMAKE_SOURCE_DIR}/unitree_ros/unitree_legged_sdk/lib)
string(CONCAT LEGGED_SDK_NAME libunitree_legged_sdk_amd64.so)
  1. GenLoco问题2:运行roslaunch时候报错
Cannot locate node of type [lcm_ros_node] in package [deepstream_ros_bridge]. Make sure file exists in package path and permission is set to executable (chmod +x)

报错为节点没有找到的问题
解决方法

source devel/setup.bash

小结

本文详细的展示了使用强化学习控制真实四足机器人的过程,希望对读者有所帮助。

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

勇气的动力

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值