# Установка ПО

## Установка ОС, библиотек и стороннего ПО

1. Установите Ubuntu 20.04. Обратите внимание, что при установке ОС на виртуальную машину, работа среды симуляции будет затруднительна. Установить Ubuntu 20.04 можно по [ссылке](https://losst.pro/ustanovka-ubuntu-20-04).После установки НЕ соглашайтесь на обновление до Ubuntu 22 или более новых версий.
2. Для удобства работы с ПО робота мы рекомендуем установить следующие приложения:&#x20;

* Terminator - альтернатива стандартному терминалу. [Установка](https://linuxthebest.net/terminal-terminator-na-ubuntu/).
* Microsoft VSCode - бесплатная среда разработки, имеющая множество расширений. Советуем сразу установить расширения Python, CMake, ROS. [Инструкция по установке](https://code.visualstudio.com/docs/setup/linux), [инструкция по работе с расширениями](https://code.visualstudio.com/docs/editor/extension-marketplace).
* Sublime Text - удобный текстовый редактор. [Установка](https://www.sublimetext.com/docs/linux_repositories.html).

Вы также можете установить эти приложения через магазин приложений Ubuntu Software.

3. Установите ROS Noetic. Инструкция по установке доступна [здесь](https://wiki.ros.org/Installation/Ubuntu). Устанавливайте версию Desktop-Full.
4. Установите pip:

```
sudo apt install python3-pip
```

5. Установите следующие библиотеки:

```
pip install numpy==1.24.4
pip install control==0.9.4
pip install pyrr==0.10.3
pip install pybullet==3.2.5
pip install pyserial==3.5
pip install pyqtgraph==0.13.3
pip install gymnasium
pip install pcl==0.0.0.post1
pip install pyquaternion==0.9.9
pip install evdev
pip install pyudev
sudo apt install ros-noetic-joy
```

6. Установите библиотеку протокола обмена данными между приложения LCM. Для установки LCM выполните следующий команды. Более подробная информация о протоколе и его установке в [документации](https://lcm-proj.github.io/lcm/).

```
sudo apt install build-essential 
pip install Sphinx==7.1.2 
pip install myst-parser==2.0.0 
pip install sphinx-rtd-theme==1.3.0 
pip install lcm==1.4.4 
curl -L -O https://github.com/lcm-proj/lcm/archive/refs/tags/v1.5.0.zip 
unzip v1.5.0.zip 
cd lcm-1.5.0 
mkdir build 
cd build 
cmake .. 
make 
sudo make install
```

6. Если вы планируете использовать Dualshock 4, то вам потребуется установить соответствующий драйвер. Подробности по установке см. ниже в разделе [Подключение Dualshock 4](#podklyuchenie-dualshock-4).

## Настройка ROS

1. Добавьте информацию о ROS в файл .bashrc. Для этого выполните команды:

```
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
```

2. Создайте рабочее пространство для ROS

```
mkdir -p ~/mors_ws/src
cd ~/mors_ws/
catkin_make
```

3. Добавьте в bashrc информацию о новом рабочем пространстве (как в п.1)

```
echo "source ~/mors_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
```

## Установка ПО робота

1. Перейдите в mors\_ws/src и скачайте файлы из репозиториев:

```
cd ~/mors_ws/src
git clone https://github.com/voltdog/mors_base
git clone https://github.com/voltdog/mors_pc
git clone https://github.com/loco-3d/whole_body_state_msgs.git
```

{% hint style="info" %}
Если у вас возникают ошибки при скачивании с Github,  то скачайте файлы zip-арзивом через веб-интерфейс сайта, а затем разархивируйте архив в папку \~/mors\_ws/src.
{% endhint %}

2. Соберите проект

```
cd  ~/mors_ws/
catkin_make
```

{% hint style="warning" %}
Если по какой-то причине появляются ошибки при сборке определенного пакета, то сначала соберите именно этот пакет командой:

catkin\_make --only-pkg-with-deps <имя пакета>

При корректной сборке, снова выполните команду catkin\_make
{% endhint %}

3. Убедитесь, что робот выключен. Также для работы симулятора, необходимо, чтобы в файле **.bashrc** не было информации об удаленном подключении к ROS-мастеру. Откройте файл **.bashrc** командой `nano ~/.bashrc` и проверьте наличие строк:

```
export ROS_MASTER_URI=http://10.42.0.1:11311/
export ROS_HOSTNAME=<IP-адрес компьютера>
```

Если их нет, то всё в порядке. Если строчки есть, то просто закомментируйте их.

4. Запустите симулятор со всеми необходимыми управляющими модулями.

```
roslaunch mors bringup_sim.launch robogui:=true
```

Откроются окно симулятора и окно графического интерфейса для отправки команд. Инструкция по работе с графическим интерфейсом доступна по [ссылке](https://voltbro.gitbook.io/robot-sobaka-mors/nastroika-i-obsluzhivanie/graficheskii-interfeis).

{% hint style="warning" %}
Если вы работаете в виртуальной машине, то симуляция не сможет запуститься корректно!
{% endhint %}

## Проблемы при запуске

#### Ошибка cannot ping \[/move\_base]

В cmd\_commutator main.py  идет пинг ноды move\_base. Чтобы ошибка не раздражала, нужно перейти в функцию rosnode\_ping (строка 100, кликнуть мышкой через ctrl) и в файле /opt/ros/noetic/lib/python3/dist-packages/rosnode/\_\_init\_\_.py закомментировать строку code

```
print("cannot ping [%s]: unknown node"%node_name, file=sys.stderr)
```

## Подключение Dualshock 4

Дополнительную информацию по подключению джойстика можно найти по [ссылке](http://willshw.me/2018/12/24/connect-ps4-joystick.html) (пп. 1,2,4).

1. Убедитесь, что на вашем компьютере работает bluetooth-адаптер. &#x20;
2. Откройте окно Bluetooth Settings и включите ваш bluetooth-адаптер.
3. Установите приложение для тестирования геймпадов:

```
sudo apt-get install jstest-gtk
```

4. Подключите джойстик к компьютеру. Для этого откройте настройки bluetooth. Затем одновременно на джойстике нажмите кнопки SHARE и PS. Индикатор на джойстике должен начать прерывисто моргать. После этого в списке Devices появится устройство Wireless Controller. Кликните по нему мышкой, чтобы установить соединение.
5. Протестируйте работу джойстика:

```
jstest-gtk
```

Проверьте работоспособность всех элементов джойстика.

4. Установите драйвер Dualshock 4:

```
pip install ds4drv==0.5.1
```

5. Проверьте корректность работы драйвера. Введите команду

```
sudo ds4drv
```

В случае успешного подключения к джойстику программа выдаст следующее сообщение:

```
[info][controller 1] Created devices /dev/input/<js_x> (joystick) /dev/input/event256 (evdev) 
[info][bluetooth] Scanning for devices
```

, где вместо `<js_x>` будет указан номер вашего джойстика в системе.

6. Если у вас не оригинальный джойстик, то могут возникнуть проблемы с работой в ROS. Чтобы убрать проблему, вам нужно в файле `/usr/local/lib/python3.8/dist-packages/ds4drv/backends/hidraw.py` закомментировать строчку в следующей части кода:

```
class HidrawBluetoothDS4Device(HidrawDS4Device):
    __type__ = "bluetooth"

    report_size = 78
    valid_report_id = 0x11

    def set_operational(self):
        # self.read_feature_report(0x02, 37)
        pass
```

<br>
