【发布时间】:2021-08-23 19:21:51
【问题描述】:
背景
我有一个应用程序,要求我在无头 ROS 环境中启动多个 RViz 窗口。系统需要将图像文件发送到一些本地联网的哑终端,这些终端只能勉强显示图像文件(.jpg)。因此,我只需拍摄 RViz 显示器的屏幕快照并将其发送。这很好用,但是,我需要在启动时运行 RViz 窗口。
实施
ROS 念力系统在 Ubuntu 20.04 上运行。我使用 robot_upstart 为我提供了一个 systemd 服务的工作框架,然后修改了核心服务文件以允许 display_manager 访问
这是我的工作 system.d 服务文件,名为“test.service”
[Unit]
Description="bringup test"
After=network.target
After=display_manager.service
Wants=display_manager.service
[Service]
Type=simple
Environment="XAUTHORITY=/run/user/1000/gdm/Xauthority"
Environment="DISPLAY=:0"
Environment="XDG_RUNTIME_DIR=/home/<my_username/catkin_ws/tmp"
Environment="/home/<my_username>" # THIS FIXED THE ISSUE
ExecStart=/usr/sbin/test-start
[Install]
WantedBy=multi-user.target
这几乎有效。 journalctl -f -u test.service 列出一个错误:
Jun 06 21:10:22 aoede test-start[10209]: /opt/ros/noetic/lib/rviz/rviz: line 1: 10220 Aborted (core dumped) $0 $@
Jun 06 21:10:25 aoede dbus-daemon[10259]: [session uid=1000 pid=10257] AppArmor D-Bus mediation is enabled
Jun 06 21:10:28 aoede test-start[10237]: terminate called after throwing an instance of 'boost::filesystem::filesystem_error'
Jun 06 21:10:28 aoede test-start[10237]: what(): boost::filesystem::create_directory: Permission denied: "/.rviz"
Jun 06 21:10:28 aoede test-start[10218]: Aborted (core dumped)
它正在尝试写入目录 /.rviz 。当我以宽松的权限自己创建此目录时,它可以正常工作,并且 RViz 窗口全部启动。这个目录似乎充满了 RViz 实例的持久性文件。
我已尝试按上述方式设置 XDG_RUNTIME_DIR,但没有效果。我应该设置什么环境变量,或者其他方式,以便 RViz 在一个更合理的地方寻找?此外,如果有任何关于比上述更好的做法的建议,我们将不胜感激。
【问题讨论】: