上勾的fish 2024-03-21 16:39 采纳率: 25%
浏览 8
已结题

rosbag代码开机自启动报错

ubuntu20,04 arrch64 代码里有以下代码,编译后手动运行正常,想要开机自启动,sh脚本开机后显示sh1: rosbag not found


std::string command = "rosbag record -O " + filename + " " + topic_name + " --duration=3";
            std::cout << "Recording command: " << command << std::endl;

            // 执行命令
            int result2 = system(command.c_str());
  • 写回答

21条回答 默认 最新

  • 阿里嘎多学长 2024-03-21 16:40
    关注
    获得0.20元问题酬金

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    这个错误信息 sh: rosbag: not found 表示在系统启动时,rosbag 命令没有被找到,这通常是因为环境变量没有正确设置,或者 ROS 的工作空间没有被source。在命令行手动运行正常,说明ROS环境在交互式会话中已经正确配置,但在非交互式环境中(如通过cron或者systemd服务启动的脚本)可能缺失了必要的环境初始化。

    为了解决这个问题,你可以采取以下步骤:

    1. 确保ROS环境变量在启动脚本中被设置: 在你的启动脚本(.sh 文件)的开头,添加source ROS环境的命令。如果你的ROS安装在默认位置,并且你的工作空间在~/catkin_ws/devel/setup.bash,你应该添加以下行:

      source /opt/ros/noetic/setup.bash  # 根据你的ROS版本替换noetic
      source ~/catkin_ws/devel/setup.bash
      
    2. 使用完整路径执行rosbag: 如果你不希望在脚本中source整个ROS环境,你可以指定rosbag的完整路径来执行它。首先,你需要找到rosbag的实际位置,通常在/opt/ros/<distro>/bin目录下。例如:

      /opt/ros/noetic/bin/rosbag record -O <filename> <topic_name> --duration=3
      
    3. 使用systemd服务: 创建一个systemd服务来启动你的程序,这样可以确保ROS环境被正确加载。创建一个服务文件,比如/etc/systemd/system/record_rosbag.service,内容如下:

      [Unit]
      Description=Record rosbag service
      After=network.target ros-core.service
      
      [Service]
      ExecStart=/bin/bash -c "source /opt/ros/noetic/setup.bash && source ~/catkin_ws/devel/setup.bash && /path/to/your/program"
      WorkingDirectory=/path/to/your/program
      Restart=on-failure
      User=<your_username>
      
      [Install]
      WantedBy=multi-user.target
      

      替换<your_username>为你的用户名,/path/to/your/program为你的可执行文件或脚本的路径。然后执行以下命令来启动和启用服务:

      sudo systemctl daemon-reload
      sudo systemctl enable record_rosbag.service
      sudo systemctl start record_rosbag.service
      

    请确保根据你的实际ROS安装和程序位置调整上述建议。如果问题仍然存在,可能需要进一步检查系统路径和权限设置。

    评论

报告相同问题?

问题事件

  • 系统已结题 3月29日
  • 创建了问题 3月21日

悬赏问题

  • ¥15 铜与钢双金属板叠加在一起每种材料300mm长,18mm宽,4mm厚一端固定并加热至80℃,当加热端温度保持不变时另一端的稳态温度。ansys
  • ¥15 django5安装失败
  • ¥60 ios系统storm sniffer 写入http规则加密如何破解?
  • ¥15 Java与Hbase相关问题
  • ¥15 后缀 crn 游戏文件提取资源
  • ¥15 ANSYS分析简单钎焊问题
  • ¥20 bash代码推送不上去 git fetch origin master #失败了
  • ¥15 LOL外服加入了反作弊系统,现在游戏录像rofl文件离线都无法打开
  • ¥15 在centos7安装conda
  • ¥15 c#调用yolo3 dll文件获取的数据对不上