visual-pushing-grasping环境配置及复现 - 知乎
视觉机械臂 visual-pushing-grasping - 云+社区 - 腾讯云
Requirements: (tested on Ubuntu 16.04.4 LTS):
Python 2.7 or Python 3
NumPy, SciPy, OpenCV-Python, Matplotlib. You can quickly install/update these dependencies by running the following (replace pip with pip3 for Python 3):
pip install numpy scipy opencv-python matplotlib
PyTorch version 0.3. Since 0.3 is no longer the latest version, see installation instructions here or run the following:
pip install torch==0.3.1 torchvision==0.2.0
Support for PyTorch version 0.4+ is work-in-progress and lives in this branch, but currently remains unstable.
V-REP (simulation environment)
配置开始
环境: conda create -n vpg python=3.6
//source activate(importent)
source activate vpg
安装依赖:pip install numpy scipy opencv-python matplotlib
安装pytorch: conda install pytorch==1.4.0 torchvision==0.5.0 cudatoolkit=10.1 -c pytorch
安装add/coppeliaSim: https://www.icode9.com/content-3-801529.html
下载官方V-REP,参考网址:https://www.coppeliarobotics.com/previousVersions;
选择中间EDU,Ubuntu16.04版本,是免费的;
将安装包放到一定的路径下,这里放到"/Home/heixiazi/add"目录下,并且重命名为coppeliaSim;
将下载好的安装包解压到/home/heixiazi/add/CoppeliaSim目录下;
添加source源设置coppeliaSim路径: sudo gedit ~/.bashrc
在.bashrc中最后一行添加:export VREP_ROOT=$HOME/heixiazi/add/CoppeliaSim
source ~/.bashrc
启动V-REP: cd到安装目录下
启动sh文件 ./coppeliaSim.sh
运行
1. Checkout this repository and download our pre-trained models.
git clone https://github.com/andyzeng/visual-pushing-grasping.git visual-pushing-grasping
cd visual-pushing-grasping/downloads
./download-weights.sh
cd ..
2. Run V-REP (navigate to your V-REP directory and run ./vrep.sh). From the main menu, select File > Open scene..., and open the file visual-pushing-grasping/simulation/simulation.ttt from this repository.
3. In another terminal window, run the following (simulation will start in the V-REP window):
python main.py --is_sim --obj_mesh_dir 'objects/blocks' --num_obj 10 \ --push_rewards --experience_replay --explore_rate_decay \ --is_testing --test_preset_cases --test_preset_file 'simulation/test-cases/test-10-obj-07.txt' \ --load_snapshot --snapshot_file 'downloads/vpg-original-sim-pretrained-10-obj.pth' \ --save_visualizations
Note: you may get a popup window titled "Dynamics content" in your V-REP window. Select the checkbox and press OK. You will have to do this a total of 3 times before it stops annoying you.
训练:visual-pushing-grasping: Train robotic agents to learn to plan pushing and grasping actions for manipulation with deep reinforcement learning.
报错
RuntimeError: parallel_for failed: cudaErrorNoKernelImageForDevice: no kernel image is available for execution on the device
百度说是cuda和pytorch版本不对,pytorch太高了,需要降级,因此安装了cuda9.2,重新配置环境
环境: conda create -n vpg-9.2 python=3.6
//source activate(importent)
source activate vpg
安装依赖:pip install numpy scipy opencv-python matplotlib
安装pytorch: conda install pytorch==1.4.0 torchvision==0.5.0 cudatoolkit=9.2 -c pytorch
pytorch离线下载:Linux 64 :: Anaconda.org
cd到安装包所在路径:
conda install --offline pytorch-1.4.0-py3.6_cuda9.2.148_cudnn7.6.3_0.tar.bz2
注意 cuda cudnn pytorch 三个的版本
pytorch-1.4.0-py3.6_cuda9.2.148_cudnn7.6.3_0
要求cudnn版本是7.6.3的
因此在每次运行前需要更换他的cudnn内容。
#9.2-cudnn7.6.3
sudo cp /home/heixiazi/add/cudnn/cuda9.2-7.6.3/include/cudnn.h /usr/local/cuda-9.2/include
sudo cp /home/heixiazi/add/cudnn/cuda9.2-7.6.3/lib64/libcudnn* /usr/local/cuda-9.2/lib64
sudo chmod a+r /usr/local/cuda-9.2/include/cudnn.h /usr/local/cuda-9.2/lib64/libcudnn*source ~/.bashrc
验证
#9.2
cd /usr/local/cuda-9.2/samples/1_Utilities/deviceQuery
sudo make
./deviceQuery
make: Nothing to be done for `all' 解决方法
1.这句提示是说明你已经编译好了,而且没有对代码进行任何改动。
若想重新编译,可以先删除以前编译产生的目标文件:
make clean
然后再
make
2.出现这种情况解决方法:
a.make clean 清除安装时留下的文件
b.在运行一下ldconfig
c.再make 可运行出结果
在查看cudnn版本对不对
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
重新运行!
还是报cuda的错,这次尝试降低pytorch的版本!降为1.2.0!同时cudnn内容也要更换为7.6.2!
成功!
1.启动V-REP:
cd到安装目录下
启动sh文件 ./coppeliaSim.sh
在coppeliaSim界面选择File
>Open scene,再打开
visual-pushing-grasping/simulation/simulation.ttt
2.链接pycharm和coppeliaSim
打开pycharm,cd到visual-pushing-grasping代码,在终端输入:
python main.py --is_sim --push_rewards --experience_replay --explore_rate_decay --save_visualizations
3.从每个培训课程收集的数据(包括RGB-D图像、相机参数、高度图、动作、奖励、模型快照、可视化等)保存到日志文件夹中的目录中。可以通过添加标志--load_snapshot和--continue_logging来恢复培训会话,然后从--logging_目录指定的会话目录加载--snapshot_文件指定的最新模型快照和转换历史:
python main.py --is_sim --push_rewards --experience_replay --explore_rate_decay --save_visualizations \--load_snapshot --snapshot_file 'logs/YOUR-SESSION-DIRECTORY-NAME-HERE/models/snapshot-backup.reinforcement.pth' \--continue_logging --logging_directory 'logs/YOUR-SESSION-DIRECTORY-NAME-HERE' \
4.可以使用不同的标志修改或打开/关闭各种培训选项(运行python main.py-h查看所有选项):
usage: main.py [-h] [--is_sim] [--obj_mesh_dir OBJ_MESH_DIR][--num_obj NUM_OBJ] [--tcp_host_ip TCP_HOST_IP][--tcp_port TCP_PORT] [--rtc_host_ip RTC_HOST_IP][--rtc_port RTC_PORT][--heightmap_resolution HEIGHTMAP_RESOLUTION][--random_seed RANDOM_SEED] [--method METHOD] [--push_rewards][--future_reward_discount FUTURE_REWARD_DISCOUNT][--experience_replay] [--heuristic_bootstrap][--explore_rate_decay] [--grasp_only] [--is_testing][--max_test_trials MAX_TEST_TRIALS] [--test_preset_cases][--test_preset_file TEST_PRESET_FILE] [--load_snapshot][--snapshot_file SNAPSHOT_FILE] [--continue_logging][--logging_directory LOGGING_DIRECTORY] [--save_visualizations]
5.我们论文中基线比较和消融研究的结果可以使用这些标志进行复制。例如:
通过推送和抓取(P+G反应)培训反应策略:指定--method去反应reactive,删除--push_rewards,删除--explore_rate_decay:
python main.py --is_sim --method 'reactive' --experience_replay --save_visualizations
培训只抓(只抓)的反应性政策,与上面的P+G类似,但只添加了--grass_:
python main.py --is_sim --method 'reactive' --experience_replay --grasp_only --save_visualizations
培训VPG政策,不提供任何推动奖励(VPG noreward);与常规VPG类似的参数,但删除--push_奖励:
python main.py --is_sim --experience_replay --explore_rate_decay --save_visualizations
培训短视的VPG政策,降低未来奖励的折扣因素(VPG近视);与常规VPG的参数类似,但将--future_reward_折扣设置为0.2:
python main.py --is_sim --push_rewards --future_reward_discount 0.2 --experience_replay --explore_rate_decay --save_visualizations
6.要绘制培训期间课程的绩效,请运行以下命令:
python plot.py 'logs/YOUR-SESSION-DIRECTORY-NAME-HERE'
实线表示训练步骤中的%抓握成功率(主要绩效指标),虚线表示%推压,然后是抓握成功率(衡量推压质量的次要指标)。默认情况下,图中的每个点测量过去200个训练步骤的平均性能。x轴的范围是从0到2500个训练步骤。可以在plot.py顶部轻松更改这些参数。
要比较不同会话之间的性能,可以一次绘制多个图:
python plot.py 'logs/YOUR-SESSION-DIRECTORY-NAME-HERE' 'logs/ANOTHER-SESSION-DIRECTORY-NAME-HERE'
7.我们提供了11个测试用例集,用于对抗性杂波的模拟。每个测试用例由放置在机器人前面的工作空间中的3-6个对象组成。这些配置是手动设计的,以反映具有挑战性的拣选场景,并在培训过程中保持排他性。在许多这样的测试用例中,对象紧密地并排放置,其位置和方向即使是最佳抓取策略也难以在不首先消除混乱的情况下成功拾取任何对象。作为健全性检查,将在工作区中另外放置一个与配置分离的孤立对象。这只是为了确保所有策略在基准测试之前都经过充分培训(即,如果无法抓住孤立对象,则策略尚未准备就绪)。
上面的演示在一个测试用例上多次运行我们预先训练好的模型(x30)。要测试您自己预先训练好的模型,只需更改--snapshot_文件的位置:
python main.py --is_sim --obj_mesh_dir 'objects/blocks' --num_obj 10 \--push_rewards --experience_replay --explore_rate_decay \--is_testing --test_preset_cases --test_preset_file 'simulation/test-cases/test-10-obj-07.txt' \--load_snapshot --snapshot_file 'YOUR-SNAPSHOT-FILE-HERE' \--save_visualizations
来自每个测试用例的数据将保存到logs文件夹中的会话目录中。要报告会话的平均测试性能,请运行以下操作:
python evaluate.py --session_directory 'logs/YOUR-SESSION-DIRECTORY-NAME-HERE' --method SPECIFY-METHOD --num_obj_complete N
其中,指定方法可以是反应式的,也可以是强化式的,具体取决于模型的体系结构。
--num_obj_complete N 定义了需要考虑的对象的数量,以便考虑完成的任务。例如,在演示测试用例中评估预先训练的模型时,N应设置为6:
python evaluate.py --session_directory 'logs/YOUR-SESSION-DIRECTORY-NAME-HERE' --method 'reinforcement' --num_obj_complete 6
使用三个指标衡量平均绩效(对于所有指标,越高越好):
所有测试运行的平均完成率%:通过拾取至少N个对象而连续失败超过10次来衡量策略完成任务的能力。
每次完成的平均抓取成功率百分比。
平均%操作效率:描述策略完成任务的能力。有关如何计算的更多详细信息,请参阅论文。
8.在模拟中创建您自己的测试用例
要设计具有挑战性的测试用例,请执行以下操作:
1.在V-REP中打开仿真环境(导航到您的V-REP目录并运行./vrep.sh)。从主菜单中,选择文件>打开场景…,然后打开文件visual/simulation/simulation.ttt。
2.在另一个终端窗口中,导航到此存储库并运行以下操作:
python create.py
3.在V-REP窗口中,使用V-REP工具栏(对象平移/旋转)围绕对象移动到所需的位置和方向。
4.在终端窗口中,键入要为其保存测试用例的文本文件的名称,然后按enter键。
5.试用:通过运行main.py在测试用例上运行一个经过训练的模型,就像在演示中一样,但是标记--test_preset_file指向测试用例文本文件的位置。
9.在真正的机器人上运行(UR5)
此存储库中的相同代码可用于在真正的UR5机器人手臂上进行训练(使用UR软件版本1.8进行测试)。为了与更高版本的UR软件通信,可能需要在robot.py中进行一些小的更改(例如,解析_tcp_state_data等功能)。使用Python2.7进行测试(未使用Python3进行完全测试)。