Running ROS on WSL
简短版 如果根本没有出现图形界面,请禁用OpenGL的外部转发,全部在WSL内进行渲染: export LIBGL_ALWAYS_INDIRECT=0 如果出现了图形界面,但是中间是黑屏,可以通过--verbose检查 如果是gazebo 7 (ROS Kinetic默认),大概率是第一次模型没有下下来,自己手动下载模型放到/.gazebo/models/目录下即可 如果是gazebo 9 (ROS Melodic),大概率是gazebo server的IP问题,在环境里设置一下gazebo server的IP即可: export GAZEBO_IP=127.0.0.1 闲来无事玩ROS,配环境。一杯茶,一把琴,一个环境配一宿。(不是 言归正传,感觉周围好多人都开始玩ROS,我也玩玩,然而拦在很多人面前的第一道坎竟是安装。事实上ROS官方对于正常的使用者已经提供了清晰明了的安装指南,只要前往官网进行操作即可。 但是我显然不是正常人并没有安装Ubuntu,原因很多,之前还专门写文喷过Ubuntu,但是招架不住这次很多老师指定安装ROS Kinetic,ROS的上一个LTS版本,而这个版本只能安装在Ubuntu 16.04下,于是,我就动了WSL的邪念。 WSL好处很多,你可以直接在Windows下“无缝”使用一个Linux发行版(虽然跟内核有关的东西都被砍掉了),而且WSL的主题安装之后,你可以同时安装很多个发行版,甚至还能通过Raft WSL等工具管理不同发行版的不同快照,这次我就索性直接在WSL里同时安装了两个不同的Ubuntu发行版,分别来安装ROS Kinetic和Melodic版本。 WSL的安装在此略过,网上教程一搜一大把,我就不过多赘述,但是在WSL下,跑通gazebo,麻烦事还是很多的,下面开始排坑。 首先,你得再安装一个Ubuntu的发行版,直接去商店下载就好。 然后安装一下ROS,视网络情况而定,大概10~30分钟的样子。 中间有一步sudo rosdep init可能会因为网络原因很慢,解决办法就是开proxy export https_proxy=xxx sudo -E rosdep init -E的意义就是将你现在设置好的proxy环境带入sudo中 然后你需要准备一个X Server,我使用的是Xming,其他的X Server不保证兼容性。 通过XLaunch启动X Server,注意要关闭Native opengl,不然WSL会试图讲渲染工作交给外部的X Server,但是我试验了一下似乎不太行,干脆就强制使用软OpenGL算了。(再次尝试发现不关也行,主要不在WSL里面指定外部OpenGL就行 划红线的这项要取消勾选 测试一下 roslaunch turtle_tf turtle_tf_demo.launch # on another terminal rosrun rviz rviz -d `rospack find turtle_tf`/rviz/turtle_rviz.rviz 发现可视化工具rviz是可以正常使用的 但是故事没有结束,事实上ROS里面还有一个重要的仿真环境gazebo 我们来测试一下 gazebo 然后发现 中间的仿真是黑的??? 很多人就会就此得出结论——WSL不能运行gazebo,我以前也这么以为,直到最近…… Gazebo 7 我们来试图寻找一下错误的原因...