Indoor operations (RTK-GNSS denied areas)
Corresponding components: Autopilot Inference, Cerebra Studio – Mission Planner.
Avular has developed a software stack, called Autopilot Inference, which provides autonomous capabilities to the Origin One (mainly for navigation and tasking). These capabilities allow a user to command tasks, such as GoTo Waypoint, Follow Path, Cover Area, Dock, Undock and Wait, using our mission planner that is part of Cerebra Studio. How to plan such autonomous indoor operations will be discussed here.
Info
This section is applicable only if your Origin One includes autonomous capabilities via Avular's Autopilot Inference and is equipped with a 3D LiDAR sensor.
Info
Confirm that Cerebra Studio is installed on your computer. See the installation guide for instructions.
Warning
Ensure that the robot is unplugged from its charger before operation.
Job preparation
After the robot has fully completed its startup procedure:
- Power on the remote controller.
- Position the robot in front of the Aruco marker.
- Ensure your computer is connected to the robot:
- Either via the robot’s Wi-Fi access point, or
- Through the same external Wi-Fi network as the robot.
Before creating a mission — referred to as a "job" — you must complete the preparatory steps described below.
Preparation |
|
---|---|
Ensure that the robot loads the correct localization map. If a map has already been linked to the Aruco marker (see Create a Map), it will be automatically loaded when the robot is placed in front of the marker (at a distance between 0.5 and 1 meter). If no map is linked, or if you want to load a different localization map, you can manually load a map using the following ROS 2 service call: ros2 service call /autopilot/information_manager/load_localization_map knowledge_base_msgs/srv/PublishLocalizationMap "name: map_name" .For instructions on setting up a ROS2 connection and issuing service calls, refer to this guide. |
![]() |
Open Cerebra Studio and use the drop-down menu in the top yellow bar to connect to your robot. Once connected, open the Mission Planner application in Cerebra Studio. | ![]() |
Cerebra Studio will prompt you to open a "location". In this context, a location represents the indoor environment associated with a localization map. Connect to the robot and, unless you have already created the corresponding location, select Add Location, and toggle the Local Map option in the pop-up menu. This opens a list of localization maps. Select the map labeled as active, which indicates the map currently used by the robot. After a short delay, the location will be added to Cerebra Studio's list of locations, and you can then select it to proceed. | ![]() |
Next, Cerebra Studio will prompt you to select a "job" for the robot. You can choose an existing job if one is available, or create a new one by clicking the Create New Job button. Enter a name for the job, after which it will be added to Cerebra Studio's list of jobs. Once selected, the application will display the localization map of your operational environment along with the current position of the robot. | ![]() |
During job execution you can monitor additional information using the dashboard in Cerebra Studio's Mission Planner. In the top-right corner, two circular indicators display the robot status. The first shows the execution state (e.g., "waiting for new behaviors", "moving", or "The robot is inside the map, continue with map supported navigation"). The second indicates pose accuracy and should read "high robot pose accuracy" to ensure reliable autonomous operation. |
![]() |
This completes the preparation and you may now continue to define your first job.
Job definition
During the preparation phase, you will have either selected an existing job or created a new one. This section assumes you want to define a new job. A job consists of an ordered list of tasks. In the image below you will see a relevant snippet of the Cerebra Studio interface showing the part related to the job that is being defined as a list of tasks. On the top of this snippet you may see the Origin One that to which Cerebra Studio is connected, which in this case is named PB4U9PHV. The row below is a set of buttons and status signals, such as a button to "open library", or somewhat further to the right of that is a button "start job" for starting the current job that has been defined. An explanation for all of these buttons can be found on the page of job scheduling and more details below the link in this manual on Cerebra Studio.
Here, let us continue with the job and its tasks. In the same snippet, below the row of buttons and signals and located in the center, you will find the name of the job that is being edited in the mission planner of Cerebra Studio - which in this case is named "job_for_manual". Also below the buttons and signal, but then to the right, you will find two (black) buttons called Clear task list and Add task. The Add task button allows you to insert a new task into the job. Once a task is added, as explained in the next section, it will appear in the ordered list located beneath the same button. When the job is executed, the robot will perform each task in sequence from top to bottom. As the name suggests, the button Clear task list removes all tasks in the task list.
Task: GoTo Waypoint
GoTo Waypoint is a task where the robot plans its own path across the localization map to a specified waypoint and then follows that path while avoiding obstacles.
Note
If no map is available, or if the robot's starting point or the destination waypoint lies outside the map, or if no feasible path can be found on the map, the robot will be unable to plan a route and will abort the task.
Warning
The robot will always try to plan the shortest path from start to destination by using the map. It will avoid areas that are known to be "occupied" (black pixels). However, any other area, such as "free" (light grey pixels) or "unknown" (dark grey pixels), shall be accepted by the path planner as points at which a path is allowed to be planned. Please be aware that the shortest path may thus cross unexplored areas (dark grey pixels), that in the real environment are walls, in which case the GoTo Waypoint task will fail and abort. A solution would be to create an intermediate GoTo Waypoint task ensuring that the robot is guided along a preferred, known route.
To define a GoTo Waypoint task, click the Add Task button located beneath the job name field. This opens a pop-up menu (illustrated in the left panel of the table below). In this menu:
- Go to the Type field and select GoTo Waypoint from the drop-down list.
- The menu will update with the fields relevant to the selected task.
- In the Waypoint field, either select a previously saved waypoint or click New to create a new one. For now, enter only the waypoint's name; you will define its position on the map afterward.
- You can optionally configure task-specific parameters such as:
- maximum speed (in m/s, up to 1.5)
- distance to path (in m), which defines how far the robot may deviate from the planned path to avoid obstacles.
- If left blank, default values will apply.
After filling in the required fields, click Add in the lower-left of the pop-up menu. The task will appear in the job’s task list in the top-right corner of the interface.
Next, you must specify the waypoint’s position. Click anywhere on the map to place the waypoint. You can reposition it by dragging with your mouse. You can also set the robot’s desired orientation at the waypoint using the attached orange handle.
Definition of policy parameters |
Selecting the waypoint on the map |
---|---|
![]() |
![]() |
To execute the task, click the play button next to the job’s name. The robot will perform the GoTo Waypoint task, and the location of the robot in Cerebra Studio will update real time, as shown in the example video below. More on Job execution and what you may expect from that is presented later on this page.
Typical scenarios for using this task is when you are working with a localization map and you are less concerned with the exact path the robot takes to reach the destination. However, this task may be less effective when the destination is very close to the starting point (e.g., within 2–3 meters), as the robot may generate an unnecessarily complex path and appear to “dance” towards the goal. In such cases, it is often better to use a predefined path with the Follow Path task instead.
Task: Follow Path
Follow Path is a task where the robot follows a specific path defined on—or partially outside—the localization map and navigates along that path while avoiding obstacles. The robot attempts to track the path as precisely as possible (given limitations like localization accuracy, obstacle avoidance, maximum turn rate), typically achieving a tracking accuracy of up to 25 cm in obstacle-free conditions.
If the path extends beyond the localization map, the robot will rely on odometry and Aruco markers to estimate its position. Note that odometry remains accurate only for approximately 10–20 meters.
Note
The robot must be within 2–3 meters of the path's starting point, otherwise, the task will be aborted.
If the robot is already on or near the path, it will begin following it from the nearest valid point within this 2–3 meter range.
The path may contain loops, but the path section that is in between any crossing points must be at least 4 meters long.
If the path is a loop, the robot must start closer to the path’s starting point than its endpoint; otherwise, it may prematurely consider the task complete.
To define a Follow Path task, click the Add Task button located below the job name. This opens a pop-up menu (illustrated in the table below). In this menu:
- Go to the Type field and select Follow Path from the drop-down list.
- The menu will update with the fields relevant to the selected task.
- In the Path field, choose a previously saved path or click New to create one. At this stage, only a name is required; the path itself will be drawn on the map later.
- Optionally set additional parameters, for example:
- Reverse: When enabled, the robot will start from the path’s endpoint and navigate in reverse.
- Maximum speed: Defined in meters per second, with a limit of 1.5 m/s.
- Distance to path: The maximum deviation allowed (in meters) from the planned path, for example to navigate around obstacles. By default, the robot stays within 1 meter unless smaller values are specified.
- If left blank, default values will apply.
After completing the input fields, click Add in the bottom left of the menu. The task will appear in the task list.
Next, define the path on the map. Click to place each point. Points can be repositioned by dragging them. The path will appear as you add more points. The starting point is marked in green and the destination in red.
Definition of policy parameters |
Selecting the path on the map |
---|---|
![]() |
![]() |
To execute the task, click the play button next to the job name. The robot will begin following the path, and location of the robot in the Cerebra Studio interface will update in real time, as shown in the example video below. If the Reverse option is selected, the robot must start near the path’s endpoint. More on Job execution and what you may expect from that is presented later on this page.
Typical scenarios for using this task is when you want the robot to follow a predefined path, or when navigating to a location outside the localization map—either as a permanent destination or as a temporary waypoint before driving back into the mapped area. However, this task may be less suitable in environments with many medium- or large-sized obstacles. Since the robot is constrained to the defined path and cannot dynamically reroute around unexpected obstacles, it may abort the task if the path becomes obstructed.
Task: Cover area
Cover area is a task in which the robot plans a coverage path across a defined area to ensure complete coverage, stopping in front of ad-hoc obstacles. If these obstacles are not cleared within 10–15 seconds, the robot will abort the task and continue to the next one. It may still navigate around smaller obstacles.
Note
The robot must be positioned inside the perimeter before starting the task. Otherwise, it cannot plan a coverage path. Use a GoTo Waypoint or Follow Path task to bring the robot into the perimeter beforehand.
The robot needs at least 1 meter of free space around the outside of the perimeter, as it will perform turns along the boundary and may plan paths outside the defined area. In confined environments, this task may not succeed.
The robot begins execution from the furthest reachable point within 2–3 meters. For small perimeters (e.g., 1x1 meter), the robot may start at a point near the end of the planned path, which can appear as if it skipped part of the area.
The robot has some obstacle avoidance, although when encountering an ad-hoc obstacle it will fairly quick decide to abort the task.
To define a Cover area task, click the Add Task button beneath the job name. In the pop-up menu that appears:
- Go to the Type field and select Cover area from the drop-down list.
- The menu will update with the fields relevant to the selected task.
- In the Perimeter field, choose an existing polygon or click New to create one. For now, only a name is required; the perimeter will be drawn later.
-
Configure the additional input fields as needed:
- controller: Choose FollowPathLoosely FollowPathRoughly or FollowPathStrictly. The default controller is FollowPathRoughly, though the FollowPathStrictly option can also be used indoors.
- distance to path: Allowed deviation in meters from the planned path.
- maximum speed: Speed in m/s (max: 1.5). With "FollowPathStrictly", the robot drives more slowly by design.
- number of outside contours: Number of additional perimeter traces directly along the outside of the perimeter (default: two).
- direction of lines: Direction of the internal coverage pattern in degrees, relative to the map’s horizontal axis.
- linear infill: Toggle between a lawnmower pattern (linear) or spiral pattern (contour-based).
- use localization map: Enable to allow path planning that accounts for mapped obstacles — the localization map is required for indoor use. Please note that even though the path may be planned to avoid known obstacles, the default controller FollowPathRoughly may diverge from the path so that the obstacle is still encountered.
- If left blank, default values will apply.
Once all inputs are set, click Add. The task will appear in the job’s task list.
Next, define the perimeter by clicking on the map to place each vertex. Adjust points by dragging them. As you click, the perimeter shape will take form.
Warning
For indoor use, set the controller to FollowPathStrictly so the robot does not get stuck when making U-turns and ensure the localization map is enabled to prevent the robot from planning paths through known obstacles.
Definition of policy parameters |
Selecting the area on the map |
---|---|
![]() |
![]() |
To execute the task, click the play button beside the job name. The robot will begin to cover the area, for example using a lawnmover pattern, and location of the robot in the Cerebra Studio interface will update in real time, as shown in the example video below. More on Job execution and what you may expect from that is presented later on this page.
Typical scenarios for using this task is when you want the robot to autonomously sweep and cover a large area. However, this task may not be suitable in environments with many ad-hoc obstacles, as the robot may be forced to stop and abort the task if these obstacles are not removed within 10-15 seconds.
Task: Dock
Dock is a task where the robot detects the Aruco marker in the front camera and then moves and finally parks itself on a position straight in front of the marker, which may even be a position at which the robot is just hitting the marker. If no marker can be detected in the image, then the task is aborted.
The position of the Aruco marker does not need to be known to the robot, as the robot should be only able to detect the Aruco marker and its ID. Therefore, ideally, use Aruco marker with ID higher than 500 for docking tasks and use markers with an ID lower than 500 for localization and recording a map. You may print any 20×20 cm Aruco marker generated via this resource. If you would like to dock at an Aruco marker that is known to the robot, for example Aruco marker 0, 1 and 2, then please ensure that the marker is properly positioned with respect to the coordinate system information as described in the section on multiple markers. If you dock at the Aruco marker from which the robot was booted up (and automatically loaded the right localization map), then this assumption on the coordinate system is automatically satisfied.
Note
The robot must be within 1.5 and 3 meters of the marker for it to be detected in the camera image. Since the opening angle of the camera is 70 degrees, this means that the robot may have an initial sway distance to the marker of about 1 meter (left or right) while facing the marker.
The area should be free of obstacles, as the robot will not apply obstacle avoidance
The robot will remember the latest known position of the marker. So if it looses the marker while driving, it will still try to park at the proper position.
To define a Dock task, click the Add Task button located below the job name. This opens a pop-up menu (illustrated in the table below). In this menu:
- Go to the Type field and select Dock from the drop-down list.
- The menu will update with the fields relevant to the selected task.
- In the Dock ID field insert the number of the ID of the marker at which you want the robot to dock.
- In the Docking Distance field insert the distance in meters that is in front of the marker at which you want the robot to park.
Warning
The distance of the robot to the marker is measured from the center of the body, which is about 45cm from the tip of the nose. For that reason the Docking Distance cannot be set to values lower then 45 cm as at that distance the robot will just hit the marker. Also, values cannot exceed 1.0 meter as that is the distance at which the robot will initially move before finalizing the parking procedure.
After completing the input fields, click Add in the bottom left of the menu. The task will appear in the task list. To execute the task, click the play button next to the job name. The robot will begin to move (with some curve) to a position that is at roughly 1.5 meter distance from the marker after which it will make a final turn so that it is straight in front of the marker and continue a final forward drive until it reaches the parking position. See the video as an example.
Definition of policy parameters |
Docking behavior |
---|---|
![]() |
Typical scenarios for using this task is when you want the robot to precisely park itself with respect to an object that does not have a known precisely known position. Please note that the task does require that the marker is already in sight of the robot, which means that you should conduct a GoTo Waypoint or Follow Path task first to roughly get the robot to a proper position.
Task: Undock
Undock is a task where the robot drives straight backwards for 1 meter without any notion of nearby obstacles.
To define an Undock task, click the Add Task button located below the job name. This opens a pop-up menu (illustrated in the table below). In this menu:
- Go to the Type field and select Undock from the drop-down list.
Warning
Make sure that the robot is able to drive 1 meter backwards, as it will not stop for anything and just aims to finish this 1 meter.
Warning
When applying the E-stop while the robot is driving out of its dock position the robot shall also immediately stop driving. However, when releasing the E-stop within 10 seconds the robot shall finish the Undock task and thus further drive out of its docking position. In case you really want the robot to stop we suggest to take over the manual control of the robot.
After completing the input fields, click Add in the bottom left of the menu. The task will appear in the task list. To execute the task, click the play button next to the job name. The robot will begin drive straight and backwards for 1 meter. Just like in the video below.
Definition of task parameters |
Undocking behavior |
---|---|
![]() |
Typical scenarios for using this task is when the robot is too close to a wall or obstacle, i.e., less then 0.5 meter, so that the robot is in a situation where a typical GoTo Waypoint or Follow Path will be aborted. For example when docking the robot in front of a marker that is attached to a wall.
Task: Wait
Wait is a task in which the robot will remain idle at its current position for a specified amount of time in seconds.
To define a Wait task, click the Add Task button located below the job name. In the pop-up menu that appears:
- Set the Type to Cover area from the drop-down.
- In the time fields insert the number os seconds that the robot should wait.
Once all inputs are set, click Add. The task will appear in the job’s task list.
Typical scenarios for using this task is during demonstrations, allowing the robot to pause between tasks to highlight that it has reached a certain position. It is also valuable when developing custom applications on top of the robot, such as pausing to trigger external actions (e.g., taking a snapshot). Note that if no new task is defined after job completion, the robot will also remain idle at its final location by default.
Job execution
Warning
It is advisable to keep the remote emergency stop (e-stop) in your hand during job execution, so you can immediately stop the robot if necessary.
Jobs are stored in Cerebra Studio, but you still need to send it to the robot for execution. As mentioned in the section on Job Preparation, a play job button is present as a blue button just below the information to which robot that Cerebra Studio is connected. Clicking this icon will transmit the job to the robot and start its execution.
Here, we continue with what you may expect as a user about the robot's moving behavior concerning sharp corners, localization, and obstacle avoidance. In addition, the status indicators in Cerebra Studio provide more insights about the status of a Task, Behavior and the position accuracy of the robot. Specific information about these indicators is found on the page of Job Scheduling.
Sharp corners
The default controller used by the robot is FollowPathLoosely, which is optimized to navigate around small- and medium-sized obstacles. It achieves this by planning several alternative paths approximately 2–3 meters ahead and selecting the most promising one.
While this controller performs well on smooth paths, it may struggle with sharp corners or U-turns. In such cases, the robot may exhibit hesitant or erratic motion as it struggles to choose an appropriate path. For U-turns—particularly when two consecutive 90-degree turns are placed within 1 meter of each other—the robot may fail to make progress altogether.
Nervous at sharp corner |
Almost failing at U-turn |
---|---|
Localization
While executing a job, the robot continuously tracks its position, which is also visualized on the localization map in Cerebra Studio. This position estimate is based on several information sources:
- Odometry: Estimates position relative to the start-up location using data from the IMU and wheel encoders.
- Marker information: Calculates global position by detecting Aruco markers and transforming the robot’s relative position to a global frame, using known marker positions.
- Map information: Matches current LiDAR scans against a pre-recorded localization map (see Creating a map). When the robot is within the map boundary, it refines its global position based on this match. The map’s origin is globally known because it is linked to the position of the Aruco marker used during map creation.
Info
By default, the robot is configured with prior knowledge that Aruco Marker ID = 0 defines the origin of the global coordinate frame. Therefore, the physical position of this marker determines the mathematical origin of the environment. If you wish to add or adjust marker positions, refer to the Autopilot Inference documentation.
Inaccurate position
In some cases, the robot may pause or stop during a job due to an unreliable position estimate. This typically occurs when it cannot match the current LiDAR scan to the localization map—such as when operating outside the map boundary or in a very large, sparse area.
To recover:
- Manually drive the robot back in front of the initial Aruco marker to re-establish an accurate position.
- Alternatively, add an additional Aruco marker to the robot’s knowledge base by specifying its ID and global position, and update the job so the robot pauses and faces the marker. This allows the robot to re-localize using a known visual reference.
Incorrect Position
If the robot moves in the wrong direction, while there is no obstacle to avoid, this is often caused by an incorrectly estimated position. Although LiDAR matching can sometimes lead to errors, the more likely cause is the detection of an Aruco marker that exists in the robot’s knowledge base but is incorrectly placed in the real environment.
To prevent this:
- Use only the initial Aruco marker that was linked to the localization map.
- Ensure no other visible markers are present in the operating area unless their exact global positions have been deliberately configured and added to the robot’s knowledge base.
Narrow corridors
While executing a GoTo Waypoint or a Follow Path the robot is able to move through corridors and door openings. There are however limitations to this capability of the robot.
- Most importantly, a door opening or corridor should be wider than 90 cm while for a smooth drive even 95 or more cm is preferred.
- Also, make sure that the opening or corridor is free of obstacles.
- Finally, in case there is vegetation alongside the walls, then overhanging leaves and branches may be detected as obstacles, thereby hindering the robot to smoothly move through the door or corridor.
Obstacle avoidance
While executing the job the robot will avoid obstacles that are not present on its localization map but are ad-hoc encountered. If and how the robot shall avoid obstacles depends on the task and policy that was set by the user. Hereto, we distinguish between tasks that have a path constraint, such as Follow Path and Cover Area, and tasks that do not have a path constraint, such as Go To Waypoint.
Warning
Since the robot uses the LiDAR for detecting obstacles, and a LiDAR is incapable of detecting shiny surfaces and glass, you should not expect that the Origin One will avoid glass walls and shiny or glass obstacles. So make sure that these cannot be accidentally damaged by your Origin One. If you want your robot to avoid glass walls, try masking the glass with window foil (matt or frosted) for the first 30 cm.
Warning
The LiDAR of the robot is only able to detect objects from 30 cm onwards. Any object closer it will not detect and thus continues driving forward thereby possibly hitting the object. As such, the most difficult types of objects are small poles straight in the center front of the robot, i.e., where the radius of 30 cm around the LiDAR has most effect as to how far it is in front of the robot. An example is depicted below. In such a case the robot shall detect the object but it will only respond to avoiding the object when it might be too late, i.e., when the object is already in the un-observable zone of the LiDAR. It may thus cause the robot to hit the object. This only applies to a small pole dead-center to the robot. A wall is wider than the pole and will this be detected (and avoided) properly. And also a small pole that is more to the side shall be avoided as that object is observable up until closer distance to the front of the robot.
Navigating with path constraint (used for the Follow Path task)
When the robot is constrained to follow a path, it assumes that a limited deviation from the path is acceptable. Users can define this allowable distance, but even if not explicitly set, the robot will typically stay within approximately 0.5 to 1 meter of the planned path.
As a result, the robot is generally able to avoid small and occasionally medium-sized obstacles. However, it may not be able to navigate around large obstacles, which can cause the task to fail.
avoiding small-sized obstacles |
avoiding medium-sized obstacles |
avoiding large-sized obstacles |
---|---|---|
Small-sized obstacles, i.e., up to 10-15 cm are typically avoided by the robot while continuing driving forwards. | Medium-sized obstacles, up to 50 cm, are typically avoided by the robot by first slowing down in front of the obstacle. The robot then assesses the situation by attempting small deviations to the left and right before choosing a side to pass the obstacle. Whether the obstacle can be successfully avoided depends on how far the robot is allowed to deviate from the path constraint. | Large-sized obstacles are typically not avoided by the robot. Upon encountering such an obstacle, the robot will slow down and attempt to assess the situation by testing left and right deviations from the path. However, after approximately 10 seconds —depending on the specific conditions and how persistent the robot's attempts are— it will give up and abort the current task, then proceed to the next one. |
![]() |
Navigating without path constraint (used for the GoTo Waypoint tasks)
When the robot is not constrained to a predefined path, it will automatically plan its route using a combination of the previously recorded localization map (or floor plan) and any obstacles encountered during the current task or the one executed immediately prior. Users may optionally define a distance parameter, which the robot will attempt to stay within as it follows its self-planned path.
Since no fixed path constraint is imposed, the robot is free to replan its route at any time, as long as it remains within the mapped area. In this mode, it can avoid small-, medium-, and large-sized obstacles, up to a maximum avoidance range of approximately 3 meters.
avoiding small-sized obstacles |
avoiding medium-sized obstacles |
avoiding large-sized obstacles |
---|---|---|
Small-sized obstacles, i.e., up to 10-15 cm are typically avoided by the robot while continueing driving forwards. | Medium-sized obstacles, up to 50 cm, are typically avoided by the robot by first slowing down in front of the obstacle. The robot then assesses the situation by attempting small deviations to the left and right before choosing a side to pass the obstacle. | Large-sized obstacles, up to 3 meters, are typically avoided by the robot by slowing down and attempting left and right deviations around the obstacle. After approximately 10 seconds—depending on the situation and the robot’s assessment—it will replan a new path. However, the newly planned path may still pass through the same obstacle if it is particularly large or poorly mapped, causing the avoidance process to repeat. In most cases, the robot eventually finds a passage around the obstacle. Occasionally, it may enter a deadlock situation. If this occurs, the robot will attempt to replan up to three times. If all attempts fail, it will abort the task and proceed to the next one. |
Info
If the obstacle is present on the localization map or floor plan used by the robot for planning, the robot will plan a path around it regardless of the obstacle’s size.