zl程序教程

您现在的位置是:首页 >  其他

当前栏目

大疆S1 OTA提取源码简单分析

2023-03-14 22:56:04 时间

今天这个文章,没有什么条理,随便记录。

通过一些手段可以把车root了,然后分析日志可以看到文件系统可读,然后就完整的把文件系统导出了,接着就是随便看看。

一直也是对java的Python的混合使用感兴趣,找不到什么资料,S1的这些东西是极好的学习资料。

这个智能的主控就是安卓系统,代码就是从这里拷出来的

机器人的初始化操作有这些代码

https://service-adhoc.dji.com/download/app/pc/aa9163ed-66a5-4917-b747-f63933df4038

我这个链接应该是放的dji的桌面版控制软件。

高性能的无刷电机

我们需要知道这些方法的名字,然后在源码里面搜索

源码里面封装了一套工具函数,来对数据进行转换

可以通过F12不停的看函数的定义


def start():
    gimbal_ctrl.enable_stick_overlay()
    media_ctrl.capture()
    media_ctrl.record(1)

这是从桌面的软件复制来的

https://dl.djicdn.com/downloads/robomaster-s1/20200324/RoboMaster_S1_User_Manual_v1.8_CHS.pdf
https://www.python.org/

如果你的电脑上面没有Python的环境,你也可以先安装一个。

这个摄像头好像是OV5XXX(我忘了,源码有)

智能中控的一些功能

这次看这个,通用的SBUS就行

连接图

通道映射

官方的这个Futaba的接收器600多。。。

但是吧,FS-i6X+A8S好像是没输没什么用emmmm,我要试试

variable_LedID = 0
list_LedList = RmList()

def user_defined_gimbalSpin():
    global variable_LedID
    global list_LedList
    gimbal_ctrl.set_rotate_speed(100)
    chassis_ctrl.set_rotate_speed(180)
    media_ctrl.play_sound(rm_define.media_sound_gimbal_rotate)
    led_ctrl.set_top_led(rm_define.armor_top_all, 255, 0, 0, rm_define.effect_marquee)
    led_ctrl.set_bottom_led(rm_define.armor_bottom_all, 255, 0, 0, rm_define.effect_always_on)
    gimbal_ctrl.rotate(rm_define.gimbal_left)
    chassis_ctrl.rotate_with_time(rm_define.clockwise, 0.4)
    gimbal_ctrl.rotate(rm_define.gimbal_right)
    chassis_ctrl.rotate_with_time(rm_define.anticlockwise, 0.8)
    gimbal_ctrl.rotate(rm_define.gimbal_left)
    chassis_ctrl.rotate_with_time(rm_define.clockwise, 0.4)
    led_ctrl.turn_off(rm_define.armor_all)
    rmexit()

def start():
    global variable_LedID
    global list_LedList
    robot_ctrl.set_mode(rm_define.robot_mode_free)
    media_ctrl.play_sound(rm_define.media_sound_count_down)
    led_ctrl.set_top_led(rm_define.armor_top_all, 69, 215, 255, rm_define.effect_always_off)
    time.sleep(0.5)
    variable_LedID = 0
    while not 7 < variable_LedID:
        variable_LedID = variable_LedID + 1
        list_LedList.append(variable_LedID)
        led_ctrl.set_single_led(rm_define.armor_top_all, list_LedList, rm_define.effect_always_on)
        time.sleep(0.4)
    user_defined_gimbalSpin()

在这个库里面封装了很多的机体库里面的组件,这里就从相机下手看看

一开始就导入这些库,然后建立了一个日志的对象,可能对于所有的模块来讲,日志的记录是很重要的一环,所有的文件里面都有这个日志的初始化

F12 看定义

真丢人。。。看这么久了,我就会写个日志模块

这是对一个相机的类的初始化的方法,注意一个东西

msg_buff,这应该就是所谓的协议字节位

在tools的工具箱里面有一个这样的函数

设置默认的接收,就一个参数,接下来是相机的模块,设置什么的

相机的ID为100

设置的一些宏(Python没有宏,只能这样实现)

其实给了这些具体的定义以后,完全就可以控制机器人

这些是一开始的一些执行情况的定义

这就是上面日志模块的写法,可以看到就是使用的自带的Py库

很容易就可以顺藤摸瓜的找到最终的定义

这个是相机的设置函数

捕获的函数

查下sbus

这里有

指向了这个脚本,后面我找到了这个脚本,下次说

DUSS_MB_CMD_FC_SBUS_PACKET                      = 0xAA

这SBUS就到此为止