由于寒假在家,手上没有闲置的物理机用于折腾,所以把 ROS 搭在了 公用 GPU 服务器上。

ROS 安装

ROS 的官方提供了 docker 镜像,可以方便在生产环境中部署。http://wiki.ros.org/docker/Tutorials/GUI
不过我现在用的是 MAC 的机器,做 X11 转发不是很方便,所以需要使用 VNC 的方式访问。因此使用的是这个镜像。

  1. version: "3"
  2. services:
  3. ros-kinetic:
  4. image: ct2034/vnc-ros-kinetic-full
  5. ports:
  6. - "6080:80"
  7. - "5900:5900"
  8. volumes:
  9. - ./data:/mnt
  10. environment:
  11. VNC_PASSWORD: passw0rd
  12. TZ: Asia/Shanghai
  13. network_mode: bridge
  1. $ docker-compose up -d

一些坑

  • 如果直接用 VNC 连 5900 端口的话,分辨率就是1024x768。如果用它的 novnc 连接,登录后的分辨率取决于你第一次连接的时候的窗口大小,如果要改,按照它文档的说法需要销毁容器重建。不过如果你想指定分辨率是可以的,因为它容器里是用 supervisor 当守护进程的。查看 /etc/supervisor/conf.d/supervisor.conf 可以看到 xvfb 指定了分辨率,改一下之后 supervisorctl update 就行。
  • 其它坑暂时还没有,不影响使用。

仿真环境

准备工作

进入系统长这样,基本上所有要的东西都有了。不过由于这个镜像历史比较悠久,建议使用前先更新一下所有的包。(否则一定会遇到问题?)
image.png

  1. # apt update && apt upgrade

最好补全一下依赖:

  1. # apt-get install gazebo7 ros-kinetic-qt-build ros-kinetic-gazebo-ros-control ros-kinetic-gazebo-ros-pkgs ros-kinetic-ros-control ros-kinetic-control-toolbox ros-kinetic-realtime-tools ros-kinetic-ros-controllers ros-kinetic-xacro python-wstool ros-kinetic-tf-conversions ros-kinetic-kdl-parser

建立一个工作目录 ros_ws ,由于前面的配置中把 /mnt 目录挂出来了,所以我们把工作目录建在 /mnt 下。

  1. # mkdir /mnt/ros_ws
  2. # ln -s /mnt/ros_ws

安装模型文件

安装模型文件到 Baxter 机器人工作空间:

  1. # cd ~/ros_ws/src
  2. # wstool init .
  3. # wstool merge https://raw.fastgit.org/RethinkRobotics/baxter_simulator/kinetic-devel/baxter_simulator.rosinstall
  4. # wstool update

编译工作空间:

如果这步报错了,是因为镜像里的包没有装全,需要把依赖装全。

  1. # cd ~/ros_ws
  2. # catkin_make
  3. # cp src/baxter/baxter.sh .

启动仿真环境

这一步可能会提示你 ROS 的版本不符,是因为 baxter.sh 脚本里指定了版本,需要自行修改一下。 脚本里的 IP 地址什么的是在操作真实机器人的时候配置的,这里不需要管。

  1. # cd ~/ros_ws
  2. # ./baxter.sh sim
  3. # roslaunch baxter_gazebo baxter_world.launch

打开后长这样:
image.png
可能在打开的过程中会有一堆报红,其中有一个是关于 GazeboRosControlPlugin 的错误,具体内容如下:

  1. GazeboRosControlPlugin missing <legacyModeNS> while using DefaultRobotHWSim, defaults to true.
  2. This setting assumes you have an old package with an old implementation of DefaultRobotHWSim, where the robotNamespace is disregarded and absolute paths are used instead.
  3. If you do not want to fix this issue in an old package just set <legacyModeNS> to true.

参考这个回答解决。


下一篇将介绍在仿真环境中运行 example。