本文使用Aliengo四足机器人,所有SDK和ros to real 都是官方适配Aliengo机器人。
电脑使用是ubuntu20.04系统,所以使用Docker来安装ROS 的melodic版本。
GenLoco是一种用于训练四足机器人的通用运动(GenLoco)控制器的框架,该框架合成了通用的运动控制器,可部署在具有类似形态的各种四足机器人上。该方法是一种简单而有效的形态随机化方法,该方法按程序生成了一组不同的仿真机器人用于训练。
官方安装方法
也可以参考我的文章
如果使用docker必须使用sudo可以把当前用户添加进入dcoker用户组
# 添加docker用户组,一般已存在,不需要执行
sudo groupadd docker
# 将登陆用户加入到docker用户组中
sudo gpasswd -a ${USER} docker
# 更新用户组
newgrp docker
# 测试docker命令是否可以使用sudo正常使用
docker version
转自《为什么需要在docker命令前面加sudo?》
官方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 【端口】
使用的宇树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
他继承自谷歌的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.
本人使用Aliengo四足机器人
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正常使用则不用更改。
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})
roslaunch unitree_legged_real real.launch rname:=aliengo ctrl_level:=lowlevel firmwork:=3_2
roslaunch reinforce_controller rl_control_real.launch config_file:=${yaml_config_file_name}
rosrun reinforce_controller position_lcm
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
/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)
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
本文详细的展示了使用强化学习控制真实四足机器人的过程,希望对读者有所帮助。