# An Overview of Industrial Robots Control and Programming Approaches
## 1 Introduction  
Industry 4.0. (I4.0) has transformed almost every industrial sector, and the promotion of new digital and cyber-physical technologies has modified manufacturing plants [1]. They are now expected to produce parts at minimum cost and be able to quickly adapt their structure according to changes in production capacity and functionality [2]. Production is shifting toward the customization of products, and to cope with constant market changes, automation equipment and intelligent machines must easily reconfigure their tasks and effectively collaborate with each other to achieve the highest productivity and quality. One of the main challenges of I4.0 is the complexity of adapting to engineering changes while supporting different hardware and software platforms while maintaining adequate levels of robustness, safety, and reliability of devices during process execution [3]. Robots have been increasingly used in industry over the last 30 years, especially in the automotive and electrical/electronic fields [4, 5]. In particular, starting from the early 1970s, scientific and technical improvements have contributed to their diffusion, and now, Industrial Robots (IRs) play a key role in modern smart factories, performing a wide range of tasks such as material handling, picking and placing, product packing, inspection, palletization, precise assembly, machining, and additive manufacturing operations [6]. However, despite the extremely high versatility offered by their mechanical structure, the closed architecture of IR controllers is still a limiting factor for the abovementioned challenges. In other words, IRs can be defined as \"flexible machines rigidly programmed and controlled\". In the past, IRs were programmed to perform repetitive tasks in a static environment. Once tasks were defined, few code changes were made over time. New manufacturing systems, on the other hand, need to dynamically adapt their processes to meet the latest production demands, especially for mass customization, zero-defect, and quality optimization. This has given rise to greater complexity in production systems and, consequently, in the IRs' control and programming. Most of the IRs used today are completely dependent on their manufacturers' software platforms, and robot programming is based on specific proprietary robot languages offered by each robot vendor [7]. These features make it difficult to maintain, update, or add new functionalities based on the current production needs [8]. Moreover, the lack of interoperability complicates the development of interacting multi-robot control for IRs from different manufacturers. Additionally, the integration and communication between IRs and other devices (e.g., external sensors and actuators) are restricted. The heterogeneity of platforms hampers integration, especially in dynamic environments [9; 10]. As a result, it is difficult for production system components to communicate and exchange data dynamically [11], which is a barrier to collaborative work. Another limitation imposed by the current architecture of IRs is the difficulty of carrying out more complex control applications since access to the low levels of the control system is restricted. To fill these gaps and, thus, expand robotic applications, in the last years, new technologies and control alternatives have been developed in academic and industrial fields. These allow reaching a more flexible, modular, manufacturer-independent, and open architecture that can be incorporated into different industrial plants to satisfy a wider range of production needs [12; 13]. The purpose of this paper is to present an overview of the most researched and tested control and programming solutions for IRs. In particular, relevant scientific documents have been identified from the literature and compared. Along with such research works, the technologies offered by IR manufacturers have also been considered. For each control approach, the pros and cons are highlighted and discussed.