This method is used to draw the map with the obstacles, waypoint and robot.
protected void onDraw(Canvas canvas) {
//pseudo-code is shown here
determine how long (i.e. height) the entire map will be;
determine how wide (i.e. width) the entire map will be;
adjusting the map cell when in different orientation (i.e. portrait/horizontal);
draw background (unexplored map);
draw explored map & obstacles;
draw waypoint;
draw robot;
}
The onTouch() function will tell users the cell that they have selected on the map and show a toast of the point selected at the bottom of the screen.
public boolean onTouch(View view, MotionEvent me) {
//calculation to get the tapped position from view geometry location
...
X = me.getX();
Y = me.getY();
selectedX = X- paddingX;
selectedY = Y- paddingY;
posX = (int)(selectedX/cellWidth);
posY = 19-(int)(selectedY/cellHeight);
//to remember the last position X and Y
lastX = posX;
lastY = posY;
toastText = "tapped " + posX + ", " + posY;
showToast(toastText);
...
}
The onFling() function will allow users to swipe on the map to move the robot on the map.
public boolean onFling (MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
boolean result = false;
try {
//determine if user is swiping left or right
...
if (Math.abs(diffX) > Math.abs(diffY)) {
if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
if (diffX > 0)
onSwipeRight();
else
onSwipeLeft();
result = true;
}
//determine if the user is swiping up or down
else if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {
if (diffY > 0) {
onSwipeBottom();
}else
onSwipeTop();
result = true;
}
} ...
}
How do you animate the movement of robot
When the message is received by Android, it will decode the message received and animate the movement.
public void incomingMessage(String readMsg) {
//pseudo-code is shown here
//fastest path message
if(message_header == FP)){
check if there are multiple movements;
if there are multiple movements, run in a for loop.
for (each movement in the message){
if (robot moves forward)
move forward by 10cm;
if (robot rotate to the right)
rotate the robot to the right by 90 deg;
if (robot rotate to the left)
rotate the robot to the left by 90 deg;
}
Messages exchanged between Raspberry Pi and Android
The messages exchanged are described here under the section Interface Message.
The setConfiguredString() function will store the non-volatile string.
private void setConfiguredString(final int index){
...
//get user input to set the non-volatile string using dialog GUI
new AlertDialog.Builder(this)
.setTitle("Configure String "+index)
.setView(txtField)
//Store string from textfield into shared preference
.setPositiveButton("Save", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
String input = txtField.getText().toString();
SharedPreferences.Editor editor = getSharedPreferences(String.valueOf(R.string.app_name), MODE_PRIVATE).edit();
editor.putString("string"+index, input);
editor.apply();
}
...
}