ARC Pro

Upgrade to ARC Pro

Stay on the cutting edge of robotics with ARC Pro, guaranteeing that your robot is always ahead of the game.

PRO
Canada
#1  

Certainly! In the context of Synthiam ARC, there are two main types of servo ports: Dx and Vx. Each type serves a different purpose and is used in different scenarios. Here's a detailed explanation:

Dx servo Ports

  • Range: D0 to D24
  • Connection: Directly connected to the EZB microcontroller firmware's communication protocol.
  • Functionality: When you specify the position of a Dx servo port, the value is sent directly to the EZB microcontroller using its communication method. This means that Dx servo ports directly control an EZB microcontroller servo pin.
  • Mapping: There may be a mapping between the Dx port in ARC and the physical EZB microcontroller pin. When selecting a servo port, the dialog will display the EZB and mapping pins. Reference the mapping pins of the EZB when selecting the Dx port in the dialog.

Vx servo Ports

  • Range: V0 to V99
  • Connection: Virtual servo ports used internally within the ARC framework and not connected to an EZB via the communication protocol or the firmware.
  • Functionality: Changing the value of a Vx port signals an event within the ARC framework for other robot skills to act upon. For example, using a Robotis Dynamixel smart servo, you select the Vx port for the corresponding ID. When the Vx value changes, the Dynamixel robot skill will notice the new value and send it to the corresponding servo.
  • Use Cases: Vx virtual servos allow servos that have respective robot skills to control unique protocols. Examples include servo controllers like the SSC-32 or Pololu Maestro.

Servo Interface Menu

ARC displays a standard configuration dialog for configuring servos across all robot skills. This menu allows you to configure a servo (or multiple servos) to be moved from a robot skill. The configuration options include:

  • Port: Select the port and EZB for the servo.
  • Min/Max: Define the minimum and maximum position values.
  • Invert: Option to invert the direction of the servo.

Advanced servo Interface Menu

The advanced menu provides additional options and allows you to add multiple servos to an option. Advanced settings include:

  • Min/Max: Define the minimum and maximum limits the servo can move.
  • Ratio: A multiplier of the position from the first servo.
  • Velocity: Control the servo's velocity (if supported by the servo/driver/EZB).
  • Acceleration: Control the servo's acceleration (if supported by the servo/driver/EZB).
  • Speed: Control the servo's speed (if supported by the servo/driver/EZB).
  • Servo Resolution: Configure ARC to support a higher servo resolution per project.

Popular servo Robot Skills

Many robot skills control servos, such as:

  • Vertical/Horizontal Servo: Allows you to drag the mouse to move the servo position.
  • Camera Device: Uses a camera to track objects and control servos.
  • Auto Position: Create servo animations for robots to perform actions.
  • Joystick: Control servos using a joystick.
  • Virtual Reality: Control servos with VR headsets.

Hard Set servo Limits

You can set global servo positions across all robot skills using commands like SetServoMin and SetServoMax.

Example Testing a PWM Servo

  1. Load ARC.
  2. Press the Project tab and add a control.
  3. Select the servo tab and add a Vertical servo control.
  4. Configure the servo by selecting the port, setting Min/Max limits, and testing the servo movement.

Servo robot skill Drivers

There are various robot skills for different servo drivers, such as Robotis Dynamixel, LewanSoul, and more.

By understanding these servo port types and their configurations, you can effectively control and utilize servos in your robot projects using Synthiam ARC. If you have any specific questions or need further assistance, feel free to ask!


I am a customer support GPT-powered AI and still learning. If you have doubts about my response, please use the support documentation to verify my answer.
Unknown Country
#2  

Thanks. What I actually need to do is send a sequence of angles over serial. I’m using an Xbee wireless network to control two arms and two hands which are all electrically separated. I’d like to be able to generate the angles as if they were servos as I believe that’s the easiest way to link up to the other skills. For now I’ve modified the firmware so the servo position update also updates an array which I use to generate the serial message. This limits the total number of angles I can generate to the maximum number of servos on the mega which is 24. Ideally I’d like to be able to control 52 servos in total. Is there a way to generate a custom serial output directly that would transmit over an Xbee connected via USB enumerated as a COM port?

PRO
Synthiam
#3  

Okay I think I understand a bit but as we go through some steps I can probably understand more

what robot controller are you using that can support that many servos? That’ll be the first thing to consider

will the servos be pwm hobby servos? That will limit each servo to have 180 positions. Is that what you expect?

#4  

This also might be of interest to the topic.

From this page: https://www.arduino.cc/reference/en/libraries/servo/

Quote:

The servo library supports up to 12 motors on most Arduino boards and 48 on the Arduino Mega. On boards other than the Mega, use of the library disables analogWrite() (PWM) functionality on pins 9 and 10, whether or not there is a servo on those pins. On the Mega, up to 12 servos can be used without interfering with PWM functionality; use of 12 to 23 motors will disable PWM on pins 11 and 12.

The Mega can use 48 servos if all other PWM functionality and I/O is disabled. I do not believe it will affect communication interrupts, so it should give you 48 of the 52 servos you need.

Unknown Country
#5  

Thanks 48 would be much better! How do I make them show up in the Port editor in the Auto Position skill please?

The downstream motors are actually a mixture of serial servos and industrial servos on four different buses. The only link is the wireless network, for simplicity the same signal is broadcast to the four bus controllers which selectively trigger the correct motors.

PRO
Synthiam
#6   — Edited

Okay, if you read Athena's response, the Dx servo ports are limited to d0-d23, which means you can't use them. The EZB protocol is also limited to 24 servos. We'll need to use the Vx servos to create a custom firmware for the mega.

There are a few ways to do this...

  1. Create a custom robot skill. The robot skill would subscribe to the servo move event and transmit the servo port ID and servo position to the Arduino Mega. This isn't a significant amount of effort, as it's pretty straightforward.

  2. Use the servo Script robot skill. This allows sending the port and position to thArduinono mega without needing to create a robot skill: https://synthiam.com/Support/Skills/Scripting/Servo-Script?id=19068

Would you like Xbee to connect the Arduino mega? Is that baud rate 9600?

#7  

Thanks, both options sound interesting. Can you expand on Option 1 at all? I'll take a look at 2 now.

Yes the xbee just connects to one of the ports Serial1 in this case and forwards any bytes sent it's way, pending a bit of messing around with microsecond delays to prevent buffering problems.

Running at 115200 baud.

#8  

All I really want to do is broadcast a custom serial message by connecting xbee directly to ARC so maybe the mega is not the way to do it. The xbee plugs to an adaptor board which shows up as a com port. I'm reading about scripting now, could you give any advice please on the best way to take virtual servo movements package them in a custom serial message and send it to a COM port?