RoArm-M3
| ||
Overview
Introduction
This is a 5+1 DOF smart robotic arm designed for innovative applications. It adopts a lightweight structure and has an effective load of 0.2kg when grabbing objects 0.5m away from the mechanical arm's origin, and it can be flexibly installed on various mobile platforms. Its 360° omnidirectional base movement range, combined with five flexible joints, creates a workspace with a diameter of up to 1m.
This joint direct drive design of the product improves repositioning accuracy while also enhancing structural reliability, and adopts innovative dual-drive technology to double the torque of the shoulder joint. The master control module: uses an ESP32 MCU and supports multiple wireless control methods, providing flexible control interfaces and a wide range of communication protocols, allowing the robotic arm to easily connect to various common devices. At the same time, it is also compatible with ROS2 and a variety of host computers, and supports a variety of wireless and wired communication methods.
The user-friendly cross-platform web application and simple and intuitive coordinate control mode greatly reduce the difficulty of use. Additionally, rich textual and video tutorials are provided to help you get started with learning and using this robotic arm quickly. At the same time, the RoArm-M3 series can also support the popular AI robotic arm project LeRobot, integrating its pre-training models, teaching datasets, and simulation environments to provide strong support for the research and development of deep learning, imitation learning, and reinforcement learning. By calling LeRobot's examples and algorithm library, developers can deploy intelligent algorithms to RoArm-M3 more quickly, further expanding the possibilities of innovative applications.
The RoArm-M3 series achieves an excellent balance in multiple dimensions such as lightweight, ease of use, scalability, and open innovation. It is a multifunctional robotic arm that integrates intelligent control, human-computer interaction, and customizable development. If you need a solution that is flexible, scalable, and easy to use, the RoArm-M3 series will be a good choice to help you achieve more innovation.
Features
- Omnidirectional workspace: The 360° all-round rotating base with flexible joint movement creates a working space with a diameter of up to 1m to achieve all-round freedom of movement.
- Usability: Provides cross platform Web applications and coordinate control modes, reducing the difficulty of use and enabling users to easily operate robotic arms.
- Open source code: Open source the control code and communication interface documentation of RoArm-M3 robotic arm series, which is convenient for users to carry out secondary development.
- Joint direct-drive design: Using 12-bit high-precision magnetic encoder to obtain the joint angle makes the repositioning accuracy up to 0.088°, which improves the structure reliability.
- Dual-drive technology: Innovative dual-drive technology enhances the torque of the shoulder joint of the robotic arm and improves the overall loading capacity of the arm.
- Powerful master control module: Adopts ESP32 master control MCU, which supports multiple control interfaces and wireless communication protocols.
- Multi-platform compatibility: Compatible with ROS2 and a variety of host computers, supports a variety of wireless and wired communication modes, providing flexibility for different development and control needs.
- Rich tutorial resources: Provides rich graphic and video tutorials covering a wide range of functions to help users quickly get started learning and using the robotic arm, thus accelerating the realization of innovative applications.
Appearance
The following are annotations of various parts and commonly used interfaces of the robotic arm:
Onboard Interfaces on General Driver Board for Robots
No. | Resource Name | Description |
1 | ESP32-WROOM-32 main control module | Can be developed using Arduino IDE |
2 | IPEX Gen 1 WIFI interface | Used for connecting the antenna with IPEX1 outer screw inner hole |
3 | Lidar Interface | Integrated the radar adapter board functionality |
4 | IIC peripheral expansion interface | Can be used to connect OLED screens or other IIC sensors |
5 | Reset button | Press and release to reboot the ESP32 |
6 | Download button (BOOT) | When pressed, it boots the ESP32 into download mode |
7 | DC-DC 5V Regulator circuit | Can power a host device such as a Raspberry Pi or Jetson nano, etc. |
8 | Type-C port (LADAR) | LiDAR data interface |
9 | Type-C port (USB) | ESP32 serial communication interface, which can upload programs for ESP32 |
10 | XH2.54 Power connector | Inputs DC7~12.6V, can directly power the serial bus servos and motors |
11 | INA219 | Voltage/current monitoring chip |
12 | Power switch | Control external power supply ON/OFF (ON position in the figure above) |
13 | ST3215 Bus Servo Interface | Used to connect ST3215 serial bus servo |
14 | Motor interface PH2.0 6P | Group B interface for motor with encoder |
15 | Motor interface PH2.0 6P | Group A interface for motor with encoder |
16 | Motor interface PH2.0 2P | Group A interface for motor without encoder (LED lamp interface in this product) |
17 | Motor interface PH2.0 2P | Group B interface for motor without encoder |
18 | AK09918C | 3-axis electronic compass |
19 | QMI8658 | 6-axis motion sensor |
20 | TB6612FNG | Motor control chip |
21 | Serial bus servo control circuit | Connect multiple ST3215 bus servos and get servo feedback |
22 | TF card slot | Can be used to store logs or WIFI configurations |
23 | 40PIN expansion interface | Easy access to Raspberry Pi 4B, Raspberry Pi Zero or Jetson Orin Nano |
24 | 40PIN expansion interface | Convenient for using the pins on the host computer installed on the driver board |
25 | CP2102 chip | Serial port to USB, used for radar data transmission |
26 | CP2102 chip | Serial to USB, used for ESP32 serial communication |
27 | Automatic download circuit | Does not require pressing the EN and BOOT buttons when uploading code to ESP32F |
Product Use
Precautions
Please read the following before use:
- This product is already assembled at the factory, but due to the large number of servos used, it is not recommended to disassemble the product.
- The operating voltage range of this product is 7-12.6V. It is recommended to use the standard 12V 5A power supply or 3S lithium battery for power supply. It is strictly prohibited to use power supplies that exceed the operating voltage range of the product.
- The servo used in this product has a relatively high torque, which may pose potential risks. Therefore, it is advisable to avoid having sensitive areas such as eyes or head within the range of the servo's movement when using it.
- Keep away from children when using this product to avoid injury; And the product cannot be subjected to severe impacts.
- For safety reasons, the default demo's robotic arm runs at a relatively slow speed. You can refer to the following tutorial to change this speed, but a too low speed may cause the robotic arm to shake when running to certain specific positions.
Start Working
Please read the Appearance section first to understand the structure of the robotic arm and various common interfaces.
- Connect the configured 12V 5A power cable to the power interface on the robotic arm, turn on the power switch, and the device will start up with all joints automatically moving to the middle position.
- The meaning of the content displayed on the OLED screen after power on is as follows:
- The first line indicates that the WiFi is in AP mode at this time, and the WiFi hotspot is named RoArm-M3;
- The second line indicates that STA mode is turned off. When WiFi is in STA mode, the router will assign an IP address and display it;
- The content of the third line is the MAC address of this device, which is unique and used for ESP-NOW communication.
- Use your mobile phone or computer to connect to the WiFi of the RoArm-M3-S after powering on: RoArm-M3, the password is 12345678, open Google Chrome after connecting to WiFi, and enter 192.168.4.1 in the URL bar to open the Web interface. Next, you can use the Web-based features to control the robotic arm. For details on how to use the Web side, please refer to the Basic Usage section.
Basic Usage
AngleCtrl: Servo Angle Control
The number displayed on each column of buttons is the angle to which each joint rotates, displayed in radians. The labeling of each joint can be found in the figure in the Appearance section. All displayed numerical feedback will only be updated after the button is released. Specific updates are detailed in the following rotation instructions.
1. "B L" and "B R": Control the rotation of the basic joint, with a rotation range of 360° (3.14~-3.14). After the product is turned on, the basic joint will automatically rotate to the middle position, and the number on the button is 0 at this time.
- When clicking "B L" continuously, the basic joint will rotate 180° to the left, and the number will be updated from 0 to 3.14;
- When clicking "B R" continuously, the basic joint will rotate 360° to the right, and the number will be updated from 3.14 to -3.14.
2. "S D" and "S U": Control the rotation of the shoulder joint, with a rotation range of 180° (1.57~-1.57). After the product is turned on, the shoulder joint will automatically rotate to the middle position, and the number on the button is 0 at this time.
- When clicking "S D" continuously, the shoulder joint will rotate 90° forward to its maximum limit, and the number will be updated from 0 to -1.57;
- When clicking "S U" continuously, the shoulder joint will rotate 180° in the opposite direction, and the number will change from -1.57 to 1.57.
3. "E D" and "E U": Control the rotation of the elbow joint, with a rotation range of 180°. After the product is turned on, the elbow joint will automatically rotate to the middle position, and the number on the button is 1.57 at this time.
- When clicking "E D" continuously, the elbow joint will rotate downward, and the number will increase from 1.57;
- When clicking "E U" continuously, the elbow joint will rotate in the opposite direction, and the number will decrease from the beginning.
4. "W+DG" and "W-UG": Control the rotation of the wrist joint 1, with a rotation range of 180° (1.57~-1.57). After the product is turned on, the elbow joint will automatically rotate to the middle position, and the number on the button is 0 at this time.
- When clicking "W+DG" continuously, the wrist joint1 will rotate 90° downward its maximum limit, and the number will be updated from 0 to 1.57;
- When clicking "W-UG" continuously, the elbow joint1 will rotate 180° in the opposite direction to the limit, and the number will change from 1.57 to -1.57.
5. "R+DG" and "R-UG": Control the rotation of the wrist joint 2, with a rotation range of 360° (3.14~-3.14). After the product is turned on, the elbow joint will automatically rotate to the middle position, and the number on the button is 0 at this time.
- When clicking "R+DG" continuously, the wrist joint2 will rotate 180° to the right limit, and the number will be updated from 0 to 3.14;
- When clicking "R-UG" continuously, the elbow joint1 will rotate 360° in the opposite direction to the limit, and the number will change from 3.14 to -3.14.
6. "G+ DG" and "G-UG": Control the rotation of the end joint, with a rotation range of 135° (3.14~1.08). After the product is turned on, the elbow joint will automatically rotate to the middle position, and the number on the button is 3.14 at this time.
- When clicking "G+DG" continuously, the end joint will be clamped, which is the default clamping state;
- When clicking "G-UG" continuously, the end joint will open, with a maximum opening angle of 135°, and the number will change from 3.14 to 1.08.
INIT: After clicking, each joint will reset to the middle position when the product is turned on.
Torque: Torque Lock Control
Clicking "Torque OFF" means that the torque lock is turned off. After turning off the torque lock, the joint can be rotated manually when the robotic arm is powered on; clicking "Torque ON" means that the torque lock is turned on. After turning on, the joint cannot be rotated manually when the robotic arm is powered on.
Note: After turning off the torque lock, if a certain joint or all joints of the robotic arm receive other rotation commands, the torque lock will be automatically turned on.
DEFA: Dynamic External Force Adaptive Control
Clicking on "DEFA ON" indicates that the function is enabled. After enabling it, using external force to rotate the robotic arm will rebound to the position before rotation; Clicking "DEFA OFF" means that the function is turned off.
LED: LED Light Control
Click "LED OFF" to turn off the LED light; Click "LED ON" to turn on the LED light.
COORDCTRL: End Point Coordinate Control
- X. Y and Z respectively represent the position coordinates of the X-axis, Y-axis, and Z-axis of the end joint of the robotic arm;
- T represents the angle of the end point of the robotic arm in the vertical plane. Under the condition of keeping the endpoint unchanged, the angles that each joint needs to rotate are obtained by inverse solving the coordinate points;
- R represents the rotation angle of wrist joint 2, as detailed in the "R+DG" column of the AngleCtrl function;
- G represents the rotation angle of the end joint, as described in detail in the "G+DG" column of the AngleCtrl function, all six of which can be adjusted through "+-".
INIT: After clicking, the end point will reset to the middle position when the product is turned on.
FEEDBACK INFOMATIONL: Information Feedback
You can input control commands here to communicate with the robotic arm, and the feedback information from the control commands will be displayed above the input box. Below the "SEND" button are commonly used control commands for robotic arms. Clicking the "INPUT" button next to the command will automatically input them into the input box.
Advanced Use
When controlling a robotic arm, we use a specific control command—a JSON command—to tell the robotic arm what action it should perform. In advanced use, we mainly introduce how to send JSON commands for robotic arm control and instructions for using robotic arm JSON commands.
What is JSON Command
JSON (JavaScript Object Notation) is a lightweight data exchange format, typically used for transmitting and storing data between different systems. JSON originally originated from JavaScript, but it has become an independent data format from programming languages and can therefore be used and parsed in various programming languages.
JSON commands are like a standardized "menu" that can tell the robotic arm the angles at which each joint needs to rotate, where the robotic arm needs to move to, and how fast to move, etc.
Basic format of JSON Command
The basic format of a JSON command is: key:value
- The key must be a string enclosed in double quotation marks;
- Values can be of various types: strings, numbers, objects, arrays, Boolean values, or null. Among them, strings must be enclosed in double quotes, while others do not require quotes;
Let's use a simple example to understand the JSON command. The following is the command for releasing the end point of the robotic arm:
{"T":106,"cmd":1.57,"spd":0,"acc":0}
Among them, T, cmd, spd, and acc in double quotation marks are keys, and values are after colons. Explanation of this command:
- "T": 106 represents the command used to control the rotation of the end joint of the robotic arm (CMD_EOAT_HAND_CTRL). This is a fixed value, which cannot be changed, is a numerical value that the program recognizes the purpose of the command.
- The value of T is defined in the header file jsonn_cmd. h of the product's slave computer program.
- Note: Different control commands will use different T values.
- "cmd": The angle at which the end joint needs to be rotated (displayed in radians). The default initial position of the end joint is 3.14. The value given here is 1.57, so the gripper rotate openly.
- "spd": The speed of joint rotation. When the speed value is 0, rotate at maximum speed.
- "acc": Acceleration of joint rotation. When the acceleration value is 0, rotate at maximum acceleration.
This command tells the robotic arm: "Please open the gripper with maximum speed and acceleration."
Why use JSON commands for communication?
The following are the advantages of using JSON formatted commands to control robots:
1. Good readability
JSON is a lightweight text data format that is easy for humans to read and write. It uses the form of key-value pairs, which makes the commands easy to understand and debug, especially during the development and testing phases.
2. Easy to parse
Many programming languages provide JSON parsers, making parsing JSON commands very easy. This makes it easy to convert commands into executable operations.
3. Cross platform compatibility
JSON is a universal format that can be used on almost any programming language and platform. This means that you can use different programming languages to send and receive JSON commands.
4. Structured data
JSON supports nested data structures and can contain objects and arrays. This allows you to organize commands in a clear manner, including parameters, options, and subcommands.
5. Scalability
You can easily add new fields and parameters to JSON commands to support more features and options without changing the overall structure of the command.
6. Easy to integrate
JSON is the standard input and output format for many APIs and Web services. This enables robots to seamlessly inherit from other systems and services, such as communicating through REST APIs.
7. Standardization
JSON is a standardized data format that is widely supported and adopted. This means that you can use various libraries and tools to process and manipulate JSON data.
8. Support for multiple languages
Due to the fact that JSON can be used in multiple programming languages, it is possible to implement robot control systems written in multiple languages without the need to rewrite command parsers.
Overall, JSON formatted commands provide a simple, flexible, readable, and easily parsed way to control robots, making robot control systems more powerful and maintainable.
How to Send JSON Commands
You can use various methods to send JSON commands to set up and control the robotic arm. In fact, the underlying interface for web page operations in basic use also uses JSON commands to communicate with the robotic arm.
Web Delivery
In the web interface, we also reserve a command input box that can send JSON commands to set or control the robotic arm. There are the following advantages and disadvantages to using web pages to send JSON commands:
- Advantages: Suitable for beginners to debug simple commands;
- Disadvantage: Some JSON commands require lengthy feedback, which may result in incomplete display.
By default, you have already connected to the WIFI of the robotic arm and opened the web interface according to the Start Working section.
In the web interface, you can see an input box under "FEEDBACK INFOMATION" where you can enter the corresponding JSON command to communicate with the robotic arm. After clicking "SEND" to send, the feedback information from the JSON command will be displayed above the input box.
Python HTTP Request Communication
HTTP (Hypertext Transfer Protocol) is an object-oriented protocol used for data communication on the Web, belonging to the application layer.
Features: Wireless communication, based on WIFI module implementation, request-response model, flexible and simple.
Click to download RoArm-M3-S_Python Demo, which includes two Python demos. The Python demo for HTTP request communication is http_simple_ctrl.py. The demos are as follows:
import requests import argparse def main(): parser = argparse.ArgumentParser(description='Http JSON Communication') parser.add_argument('ip', type=str, help='IP address: 192.168.10.104') args = parser.parse_args() ip_addr = args.ip try: while True: command = input("input your json cmd: ") url = "http://" + ip_addr + "/js?json=" + command response = requests.get(url) content = response.text print(content) except KeyboardInterrupt: pass if __name__ == "__main__": main()
Before running the program, you need to confirm the IP address of the robotic arm. The IP address of the robotic arm is related to the WIFI mode that the robotic arm is in.
- If the WIFI mode of the robotic arm is only in AP mode, the IP address is 192.168.4.1;
- If the WIFI mode of the robotic arm is in STA mode, the IP address of the robotic arm can be obtained on its OLED screen.
Use the following command to run the HTTP request communication program. The IP address in the command needs to be changed to the IP address of your robotic arm.
python http_simple_ctrl.py 192.168.4.1
Note: Regardless of the mode, the robotic arm needs to be on the same LAN as the device on which the script is running. |warn}}
After running, you can see the return of "input your json cmd:", after which you can enter JSON commands to set or control the robotic arm. Only one JSON command can be sent at a time, and feedback information from the robotic arm can also be obtained here.
Python-Serial Communication
Features: Wired connection, default baud rate @ 115200, bidirectional communication, stable, low latency.
Purpose: Convenient for users to control robotic arms using devices such as PC/Raspberry Pi/Jetson Orin Nano.
Connection method: (Both connection methods cannot appear simultaneously, choose one of them)
- Connect to one of the above devices through the ESP32 serial communication interface in Appearance;
- Connect to one of the above devices through the TX|RX pin of the serial number 23 or 24 40-PIN expansion interface in Onboard Interfaces on General Driver Board for Robots;
Python demo: serial_simple_ctrl.py
import serial import argparse import threading def read_serial(): while True: data = ser.readline().decode('utf-8') if data: print(f"Received: {data}", end='') def main(): global ser parser = argparse.ArgumentParser(description='Serial JSON Communication') parser.add_argument('port', type=str, help='Serial port name (e.g., COM1 or /dev/ttyUSB0)') args = parser.parse_args() ser = serial.Serial(args.port, baudrate=115200, dsrdtr=None) ser.setRTS(False) ser.setDTR(False) serial_recv_thread = threading.Thread(target=read_serial) serial_recv_thread.daemon = True serial_recv_thread.start() try: while True: command = input("") ser.write(command.encode() + b'\n') except KeyboardInterrupt: pass finally: ser.close() if __name__ == "__main__": main()
After running the program by connecting to the robotic arm, you can send commands in JSON format and get feedback from the robotic arm.
Functions
Resources
RoArm-M3 Related Program
RoArm-M3 Open Source Demo
RoArm-M3 Python Demo
RoArm-M3 Drawings
RoArm-M3 3D Mode
RoArm-M3 2D Dimensions
Schematic Diagram of General Driver Board for Robots
Software Driver
Software
Serial Driver
FAQ
Answer: The servo used by RoArm-M3-S is an engineering plastic shell ST3215 Servo; The RoArm-M3 Pro uses a metal shell servo for all joints except for the gripper joint ST3235 Servo, the backlash of the servo with a metal shell will be smaller and will not increase over time.
Answer: First, check if the robotic arm is powered on. The power interface and power switch markings can be found in the figure in the 【Appearance】 section. After plugging in the power interface, check if the power switch on the driver board is turned on; Next, compare the 【Onboard Interfaces on General Driver Board for Robots】 section to ensure that the robotic arm is plugged into the USB interface with serial number 9; Finally, check if the port number for serial communication is correct. If the control arm does not respond after the above checks, please consult technical support.
Answer: First check whether it is inserted into the USB port of the serial number ⑨ according to the 【Appearance】 section, if yes, then look at the device manager of the computer whether there is a new COM port appearing; if not, check the other devices part if there is an unrecognized device named CP2102 (as shown in the figure ). If such a device is found, it's likely due to the lack of a driver. In that case, you can click to install the CP2102 serial driver. If there is no unrecognized device with CP2102 in the name in other devices part, please contact the store's customer service to return it to the factory for repair.
Answer: In general, this situation occurs when the automatic download circuit of the General Driver for Robots can not work. At this time, you need to unplug the USB cable to upload again, when "..." appears during unload, press and hold the BOOT button on the General Driver for Robots, then press the EN key for one second and release the EN key, and finally release the BOOT key. If the upload is unsuccessful after multiple attempts, contact the store's customer service to return to the factory for repair.
Answer: After re-flashing the program, you need to clear the NVS area with {"T":604} command via serial communication, then power the robotic arm again, and reconnect to the WIFI.
Support
Technical Support
If you need technical support or have any feedback/review, please click the Submit Now button to submit a ticket, Our support team will check and reply to you within 1 to 2 working days. Please be patient as we make every effort to help you to resolve the issue.
Working Time: 9 AM - 6 PM GMT+8 (Monday to Friday)