复刻低成本机械臂 SO-ARM100 单关节控制(附代码)

视频讲解:

复刻低成本机械臂 SO-ARM100 单关节控制(附代码)

代码仓库:GitHub - LitchiCheng/SO-ARM100: Some Test code on SO-ARM100

昨天用bambot的web的方式调试了整个机械臂,对于后面的仿真的sim2real来说,还是需要单独封装好这些控制,方便后面迁移到其他的测试平台中。

翻了lerobot的代码,可以看到对于feetech舵机的控制等封装已经挺完善,本质就是通过串口和舵机进行协议通信,这个在 lerobot/lerobot/common/robot_devices/motors/feetech.py 中可以看下相应的寄存器定义

接下来我们就针对lerobot这部分代码进行测试,测试单个关节的运动,首先是创建一个FeetechMotor的类,传入port和id就就可以方便的调试某个电机

import sys
import os
import time
parent_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(parent_dir)

from feetech import FeetechMotorsBusConfig
from feetech import FeetechMotorsBus

class FeetechMotor:
    def __init__(self, motor_id, port="/dev/ttyACM0"):
        motors={
            # name: (index, model)
            "shoulder_pan": [1, "sts3215"],
            "shoulder_lift": [2, "sts3215"],
            "elbow_flex": [3, "sts3215"],
            "wrist_flex": [4, "sts3215"],
            "wrist_roll": [5, "sts3215"],
            "gripper": [6, "sts3215"],
        },
        self.motor_id = motor_id
        self.motors_bus = FeetechMotorsBus(FeetechMotorsBusConfig(
            port=port,
            motors=motors,
        ))
        self.motors_bus.connect()

    def setPosition(self, position):
        self.motors_bus.write_with_motor_ids(self.motors_bus.motor_models, self.motor_id, "Goal_Position", position)

    def getPosition(self):
        return self.motors_bus.read_with_motor_ids(self.motors_bus.motor_models, self.motor_id, "Present_Position")

    def close(self):
        self.motors_bus.disconnect()

实验测试目标,让某个关节往复运动,声明一个函数generatePositionSequence用来生成位置的序列

def generatePositionSequence(start_position, range_value, loops=1):
    sequence = []
    for _ in range(loops):
        forward_positions = list(range(start_position, start_position + range_value + 1))
        sequence.extend(forward_positions)
        backward_positions = list(range(start_position + range_value - 1, start_position - 1, -1))
        sequence.extend(backward_positions)
    return sequence

执行部分,指定电机id和串口名称,开始让电机运动到2048也就是中间的位置,然后再开始往复运动

if __name__ == "__main__":
    motor = FeetechMotor(5, "/dev/ttyACM0")
    motor.setPosition(2048)
    time.sleep(1)
    start_position = motor.getPosition()
    print(f"Start position: {start_position}")
    range_val = 600
    loop_count = 10
    result = generatePositionSequence(start_position, range_val, loop_count)
    for position in result:
        motor.setPosition(position)
        current_position = motor.getPosition()
        print(f"Current position: {current_position}, Goal position: {position}")
        time.sleep(0.005)
    motor.close()

### 关于稚晖君 Dummy 机械复刻的教程与资料 #### 工具和资源准备 为了成功复刻稚晖君的Dummy机械,需准备好必要的工具和参考资料。这不仅涉及硬件组件的选择,还包括软件环境搭建以及具体编程实践等方面的内容[^1]。 #### 硬件选型指南 根据项目需求挑选合适的材料至关重要。例如,在构建过程中会用到多种类型的微控制(MCU),用于处理不同功能模块的任务;同时还需要考虑选用适当规格的电机及其配套减速机构以确保动作执行精准度。此外,对于追求高度仿生效果的设计者来说,则可能要引入视觉感知设备如双目摄像头等辅助元件来增强系统的智能化水平[^3]。 #### 开发流程概述 整个开发过程大致可分为几个阶段来进行: - **前期调研**:深入了解原版作品的技术细节,明确自己想要达到的效果目标; - **方案规划**:基于个人条件制定切实可行的工作计划书,确定所需采购清并评估成本预算范围; - **原型制作**:按照设计方案逐步组装测试平台,期间不断调整优化直至各项性能指标均能满足预期标准为止; - **调试完善**:完成初步集成之后便进入到最后一步——全面检验各部分协同工作的稳定性,并针对发现的问题及时作出修正改进措施[^4]。 #### 实际案例分析 有爱好者分享了从零起步打造属于自己的版本的经验贴,其中提到通过特定IDE创建工程项目后能够自动生成一系列重要文档(比如Gerber文件),这对于后续PCB打样生产环节非常有用处。另外还强调了利用开源社区的力量获取更多支持的重要性,像GitHub仓库里就存有许多宝贵的源码片段可供借鉴学习[^5]。 ```bash git clone https://github.com/your-repo/dummy-arm.git cd dummy-arm make all ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值