搭建强化学习的机械臂MuJoCo环境以及urdf转xml文件方法

2024-04-25 22:12

本文主要是介绍搭建强化学习的机械臂MuJoCo环境以及urdf转xml文件方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、背景

基于强化学习的机械臂应用日趋广泛,摆脱了基于模型到达固定点的束缚。基于强化学习算法,机械臂可以完成拧魔方、推抓任务(Andy Zeng的经典论文),暂且想一下如果用传统方法完成此类复杂任务是何等困难。

强化学习作为一种试错的方式,在真实机械臂上进行训练不仅耗时,且会对环境或机器造成损坏,而在仿真环境中进行训练是一种可行的方式。MuJoCo作为当前主流的强化学习化境配置较为繁琐,这里简要记录下我的配置和使用过程。

二、MuJoCo安装

1.ubuntu18.04配置强化学习环境流程

(1)安装anaconda
官网下载anaconda脚本,进入脚本保存的目录,终端bash Anaconda3-2021.05-Linux-x86_64.sh
创建名为drl(自定义)的python3.6环境,并激活环境conda create -n drl python=3.6 anaconda
conda activate drl
启动anaconda命令:anaconda-navigator

(2)安装mujoco
官网下载mujoco200_linux.zip,在主目录下新建.mujoco文件夹,将mujoco200_linux.zip文件复制并解压到.mujoco文件夹,
解压后的文件不要使用mujoco200_linux这个名字,改为mujoco200
接着把下载好的密钥mjkey.txt分别复制到.mujoco和mujoco200/bin里

cp mjkey.txt ~/.mujoco
cp mjkey.txt ~/.mujoco/mujoco200/bin

添加环境变量,这里我添加的条数比其他教程上的要多,是我经过反复试验比较才确定的这种添加最后才不会报错。
打开bashrc文本: gedit ~/.bashrc

在.bashrc文本里添加:

export LD_LIBRARY_PATH=~/.mujoco/mujoco200/bin${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/dlut/.mujoco/mujoco200/bin
export MUJOCO_KEY_PATH=~/.mujoco${MUJOCO_KEY_PATH}

下面三条看情况添加,一般不用加

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/nvidia
export PATH="$LD_LIBRARY_PATH:$PATH"
export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libGLEW.so

保存文件ctrl+s并退出文本,接着激活一下:source ~/.bashrc

测试mujoco200是否安装成功:

cd ~/.mujoco/mujoco2000/bin
./simulate ../model/humanoid.xml

提示:解压命令unzip mujoco200.zip

(3)安装mujoco-py
先用anaconda激活虚拟环境 conda activate spinningup
运行下面代码:

sudo apt update
sudo apt-get install patchelf
sudo apt-get install python3-dev build-essential libssl-dev libffi-dev libxml2-dev  
sudo apt-get install libxslt1-dev zlib1g-dev libglew1.5 libglew-dev python3-pip

下载mujoco-py安装包,这里我们直接用git克隆过来

sudo apt install git
cd ~/.mujoco
git clone https://github.com/openai/mujoco-py
cd mujoco-py
pip install -r requirements.txt
pip install -r requirements.dev.txt
python setup.py install

重启电脑 reboot
进入环境并输入如下命令:

conda activate spinningup
sudo apt install libosmesa6-dev libgl1-mesa-glx libglfw3

在spinningup环境下 安装

pip install mujoco_py==2.0.2.8

###备选方案

pip3 install -U 'mujoco-py<2.1,>=2.0'

测试:
cd ~/.mujoco/mujoco-py/examples
python3 setting_state.py

至此,mujoco200和mujoco-py安装成功
(4)安装gym
0.进入anacondy虚拟环境 conda activate spinningup
1.git clone https://github.com/openai/gym.git
2.cd gym
3.sudo apt-get install -y python-numpy python-dev cmake zlib1g-dev libjpeg-dev xvfb libav-tools xorg-dev python-opengl libboost-all-dev libsdl2-dev swig
4.pip install -e .[all]

参考:https://zhuanlan.zhihu.com/p/472290066

三、在MuJoCo搭建自己的机械臂模型

在MuJoCo搭建自己的机械臂模型,其实就是将我们所常见的URDF文件转为xml文件,然后添加一些地板或其他环境信息,最后放入到.mujoco的model文件夹下即可。

1、xacro转urdf

因为ros的更新换代,许多机械臂的功能包不再提供urdf文件,而给的是xacro文件,因此第一步是将xacro转为urdf。

xacro转urdf时,xacro文件robot标签下添加

  <mujoco><compiler meshdir="../meshes_mujoco/" 其中../meshes_mujoco改为自己的mesh绝对文件夹路径,mesh文件夹需要和要转的xacro在同一个文件夹下balanceinertia="true" discardvisual="false" /></mujoco>

运行命令:

rosrun xacro xacro --inorder m1n6s300_standalone.xacro > m1n6s300_standalone.urdf 

注意:ubuntu18.04下--inorder可以省略,起到强转化作用。
报错:

resource not found: kinova_description
ROS path [0]=/opt/ros/melodic/share/ros
ROS path [1]=/opt/ros/melodic/share

解决方法:
网友:sudo cp -r ~/catkin_ws/src/mbot_description /opt/ros/melodic/share
将~/catkin_ws/src/mbot_description 修改为自己的路径 即:

sudo cp -r /home/qiucc/dual_ws/src/kinova_ros_melodic_devel/kinova_description  /opt/ros/melodic/share

成功解决!
检查urdf文件:check_urdf model.urdf
在RViz中可视化:
roslaunch urdf_tutorial display.launch model:=path/to/your/urdf/file

2、urdf转xml

在确认URDF模型没有问题后,进入MuJoCo的可执行文件夹内执行命令进行转换(如默认的~/.mujoco/mujoco200/bin):
执行命令:./compile /path/to/model.urdf /path/to/model.xml
即:

./compile /home/qiucc/dual_ws/src/kinova_ros_melodic_devel/kinova_description/urdf/m1n6s300_standalone.urdf /home/qiucc/dual_ws/src/kinova_ros_melodic_devel/kinova_description/urdf/m1n6s300_standalone.xml

若urdf转xml失败,报错为:

Error: Unknown mesh file type: base.dae
Object name = base, id = 0

解决方法:将urdf中的mesh标签中的后缀dae全部修改为stl,重新执行上述./compile命令

若报错:

Error: could not open STL file '/home/qiucc/dual_ws/src/kinova_ros_melodic_devel/kinova_description/urdf/base.stl'
Object name = base, id = 0

是因为没有在urdf加入mujoco的标签:

  <mujoco><compiler meshdir="../meshes_mujoco/" 其中../meshes_mujoco改为自己的mesh绝对文件夹路径,mesh文件夹需要和要转的xacro在同一个文件夹下balanceinertia="true" discardvisual="false" /></mujoco>

转换成功后,将得到的model.xml复制到.mujoco/mujoco200/model文件夹下 (提示:若主文件夹下没有.mujoco,是因为.文件为隐藏文件,快捷键ctrl+h即可显示

3、使用mujoco物理引擎打开.xml文件步骤

进入~/.mujoco/mujoco200/bin
运行命令: ./simulate …/model/model.xml 提示:…是进入上一个文件夹,model.xml为需要打开的xml文件
或者 ./simulate 绝对路径/model.xml

4、注意事项

注意:在使用mujoco建模时,xml文件添加物体时,size的大小是实际大小的一半
例如,添加一个长0.6m,宽0.6m,高1.0m的箱子,则为:

  <body name="desk" pos="0 0.6 -0.71" mocap="true"><geom type="box" size="0.3 0.3 0.5" rgba="0 .9 0 .5" contype="2"/></body>

展示一下我的双臂模型
在这里插入图片描述

四、在MuJoCo修改机械臂的颜色

有时我们导入的机械臂模型是白色的,和真实机械臂外观差别很大,如下图所示,这里介绍修改机械臂颜色的方法。
在这里插入图片描述
修改的地方如下,参考Intelligent-kinova—panda—models—assets—robot—panda—kinova_all_joints.xml

在这里插入图片描述在这里插入图片描述

这篇关于搭建强化学习的机械臂MuJoCo环境以及urdf转xml文件方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/935932

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

浅谈主机加固,六种有效的主机加固方法

在数字化时代,数据的价值不言而喻,但随之而来的安全威胁也日益严峻。从勒索病毒到内部泄露,企业的数据安全面临着前所未有的挑战。为了应对这些挑战,一种全新的主机加固解决方案应运而生。 MCK主机加固解决方案,采用先进的安全容器中间件技术,构建起一套内核级的纵深立体防护体系。这一体系突破了传统安全防护的局限,即使在管理员权限被恶意利用的情况下,也能确保服务器的安全稳定运行。 普适主机加固措施:

webm怎么转换成mp4?这几种方法超多人在用!

webm怎么转换成mp4?WebM作为一种新兴的视频编码格式,近年来逐渐进入大众视野,其背后承载着诸多优势,但同时也伴随着不容忽视的局限性,首要挑战在于其兼容性边界,尽管WebM已广泛适应于众多网站与软件平台,但在特定应用环境或老旧设备上,其兼容难题依旧凸显,为用户体验带来不便,再者,WebM格式的非普适性也体现在编辑流程上,由于它并非行业内的通用标准,编辑过程中可能会遭遇格式不兼容的障碍,导致操

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss