在 ubuntu 22.04.5 中使用 ROS2 通过 C++ 自动播放音乐

问题描述 投票:0回答:1

我正在编写 ROS 代码,以便在 Ubuntu 22.04 中自动播放音乐。具体来说,代码的目的是通过扬声器通知机器人的状态。机器人被设计为跟随目标,因此如果目标处于中立状态,则不播放声音,检测到目标时播放音乐 1,目标丢失时播放音乐 2


int g_target_detecting_state = 0; // global variable to save status

void clusteringNode::timer_callback()
{
   // Determine status, ROS code 
}

void followingSoundPlay(void) // (const char* filename)
{
    sf::SoundBuffer go_buffer, stop_buffer;

    if (!go_buffer.loadFromFile("audio/music1.wav") || !stop_buffer.loadFromFile("audio/music2.wav"))
    {
        std::cerr << "load failed!";
    }

    sf::Sound go_sound, stop_sound;

    go_sound.setBuffer(go_buffer);
    stop_sound.setBuffer(stop_buffer);

    while(1)
    {
        if(g_target_detecting_state == 0)
        {
            go_sound.stop();
            stop_sound.stop();
        }
        else if(g_target_detecting_state == 1)
        {
            stop_sound.stop();
            go_sound.play();
        }
        else if(g_target_detecting_state == 2)
        {
            go_sound.stop();
            stop_sound.play();
        }

        std::this_thread::sleep_for(std::chrono::milliseconds(1000));
    }
}

int main(int nArgc,const char* pszArgv[])
{
    rclcpp::init(nArgc, pszArgv);

    auto node = std::make_shared<clusteringNode>();

    std::thread ros_thread([&](){
        rclcpp::spin(node);
    });
    std::thread play_thread(followingSoundPlay);

    if(ros_thread.joinable())
    ros_thread.join();
    if(play_thread.joinable())
    play_thread.join();

    rclcpp::shutdown();

    return 0;
}

这是我的简短代码。如果您需要更多解释,请告诉我。

我尝试了 crontab -e 在启动时自动运行我的代码(我听说 systemd 非常致命,所以我到目前为止没有尝试)。当然我制作脚本并授予权限755并且crontab -e是用户crontab。

我手动运行代码,它可以处理音乐,并且 crontab -e 也可以工作,但只有音乐部分不起作用。我有什么遗漏的地方吗?如果你找到了请告诉我

PS。感谢阅读我的问题,即使我认为我的英语不好。

奇怪的一件事是我尝试使用 2 台电脑,但一台可以工作,另一台则不能。有没有可能是我安装的Ubuntu错误?

ubuntu bash cron
1个回答
0
投票

感谢所有提供建议的人。是 cron DISPLAY 变量问题。像 SFML 这样的库应该与 GUI 显示交互,但 cron 不在默认状态下。所以我将我的 cron 更改为

显示=:0 XDG_RUNTIME_DIR=/run/user/(来自 id -u 的数字) ***** /路径//脚本

© www.soinside.com 2019 - 2024. All rights reserved.