robot¶
Contents:
robot¶
Kromium’s code which controls the robot and communicates with the VR headset.
Important information¶
If you want to run any ROS2 node after making changes to any Python file inside the
robot/src
folder, you need to rebuild (./colcon
).If a new Python package is added to
requirements.txt
you would need to run./build_image
again.
Test physically (production)¶
Physically implies using the expansion board.
Make sure that production
is set to true
in the config.
# robot/
./run_docker_production
Enters the container as root
to access the /dev/ttyUSB0
(expansion board).
This device is also passed into the container.
Not testing physically (not production)¶
Not using expansion board.
Make sure that production
is set to false
in the config.
# robot/
./run_docker
If you get an error when trying to ./run_all
, it might be because of non-root permissions.
You can try to delete the build
, install
and log
folders and run ./colcon
again.
Error: Access already in use when trying to start¶
Make sure the Meta Quest 3 headset has closed the app, and run ./kill_address
.
Prerequisites¶
Install Docker¶
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
Give permission to use Docker¶
sudo groupadd docker
sudo usermod -aG docker $USER
Installation¶
Build the image¶
# robot/ (same directory as the Dockerfile)
./build_image
Install MongoDB¶
docker pull mongodb/mongodb-community-server:latest
Add data to the database.
Start the MongoDB container¶
docker run --name mongodb --network host -d mongodb/mongodb-community-server:latest
Running¶
# robot/
./run_docker # or ./run_docker_production starts the container
./colcon # builds the ROS2 packages
./run_all # starts all ROS2 nodes
First time building will lead to this error.
--- stderr: astra_camera
In file included from /usr/include/c++/11/string:40,
from /usr/include/c++/11/stdexcept:39,
from /usr/include/c++/11/system_error:41,
from /usr/include/c++/11/bits/fs_fwd.h:35,
from /usr/include/c++/11/filesystem:44,
from /robot/src/astra_camera/src/ob_camera_node_factory.cpp:13:
In static member function ‘static constexpr std::size_t std::char_traits<char>::length(const char_type*)’,
inlined from ‘std::basic_ostream<char, _Traits>& std::operator<<(std::basic_ostream<char, _Traits>&, const char*) [with _Traits = std::char_traits<char>]’ at /usr/include/c++/11/ostream:617:44,
inlined from ‘void astra_camera::OBCameraNodeFactory::onDeviceConnected(const openni::DeviceInfo*)’ at /robot/src/astra_camera/src/ob_camera_node_factory.cpp:118:5:
/usr/include/c++/11/bits/char_traits.h:399:32: warning: ‘long unsigned int __builtin_strlen(const char*)’ reading 1 or more bytes from a region of size 0 [-Wstringop-overread]
399 | return __builtin_strlen(__s);
| ~~~~~~~~~~~~~~~~^~~~~
---
Running ./colcon
again will fix it.
Development¶
Start the container¶
# robot/
./run_docker
To exit the container use CTRL + D
.
When the container is running the robot/src
folder will be shared between
the container and your local one. Changes made inside here will be apply to
both. After changes has been made, make sure to run ./colcon
or
colcon build
inside the robot/src
folder. Now you can run using ./run_all
(if the package is included inside that file) or by running:
# robot/src
source install/local_setup.bash
ros2 run package_name executable_variable
Testing¶
# robot/src
./run_tests
Every unittest should output OK.
Create a new ROS2 package¶
# robot/src
ros2 pkg create --build-type ament_python package_name
Documentation¶
HTML¶
# install sphinx
sudo apt-get install python3-sphinx -y
pip3 install furo --break-system-packages
cd docs/
make clean
make html
PDF¶
sudo apt install latexmk texlive-latex-extra
cd docs/
make latexpdf