**4. Relaxed Geometric Reasoning for Mobile Manipulators**

Relaxed geometric reasoning is the evaluation of geometric conditions of actions with no call to motion planning. It indicates that a feasible motion is likely to be obtained for the selected actions if certain task constraints are satisfied. Therefore, the relaxed geometric reasoning process contains three modules: *reachability reasoning*, *spatial reasoning*, and *manipulation reasoning*. This set of reasoning extends our previous relaxed geometric reasoning process [19] to consider reasoning on mobile manipulation along human actions.

*Reachability reasoning (*R*rch*): This reasoning is applied for only *transit* action. To transit the robot to a target position, a feasible arm configuration and robot base pose must be first obtained. A set of robot poses is considered in the workspace of the robot. From each pose, an *Inverse Kinematic (IK)* solver is called for each candidate grasping pose, and moreover the result of *IK* is determined whether it is collision-free or not. The first collision-free *IK* solution along the corresponding grasping pose is reported if possible. Otherwise, failure is reported if there is neither *IK* solution nor collision-free configuration among a set of robot poses. Accordingly, the reasoner returns the collisionable objects.

*Spatial reasoning (*R*sp*): This reasoning is applied for the *transfer, push, open, humanOpen*, and *humanTransfer* actions. This is considered to find a valid placement for an object within a given region with no consideration of the robot. A pose is sampled, i.e., an object lies in the target region and the initial stable posture is maintained. The feasibility of the sampled pose is also determined through a collision-checking procedure to verify whether there are any collisions with other objects in the robot environment or not. If it is valid, the sampled pose is stored in the geometry details of the action which transfers the object. Otherwise, another sample will be attempted. In the case that all tried samples are not valid, failure occurs and the collisionable objects are reported. Moreover, some constraints are taken into consideration while the sample placement is accomplished. For example, in the case of the *push* action, the sample is considered in the direction in which the object is being pushed. In the case of *humanOpen* and *Open*, the valid object placement is extracted from the object feature (the box cap is assumed to have a single full-open position).

*Manipulation reasoning (*R*mnp*): This reasoning is considered to evaluate the compatibility of the grasp poses to move an object from the initial position to the final one (using R*sp*). The process applies R*rch* reasoning to return on of the feasible ways to transfer an object from initial to final position in terms of collision-free *IK* solution. In the case that there is no possible solution meeting these conditions because of collisions, then the collisionable objects are returned. In this way, it can obtain the valid robot pose and grasping configuration when the robot manipulates an object.

Algorithm 1 describes the relaxed geometric function when applying the actions. Algorithm is detailed below:


**Algorithm 1:** *RelaxGeomReas*(*a*)

```
1 CO ← ∅
2 a.geom+ ← ∅
3 i ← 0
4 Res = False
5 if a.name = Transit then
6 {Res, Qrob, Posrob, CO, g} ← Rrch(a)
7 if Res = f easible then
8 a.geom+.add(Qrob, Posrob, g)
9 else if a.name = Transfer or Push or Open then
10 while i < Max do
11 {Ressp, Om
                 j (posgoal), CO} ← Rsp(a)
12 if Ressp = f easible then
13 {Res, Qrob, Posrob, CO, g} ← Rmnp(a, Om
                                              i (posgoal))
14 if Res = f easible then
15 a.geom+.add(Qrob, Posrob, Om
                                        j (posgoal), g)
16 else if a.name = HumanTransfer then
17 {Res, Om
            j (posgoal)} ← Rsp(a)
18 if Res = f easible then
19 a.geom+.add(Om
                      j (posgoal))
20 else if a.name = HumanOpen then
21 {Res, Om
            j (posopen)} ← Rsp(a)
22 if Res = f easible then
23 a.geom+.add(Om
                      j (posopen))
24 else
25 //a is not required to be checked;
26 return Null
27 return {Res, CO}
```