A ROS workspace contains essential packages for running Nitrabot with various hardwares.
This workspace is partially written by TUT-Systems Engneering Labroratory members and being used only for research purpores.
- beaverbot
A Global Navigation Satellite System (GNSS) is a satellite configuration, or constellation, that provides coded satellite signals which are processed by a GNSS receiver to calculate position.
GNSS system is typically only able to provide a positioning accuracy on the order of several of meters. To get better accuracy, Ichimill service provided by SoftBank have been chosen for this project. Simly put, base receivers, which have fixed-location, computes correction information and distribute it via Internet, then it is used by our receiver to correct position obtained from GNSS signal. This system is expected to have a accuracy on the order of several of centimeters.
Since the below GNSS receiver which outputs corrected data is used in this package, nmea_serial_driver node is good enough for converting receiver's output (NMEA sentences) into ROS messages (sensor_msgs/NavSatFix
).
In case of using different RTK-GNSS receiver, a package contains nodes for receiving correction information from Ichimill service and sending it to receivers is required. Unofficial package f9p_ichimill satisfies this requirement.
An Intertial Measurement Unit (IMU) measures and reports body's specific force (also call proper acceleration), angular rate, magnetic fields using a combination of accelerometers, gycroscopes, and magnetomerters.
RT_USB_9axisIMU sensor is used in this project. IMU data is obtained via USB port, and expressed in ROS by using rt_usb_9axisimu_driver
The bias errors of IMU components should be calibrated manually for better accuracy. Refer to this manual for more information.
(in progress)
Tractor part of Nitrabot is an autonomous mobile robot (AMR) whose movement is based on two separately driven wheels placed on either side of the robot body. Velocity commands could be sent to robot via the interface device using serial communication.
robot_communication node in beaverbot_communication package is responsible for commucating with the robot. The velocity command published on /cmd_vel
topic will be sent to the robot via interface devices. Concurrently, the rotary encoder data and battery's condition also be published respectively into /encoder
and /battery
topics.
(in progress)
(in progress)
(in progress)
-
Enable GUI within Docker containers
! Caution: This method exposes PC to external source. Therefore, a more secure alternative way is expected for using GUI within Docker containers. This problem was raised in Using GUI's with Docker
#This command is required to run every time the PC is restarted
xhost +
Make a X authentication file with proper permissions for the container to use.
# If not working, try to run "sudo rm -rf /tmp/.docker.xauth" first
cd ./src/beaverbot_dockerfiles/
chmod +x ./install/xauth.sh && ./install/xauth.sh
- Install Docker (optional)
chmod +x ./src/docker_installer.sh && ./src/install_docker.sh
- Launch the environment
Start up
cd ./src/beaverbot_dockerfiles
docker compose up -d
Open a container in interactive mode
cd ./src/beaverbot_dockerfiles
docker compose exec [name-of-container] bash
To stop containers, run
docker compose down
To commit a container to a new image, run
#Do not do this if you're not familiar with Docker commit action. This changes your docker images.
docker commit [container-id] [image-name:tag]
More other useful Docker's CLI can be found in Docker CLI cheetsheet
Start the environment
docker compose up -d
In terminal 1, run the below to enable sending command to robot and get the wheel encoder data
docker compose exec robot_communication bash
roslaunch beaverbot_communication beaverbot_communication.launch
In terminal 2, run the below to start collect GPS and IMU sensor data
docker compose exec nitra_robot bash
roslaunch beaverbot_launch bringup.launch
In terminal 1
docker compose up -d
docker compose exec robot_communication bash
roslaunch beaverbot_communication beaverbot_communication.launch
In terminal 2
docker compose exec nitra_robot bash
rosrun beaverbot_control feedforward
In terminal 1
docker compose up -d
docker compose exec robot_communication bash
roslaunch beaverbot_communication beaverbot_communication.launch
In terminal 2
docker compose exec nitra_robot bash
roslaunch beaverbot_launch nav_pure_pursuit.launch
docker exec -it beaverbot bash -c "source /opt/ros/noetic/setup.bash && source /root/catkin_ws/devel/setup.bash && sleep 2 && roslaunch beaverbot_control beaverbot_control.launch"