[搞点好玩的] JETSONNANO 受苦记 -- 002(胡乱颤抖的云台(伪))

在启动之后,需要给/dev位置赋权,具体命令: sudo chmod 777 -R /dev 然后输入密码即可。

由于相机需要显示,暂时先确定各个可移动组件的功能是否正常。
使用如下代码可以判断云台是否安装正常,如果螺丝和舵机角度没有正确安装,活动超限后,舵机会拼命抖动,发出各种闹心的噪声。
代码中涉及同步运动和异步运动控制两种,即:_control 和 _double_control 两个。
测试代码:

from servoserial import ServoSerial
import time 
sd = ServoSerial()

sd.Servo_serial_control(1, 2100)
time.sleep(0.1)
sd.Servo_serial_control(2, 2048)
time.sleep(0.1)
sd.Servo_serial_control(1, 1300)
time.sleep(0.1)
sd.Servo_serial_control(2, 1300)
time.sleep(0.1)
sd.Servo_serial_double_control(1, 1300, 2, 3600)
time.sleep(0.1)
sd.Servo_serial_control(1, 3600)
time.sleep(0.1)
sd.Servo_serial_control(2, 3600)
time.sleep(0.1)
sd.Servo_serial_double_control(1, 3600, 2, 1300)



time.sleep(0.5)
sd.Servo_serial_double_control(1, 2100, 2, 2048)

这里需要引用一个servoserial.py的库,查看了一下,是用树莓派的库写的,具体可以看这个链接。
servoserial.py的详细内容如下:

'''
@Copyright (C): 2010-2019, Shenzhen Yahboom Tech
@Author: Malloy.Yuan
@Date: 2019-07-17 10:10:02
@LastEditors: Malloy.Yuan
@LastEditTime: 2019-09-17 17:54:19
'''
#-*- coding:UTF-8 -*-
import RPi.GPIO as GPIO
import time
import string
import serial

#设置GPIO口为BCM编码方式
GPIO.setmode(GPIO.BCM)

class ServoSerial:
    def __init__(self):
        self.ser = serial.Serial("/dev/ttyTHS1", 115200, timeout = 0.001)
        print ("serial Open!")
    
    def __del__(self):
        self.ser.close()
        print ("serial Close!")

    def Servo_serial_control(self, index, angle):
        pack1 = 0xff
        pack2 = 0xff
        id = index
        len = 0x07
        cmd = 0x03
        addr = 0x2A
        #将舵机转动脉冲保持在安全范围内
        if index == 1:
            if angle<600:
                angle=600
            elif angle>3600:
                angle = 3600
        elif index == 2:
            if angle<1300:
                angle=1300
            elif angle>4095:
                angle=4095

        pos_H = (angle >> 8) & 0x00ff
        pos_L = angle & 0x00ff
        
        time_H = 0x00   # time = 500ms 分解成两个
        time_L = 0x0A
        checknum = (~(id + len + cmd + addr + pos_H + pos_L + time_H + time_L)) & 0xff
#         print(checknum)
        data = [pack1, pack2, id, len, cmd, addr, pos_H, pos_L, time_H, time_L, checknum]
#         print(bytes(data))
        self.ser.write(bytes(data))

    def Servo_serial_double_control(self, index_1, angle_1, index_2, angle_2):
        pack1 = 0xff
        pack2 = 0xff
        id = 0xFE
        id_1 = index_1
        id_2 = index_2
        len = 0x0E
        cmd = 0x83
        addr1 = 0x2A
        addr2 = 0x04
        #将舵机转动脉冲保持在安全范围内
        if angle_1<600:
            angle_1=600
        elif angle_1>3600:
            angle_1 = 3600

        if angle_2<1300:
            angle_2=1300
        elif angle_2>4095:
            angle_2=4095

        pos1_H = (angle_1 >> 8) & 0x00ff
        pos1_L = angle_1 & 0x00ff

        pos2_H = (angle_2 >> 8) & 0x00ff
        pos2_L = angle_2 & 0x00ff
        
        time1_H = 0x00   # time = 10ms 分解成两个
        time1_L = 0x0A

        time2_H = 0x00   # time = 10ms 分解成两个
        time2_L = 0x0A

        checknum = (~(id + len + cmd + addr1 + addr2 + id_1 + pos1_H + pos1_L + time1_H + time1_L + id_2 + pos2_H + pos2_L + time2_H + time2_L)) & 0xff
#         print(checknum)
        data = [pack1, pack2, id, len, cmd, addr1, addr2, id_1, pos1_H, pos1_L, time1_H, time1_L, id_2, pos2_H, pos2_L, time2_H, time2_L, checknum]
#         print(bytes(data))
        self.ser.write(bytes(data))

在这里插入图片描述
羡慕它的颈椎~~

灵活的脖子

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

deyiwang89

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值