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/srcfolder, you need to rebuild (./colcon).If a new Python package is added to
requirements.txtyou would need to run./build_imageagain.
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