To save content items to your account,
please confirm that you agree to abide by our usage policies.
If this is the first time you use this feature, you will be asked to authorise Cambridge Core to connect with your account.
Find out more about saving content to .
To save content items to your Kindle, first ensure no-reply@cambridge.org
is added to your Approved Personal Document E-mail List under your Personal Document Settings
on the Manage Your Content and Devices page of your Amazon account. Then enter the ‘name’ part
of your Kindle email address below.
Find out more about saving to your Kindle.
Note you can select to save to either the @free.kindle.com or @kindle.com variations.
‘@free.kindle.com’ emails are free but can only be saved to your device when it is connected to wi-fi.
‘@kindle.com’ emails can be delivered even when you are not connected to wi-fi, but note that service fees apply.
In this paper, we study the base placement problem for a two-degree-freedom-robot. The feasible area for the robot base is described, and its manipulability measure is formulated. To find the optimal base location of the robot, we develop a genetic algorithm (GA) to search for the valid solution in the reachable area of the robot base. To speed up the evolutionary process, we keep the elitists from one generation to the next generation according to certain elitist rate. The genetic algorithm approach is beneficial because it can also be extended to trajectory planning for robots with more degrees-of-freedom. We demonstrate the algorithm with some examples.
This paper proposes a general method to develop n-DOF serial isotropic manipulators. The parameters of 6-DOF isotropy generators are used as the initial values in a numerical method to obtain redundant isotropic generators. Additional constraint equations are then added, with the parameters of the obtained generators as initial values, to obtain the isotropy generators with special parameters. Each generator can be developed into many isotropic designs with special or desired link parameters. Two different approaches for developing isotropic manipulators are also investigated.
This paper concerns the proposal and analysis of HANA, a novel spatial parallel manipulator with over constraint. The parallel manipulator consists of a base plate, a movable platform, and three connecting legs. The moving platform has three degrees of freedom (DoFs), which are two degrees of translational freedom and one degree of rotational freedom, with respect to the base plate. The new parallel manipulator is very interesting for the reason of a lack of singularity in its workspace, single-DoF joint architecture and high rotational capability of its moving platform. The inverse and forward kinematics problems are described in closed-forms. The velocity equation of the new parallel manipulator is given. Three kinds of singularities are presented. The workspace for the manipulator is analyzed systematically. Especially, the index to evaluate the rotational capability of the manipulator is defined and discussed in detail. The proposed manipulator has a wide application in the fields of industrial robots, simulators, micro-motion manipulators, and parallel kinematics machines.
In this paper a framework is proposed for the adaptive control of robotic manipulators which combines parametric adaptive control with Artificial Neural Network (ANN)-based compensation of dynamic uncertainties like friction. The proposed method utilizes a passivity-based parametric adaptive control approach and makes use of the ANN models as generic identifiers to compensate for unmodelled friction effects. Unlike many approaches for ANN based control in the literature, parameter update equations for the ANN modeland for the parametric adaptive model are driven by both the tracking error and the system identification error. A stability analysis is given based onthe passivity properties of the manipulator dynamics. The methodology issuccessfully tested for the control of a Direct Drive SCARA arm and performance is compared with standard adaptive control schemes.
This paper presents a Q-learning approach to state-based planning of behaviour-based walking robots. The learning process consists of a teaching stage and an autonomous learning stage. During the teaching stage, the robot is instructed to operate in some interesting areas of the solution space to accumulate some prior knowledge. Then, the learning is switched to the autonomous learning stage to let the robot explore the solution space based on its prior knowledge. Experiments are conducted in the RoboCup domain and results show a good performance of the proposed method.
In this paper, the kinematics and inverse dynamics of a novel kind of mechanism called a general 3-PRS parallel mechanism is investigated. In the kinematics study, the inverse kinematics solution is derived in closed form, and the forward kinematics problem is resolved by the Newton iterative method seeking for an on-line solution to this issue. The inverse dynamics analysis is approached with two methods: Lagrangian formulations and principle of virtual work. After deriving the dynamic model by a Lagrangian formulation approach, the simulation results of two introduced examples quantitatively and qualitatively verify the accuracy of the derived dynamic equations. By introducing a simplifying hypothesis, a simplified dynamic model is set up using principle of virtual work, also a computer simulation is performed on this reduced model. The simulation results demonstrate that the simplified dynamic model is reasonable under such kind of assumptions through comparison with the precise model derived from the Lagrangian formulation. The inverse dynamics analysis provides a sound basis to develop controllers for controlling over a general 3-PRS parallel robot.
This paper reports on the use of a particular actuator in the field of legged robots. The proposed actuator, the Pleated Pneumatic Artificial Muscle, has some interesting characteristics which makes it suitable for machines which move by means of legs. An important issue is the actuator's adaptable passive behaviour which allows the stiffness of a joint that is actuated by two antagonistically coupled muscles, to be varied online. The natural frequency of the system can thus be changed in order to reduce control efforts and energy consumption. The idea of changing this natural frequency in combination with trajectory control will be implemented on a two-dimensional leg model. It will be shown that an appropriate choice of compliance can strongly reduce the amount of needed control activity and energy consumption while tracking a given trajectory.
The importance of verifying safety-critical systems has been highlighted recently when the Embedded Systems Group (SEN2) and the Systems Validation Group (VASY) launched a collaboration agreement. Called SENVA, which represents System Engineering and Validation, this joint research team will add strength to this important area of endeavour.
Strings are common to most computer programs. Certain types of programs, such as word processors and Web applications, make heavy use of strings, which forces the programmer of such applications to pay special attention to the efficiency of string processing. In this chapter we examine how VB.NET works with strings, how to use the String class, and how to work with the StringBuilder class. The StringBuilder class is used when a program must make many changes to a String object because strings and String objects are immutable, whereas StringBuilder objects are mutable. We'll explain all this later in the chapter.
WORKING WITH THE STRING CLASS
A string is a series of characters that can include letters, numbers, and other symbols. String literals are created in VB.NET by enclosing a series of characters within a set of double quotation marks. Here are some examples of string literals:
“David Ruff”
“the quick brown fox jumped over the lazy dog”
“123-45-6789”
“mmcmillan@pulaskitech.edu”
A string can consist of any character that is part of the Unicode character set. A string can also consist of no characters. This special string, called the empty string, is shown by placing two double quotation marks next to each other (“”). Keep in mind that this is not the string that represents a space. That string looks like this: “ ”.
Strings in VB.NET have a schizophrenic nature: They are both native types and objects of a class.
This book discusses the development and implementation of data structures and algorithms using VB.NET. The data structures we use here are found in the.NET Framework class library System.Collections. In this chapter we develop the concept of a collection by first discussing the implementation of our own collection class (using the array as the basis of our implementation) and then by covering the collection classes in the.NET Framework.
COLLECTIONS DEFINED
A collection is a structured data type that stores data and provides operations for adding data to the collection, removing data from the collection, updating data in the collection, and setting and returning the values of different attributes of the collection.
Collections can be broken down into two types—linear and nonlinear. A linear collection is a list of elements where one element follows the previous element. Elements in a linear collection are normally ordered by position (first, second, third, etc.). In the real world, a grocery list exemplifies a linear collection; in the computer world (which is also real), an array is designed as a linear collection.
Nonlinear collections hold elements that do not have positional order within the collection. An organizational chart is an example of a nonlinear collection, as is a rack of billiard balls. In the computer world, trees, heaps, graphs, and sets are nonlinear collections.
Collections, be they linear or nonlinear, have a defined set of properties that describe them and operations that can be performed on them.
In this chapter we look at two advanced topics: dynamic programming and greedy algorithms. Dynamic programming is a technique that is often considered to be the reverse of recursion. Whereas a recursive solution starts at the top and breaks the problem down solving all small problems until the complete problem is solved; a dynamic programming solution starts at the bottom, solving small problems and combining them to form an overall solution to the big problem.
A greedy algorithm is an algorithm that looks for “good solutions” as it works toward the complete solution. These good solutions, called local optima, will hopefully lead to the correct final solution, called the global optimum. The term “greedy” comes from the fact that these algorithms take whatever solution looks best at the time. Often, greedy algorithms are used when it is almost impossible to find a complete solution, owing to time and/or space considerations, yet a suboptimal solution is acceptable.
A good source for more information on advanced algorithms and data structures is (Cormen, 2001).
DYNAMIC PROGRAMMING
Recursive solutions to problems are often elegant but inefficient. The VB.NET compiler, along with other language compilers, will not efficiently translate the recursive code to machine code, resulting in an inefficient, though elegant computer program.
Many programming problems that have recursive solutions can be rewritten using the techniques of dynamic programming. A dynamic programming solution builds a table, usually using an array, that holds the results of the different subsolutions.
The array is the most common data structure and is found in nearly all computer programming languages. Arrays are implemented somewhat differently in VB.NET than in previous versions of Visual Basic because in VB.NET an array is actually an instantiated Array class object. The Array class provides a set of methods for performing tasks such as sorting and searching that programmers had to build by hand in the past.
A new feature in VB.NET is the ArrayList class. An ArrayList is an array that grows dynamically as more space is needed. For situations where you cannot accurately determine the ultimate size of an array, or where the size of the array will change quite a bit over the lifetime of a program, an ArrayList may be a better choice than an array.
In this chapter we'll quickly touch on the basics of using arrays in VB.NET, then move on to more advanced topics, including copying, cloning, testing for equality, and using the static methods of the Array and ArrayList classes.
ARRAY BASICS
An array stores a set of elements ordered by position. The base position, or index, of arrays in VB.NET is zero, which is a big change from previous versions of Visual Basic, since in those versions the array base was actually user-defined. It is quite common to see Visual Basic 6 (or earlier) array declarations like
Dim Sales(1990 To 1999) As Double
where 1990 is the lower bound and 1999 is the upper bound.
Data organize naturally as lists. We have already used the Array and ArrayList classes for handling data organized as a list. Although those data structures helped us group the data in a convenient form for processing, neither structure provides a real abstraction for actually designing and implementing problem solutions.
Two list-oriented data structures that provide easy-to-understand abstractions are stacks and queues. Data in a stack are added and removed from only one end of the list; data in a queue are added at one end and removed from the other end of a list. Stacks are used extensively in programming language implementations, from everything from expression evaluation to handling function calls. Queues are used to prioritize operating system processes and to simulate events in the real world, such as teller lines at banks and the operation of elevators in buildings.
VB.NET provides two classes for using these data structures: the Stack class and the Queue class. We'll discuss how to use these classes and look at some practical examples in this chapter.
STACKS, A STACK IMPLEMENTATION, AND THE STACK CLASS
The stack is one of the most frequently used data structures, as we just mentioned. We define a stack as a list of items that are accessible only from the end of the list, which is called the top of the stack. The standard model for a stack is a stack of trays at a cafeteria.
The Visual Basic.NET (VB.NET) programming language is not usually associated with the study of data structures and algorithms. The primary reason for this must be because most university and college computer science departments don't consider VB.NET to be a “serious” programming language that can be used to study serious topics. This is primarily a historical bias based on Basic's past as a “nonprogrammer's” language often taught to junior high, senior high, and liberal arts college students, but not to computer science or computer engineering majors.
The present state of the language, however, aligns it with other, more serious programming languages, most specifically Java. VB.NET, in its current form, contains everything expected in a modern programming language, from true object-oriented features to the.NET Framework library, which rivals the Java libraries in both depth and breadth.
Included in the.NET Framework library is a set of collection classes, which range from the Array, ArrayList, and Collection classes, to the Stack and Queue classes, to the Hashtable and the SortedList classes. Students of data structures and algorithms can now see how to use a data structure before learning how to implement it. Previously, an instructor had to discuss the concept of, say, a stack, abstractly until the complete data structure was constructed. Instructors can now show students how to use a stack to perform some computations, such as number base conversions, demonstrating the utility of the data structure immediately.
Adictionary is a data structure that stores data as a key–value pair. The DictionaryBase class is used as an abstract class to implement different data structures that all store data as key–value pairs. These data structures can be hash tables, linked lists, or some other data structure type. In this chapter, we examine how to create basic dictionaries and how to use the inherited methods of the DictionaryBase class. We will use these techniques later when we explore more specialized data structures.
One example of a dictionary-based data structure is the SortedList. This class stores key–value pairs in sorted order based on the key. It is an interesting data structure because you can also access the values stored in the structure by referring to the value's index position in the data structure, which makes the structure behave somewhat like an array. We examine the behavior of the SortedList class at the end of the chapter.
THE DICTIONARYBASE CLASS
You can think of a dictionary data structure as a computerized word dictionary. The word you are looking up is the key, and the definition of the word is the value. The DictionaryBase class is an abstract (MustInherit) class that is used as a basis for specialized dictionary implementations.
The key–value pairs stored in a dictionary are actually stored as DictionaryEntry objects. The DictionaryEntry structure provides two fields, one for the key and one for the value.
The BitArray class is used to represent sets of bits in a compact fashion. Bit sets can be stored in regular arrays, but we can create more efficient programs if we use data structures specifically designed for bit sets. In this chapter we'll look at how to use this data structure and examine some problems that can be solved using sets of bits.
Since many VB.NET programmers have not been properly introduced to working with binary numbers, this chapter also includes a review of binary numbers, bitwise operators, and bitshift operators.
A MOTIVATING PROBLEM
Let's look at a problem we will eventually solve using the BitArray class. The problem involves finding prime numbers. An ancient method, discovered by the third-century b.c. Greek philosopher Eratosthenes, is called the sieve of Eratosthenes. This method involves filtering numbers that are multiples of other numbers, until the only numbers left are primes. For example, let's determine the prime numbers in the set of the first 100 integers. We start with 2, which is the first prime. We move through the set removing all numbers that are multiples of 2. Then we move to 3, which is the next prime. We move through the set again, removing all numbers that are multiples of 3. Then we move to 5, and so on. When we are finished, all that will be left are prime numbers.
We'll first solve this problem using a regular array.