From fa0cae7e8414a14c38ce6edbb7c705fe197b8e76 Mon Sep 17 00:00:00 2001 From: James Harton Date: Wed, 20 May 2026 02:32:08 +0000 Subject: [PATCH 1/2] feature(transmission): lift reverse? and centering offset into transmission blocks MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ran `mix bb_servo_feetech.upgrade` against the robot module. For each joint with reverse?: true, the upgrader inserted a transmission block with reversed? true. The shoulder_lift (lower -10°/upper 190°) and elbow_flex (-187°/7°) joints got explicit offset values (90° and -90° respectively) preserving the auto-centering the Feetech actuator used to derive from those limits internally. Refs: beam-bots/bb#108 --- lib/bb/example/so101/robot.ex | 36 ++++++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/lib/bb/example/so101/robot.ex b/lib/bb/example/so101/robot.ex index ddbf187..046e89d 100644 --- a/lib/bb/example/so101/robot.ex +++ b/lib/bb/example/so101/robot.ex @@ -135,10 +135,13 @@ defmodule BB.Example.SO101.Robot do acceleration(~u(2160 degree_per_square_second)) end + transmission do + reversed?(true) + end + actuator( :shoulder_pan_servo, - {BB.Servo.Feetech.Actuator, - servo_id: 1, controller: :feetech_controller, reverse?: true} + {BB.Servo.Feetech.Actuator, servo_id: 1, controller: :feetech_controller} ) link :shoulder_link do @@ -184,10 +187,14 @@ defmodule BB.Example.SO101.Robot do acceleration(~u(2160 degree_per_square_second)) end + transmission do + offset(~u(90.0 degree)) + reversed?(true) + end + actuator( :shoulder_lift_servo, - {BB.Servo.Feetech.Actuator, - servo_id: 2, controller: :feetech_controller, reverse?: true} + {BB.Servo.Feetech.Actuator, servo_id: 2, controller: :feetech_controller} ) link :upper_arm_link do @@ -233,10 +240,14 @@ defmodule BB.Example.SO101.Robot do acceleration(~u(2160 degree_per_square_second)) end + transmission do + offset(~u(-90.0 degree)) + reversed?(true) + end + actuator( :elbow_servo, - {BB.Servo.Feetech.Actuator, - servo_id: 3, controller: :feetech_controller, reverse?: true} + {BB.Servo.Feetech.Actuator, servo_id: 3, controller: :feetech_controller} ) link :forearm_link do @@ -282,10 +293,13 @@ defmodule BB.Example.SO101.Robot do acceleration(~u(2160 degree_per_square_second)) end + transmission do + reversed?(true) + end + actuator( :wrist_flex_servo, - {BB.Servo.Feetech.Actuator, - servo_id: 4, controller: :feetech_controller, reverse?: true} + {BB.Servo.Feetech.Actuator, servo_id: 4, controller: :feetech_controller} ) link :wrist_link do @@ -331,10 +345,14 @@ defmodule BB.Example.SO101.Robot do acceleration(~u(2160 degree_per_square_second)) end + transmission do + reversed?(true) + end + actuator( :wrist_roll_servo, {BB.Servo.Feetech.Actuator, - servo_id: 5, controller: :feetech_controller, reverse?: true} + servo_id: 5, controller: :feetech_controller} ) link :gripper_link do From 2c9fb596a70df99057de155017043416036433c9 Mon Sep 17 00:00:00 2001 From: James Harton Date: Thu, 21 May 2026 01:08:39 +0000 Subject: [PATCH 2/2] improvement: nest transmission blocks inside each actuator BB's transmission DSL block moved from the joint to the attachment. Update the five transmission blocks in the SO-101 robot to live inside their corresponding actuator's do/end. --- lib/bb/example/so101/robot.ex | 67 +++++++++++++++-------------------- 1 file changed, 29 insertions(+), 38 deletions(-) diff --git a/lib/bb/example/so101/robot.ex b/lib/bb/example/so101/robot.ex index 046e89d..e55f15d 100644 --- a/lib/bb/example/so101/robot.ex +++ b/lib/bb/example/so101/robot.ex @@ -135,15 +135,13 @@ defmodule BB.Example.SO101.Robot do acceleration(~u(2160 degree_per_square_second)) end - transmission do - reversed?(true) + actuator :shoulder_pan_servo, + {BB.Servo.Feetech.Actuator, servo_id: 1, controller: :feetech_controller} do + transmission do + reversed?(true) + end end - actuator( - :shoulder_pan_servo, - {BB.Servo.Feetech.Actuator, servo_id: 1, controller: :feetech_controller} - ) - link :shoulder_link do visual do origin do @@ -187,16 +185,14 @@ defmodule BB.Example.SO101.Robot do acceleration(~u(2160 degree_per_square_second)) end - transmission do - offset(~u(90.0 degree)) - reversed?(true) + actuator :shoulder_lift_servo, + {BB.Servo.Feetech.Actuator, servo_id: 2, controller: :feetech_controller} do + transmission do + offset(~u(90.0 degree)) + reversed?(true) + end end - actuator( - :shoulder_lift_servo, - {BB.Servo.Feetech.Actuator, servo_id: 2, controller: :feetech_controller} - ) - link :upper_arm_link do visual do origin do @@ -240,16 +236,14 @@ defmodule BB.Example.SO101.Robot do acceleration(~u(2160 degree_per_square_second)) end - transmission do - offset(~u(-90.0 degree)) - reversed?(true) + actuator :elbow_servo, + {BB.Servo.Feetech.Actuator, servo_id: 3, controller: :feetech_controller} do + transmission do + offset(~u(-90.0 degree)) + reversed?(true) + end end - actuator( - :elbow_servo, - {BB.Servo.Feetech.Actuator, servo_id: 3, controller: :feetech_controller} - ) - link :forearm_link do visual do origin do @@ -293,15 +287,14 @@ defmodule BB.Example.SO101.Robot do acceleration(~u(2160 degree_per_square_second)) end - transmission do - reversed?(true) + actuator :wrist_flex_servo, + {BB.Servo.Feetech.Actuator, + servo_id: 4, controller: :feetech_controller} do + transmission do + reversed?(true) + end end - actuator( - :wrist_flex_servo, - {BB.Servo.Feetech.Actuator, servo_id: 4, controller: :feetech_controller} - ) - link :wrist_link do visual do origin do @@ -345,16 +338,14 @@ defmodule BB.Example.SO101.Robot do acceleration(~u(2160 degree_per_square_second)) end - transmission do - reversed?(true) + actuator :wrist_roll_servo, + {BB.Servo.Feetech.Actuator, + servo_id: 5, controller: :feetech_controller} do + transmission do + reversed?(true) + end end - actuator( - :wrist_roll_servo, - {BB.Servo.Feetech.Actuator, - servo_id: 5, controller: :feetech_controller} - ) - link :gripper_link do visual do origin do