Software Architecture¶
High Level Overview¶
The following flowchart shows a high-level view of the communication in-between our packages when running the system on the robot. Naming convention in our repository may vary, as we show here the underlying algorithms of our packages, instead of the packages named by our internal company convention. In case of running the HelMoRo repository as a simulation, the four lefternmost hardware nodes are replaced by a single gazebo_ros bridge, which handles communication between ROS and the gazebo simulation engine. The internal packages are briefly explained in sections helmoro_common, helmoro_real and helmoro_sim. External Packages are explained in section External Packages.
helmoro_common¶
In the following, each package of the Helmoro ROS architecture is explained shortly.
bringup¶
- manages the launch process of the HelMoRo
- manages the launch process of RVIZ
control¶
- stores parameters for diff drive controller and joint state broadcaster.
description¶
- stores URDF and meshes
- publishes static transforms
state_estimation¶
- uses robot_localization in the background
- combines wheel odometry and IMU information with an EKF
- publishes transform between HelMoRo and odom frame
slam¶
- uses slam_toolbox in the background
- combines lidar scans and odometry pose to create a map of the environment and localizes HelMoRo within
- publishes transform between map and odom frame
helmoro_real¶
bringup¶
- manages the launch process of packages interfacing with IMU, camera, LIDAR and motors
motors¶
- ROS2 wrapper for the motor controllers
- converts motor states into wheel odometry
- converts robot velocity commands into motor commands
Wiring Options¶
Checklist | ||
---|---|---|
Wiring | - Wire both RoboClaws to the Jetson Nano SBC via Micro-USB to Micro-USB cable. | |
Setting | - Connect one RoboClaw to PC via USB and open it with the downloaded BasicmicroMotionStudio - Don’t set any of the two RoboClaws to USB-TTL Relay Mode - Set an address for each RoboClaw in the General Settings. Note for this wiring, the addresses can be equal since ports are different (/dev/ttyACM0 and /dev/ttyACM1 in Linux) - Set Baudrate you would like to use in the General Settings. - Configure the PID values of the RoboClaws if not yet done. - Don’t forget to Device → Write Settings in the top left corner before disconnecting your RoboClaw. |
helmoro_sim¶
bringup¶
- manages the launch process of the gazebo simulation and spawns the robot
gazebo_tools¶
- contains world files
- starts the ros-gazebo bridge
helmoro_operations¶
joymanager¶
- interprets joystick commands from Logitech Wireless joystick F710 controller
- scales joystick commands to desired linear and angular velocities
- publishes of velocity commands
navigation¶
- uses navigation2 in the background
- launches nodes for local and global costmap generation
- launches nodes for recovery behaviour, planning and trajectory following
External Packages¶
Camera¶
The OrbbecSDK ROS2 Wrapper provides integration of Orbbec cameras with ROS 2 environment. It supports ROS2 Foxy, Humble, and Jazzy distributions. Helmoro's camera, the Astra Pro Plus, is EoL. We created our own fork to fix a bug caused by non-existing intrinsic parameters.
IMU¶
The bno055 package is a community created packages for interfacing with the IMU Bosch BNO055 IMU.
LIDAR¶
The rplidar_ros packages is provided by the LIDAR manufacturer Slamtec. It supports ROS1 and ROS2.