be2rlab / yaprofi_robotics_2020

1 stars 0 forks source link

Ошибка при запуске симулятора #5

Closed gdamion closed 4 years ago

gdamion commented 4 years ago

При запуске симулятора происходит ошибка инициализации плагина ROS: Plugin 'ROSInterface': loading... RosInterface: ROS_MASTER_URI is not set Error with plugin 'ROSInterface': load failed (failed initialization).

В свою очередь в симуляторе высвечивается: stack traceback: [string "CHILD SCRIPT drone"]:80: in function
Lua runtime error: [string "CHILD SCRIPT drone"]:80: attempt to index global 'simROS' (a nil value)

При этом, когда я в этом же терминале проверяю наличие этой переменной, то она есть: echo $ROS_MASTER_URI http://localhost:11311

Примечательно, что вне данного скрипта ROS в докере работает, roscore выполняется. Также в самой папке csim файл плагина libsimExtROSInterface.so на месте. Использую docker на ubuntu 18.04. Пробовал и с обновленной версией докера, и со старой, все одно и то же.

Также проверил исходный код плагина:

void onStart()
{
    if(!getenv("ROS_MASTER_URI"))
        throw std::runtime_error("ROS_MASTER_URI is not set");

    if(!initialize()) 
        throw std::runtime_error("ROS master is not running");

    if(!registerScriptStuff())
        throw std::runtime_error("failed to register script stuff");

    simSetModuleInfo(PLUGIN_NAME, 0, "ROS Interface Plugin", 0);
    simSetModuleInfo(PLUGIN_NAME, 1, BUILD_DATE, 0);
}

В данном методе проходит инициализация плагина. И когда он не обнаруживает ROS_MASTER_URI, он рушится, хоть ROS_MASTER_URI и есть...

Буду очень благодарен за помощь!

kirillin commented 4 years ago

Если еще не решили проблему, поробуйте удалить из скрипта run_docker.bash строку

-e ROS_IP=localhost \

gdamion commented 4 years ago

Решил проблему! Было даже не обязательно убирать строку с ROS_IP. Проблема куда банальнее: всегда на всякий случай скрипт запускал с sudo, но оказалось, что start_scene.bash с sudo просто не работает. Честно говоря, впервые такое вижу: обычно наоборот с sudo все работает, а без него - нет ;)

kirillin commented 4 years ago

А, да. Это связано с тем, что для каждого пользователя (баш-сессии) прописываются определенные переменные окружения. В частности, при запуске терминала вызывается скрипт ~/.bashrc, который прописывает настройки и подобное. Он же вызывает и <ros-path>/setup.bash, которые прописывает, где находятся всякие рос-овские штуки.

Для пользователя root это не настроено и не нужно.