大疆S1 OTA提取源码简单分析
今天这个文章,没有什么条理,随便记录。
通过一些手段可以把车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就到此为止
相关文章
- 在 Go 里用 CGO?这 7 个问题你要关注!
- 9款优秀的去中心化通讯软件 Matrix 的客户端
- 求职数据分析,项目经验该怎么写
- 在OKR中,我看到了数据驱动业务的未来
- 火山引擎云原生大数据在金融行业的实践
- OpenHarmony富设备移植指南(二)—从postmarketOS获取移植资源
- 《数据成熟度指数》报告:64%的企业领袖认为大多数员工“不懂数据”
- OpenHarmony 小型系统兼容性测试指南
- 肯睿中国(Cloudera):2023年企业数字战略三大趋势预测
- 适用于 Linux 的十大命令行游戏
- GNOME 截图工具的新旧截图方式
- System76 即将推出的 COSMIC 桌面正在酝酿大变化
- 2GB 内存 8GB 存储即可流畅运行,Windows 11 极致精简版系统 Tiny11 发布
- 迎接 ecode:一个即将推出的具有全新图形用户界面框架的现代、轻量级代码编辑器
- loongarch架构介绍(三)—地址翻译
- Go 语言怎么解决编译器错误“err is shadowed during return”?
- 敏捷:可能被开发人员遗忘的部分
- Denodo预测2023年数据管理和分析的未来
- 利用数据推动可持续发展
- 在 Vue3 中实现 React 原生 Hooks(useState、useEffect),深入理解 React Hooks 的