【持续更新】Jetson Nano 人工智能机器人开发实战案例——RosmasterX3A1

本文详细介绍了JetsonNano的参数、优缺点及实用注意事项,强调了其在嵌入式领域的应用。同时,阐述了STM32CubeIDE的下载安装过程,以及如何使用该IDE进行STM32开发环境的搭建,包括代码编写、编译和烧录步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、Jetson简介
Jetson Nano是Nvidia在Jetson XAVIER NX/TX2 NX获得成功后于2019年3月上市的低配版GPU运算平台。
在这里插入图片描述

图 1-1
1.1参数
官方公布参数
GPU: NVIDIA Maxwell architecture with 128 NVIDIA CUDA® cores
CPU: Quad-core ARM Cortex-A57 MPCore processor
Memory: 4 GB 64-bit LPDDR4, 1600MHz 25.6 GB/s
Storage: 16 GB eMMC 5.1
Video Encode: 250MP/sec
1x 4K @ 30 (HEVC)
2x 1080p @ 60 (HEVC)
4x 1080p @ 30 (HEVC)
4x 720p @ 60 (HEVC)
9x 720p @ 30 (HEVC)

Video Decode: 500MP/sec
1x 4K @ 60 (HEVC)
2x 4K @ 30 (HEVC)
4x 1080p @ 60 (HEVC)
8x 1080p @ 30 (HEVC)
9x 720p @ 60 (HEVC)

Camera: 12 lanes (3x4 or 4x2) MIPI CSI-2 D-PHY 1.1 (1.5 Gb/s per pair)
Connectivity: Gigabit Ethernet, M.2 Key E
Display: HDMI 2.0 and eDP 1.4
USB: 4x USB 3.0, USB 2.0 Micro-B
Others: GPIO, I2C, I2S, SPI, UART
Mechanical: 69.6 mm x 45 mm 260-pin edge connector
在这里插入图片描述

图 1-2

1.2 jetson nano优缺点
Nano最大的特色是包含一块128核Maxwell架构的GPU,虽然是老架构,但用于嵌入式设备,从功耗、体积、价格上也算一个平衡。
Nano的计算能力不高,勉强可以使用一些小规模、并且优化过的网络进行推理,训练的话还是不够用的。
A53的CPU中规中矩,树莓派4已经升级为A72。
4GB的内存并不能完全使用,因为其中有一部分(1GB左右)是和显存共享的。
Nano的最大优势还是在体积上,它采用核心板可拆的设计,核心板大小只有69.6 x 45 mm,可以很方便的集成在各种嵌入式应用中。同时它的功耗也非常低,有两种模式:
5W(低功耗模式;可以使用USB口供电)
10W(必须使用Power Jack外接5V电源供电)
这两种模式可以在系统菜单中进行修改。
当使用Power Jack供电时,外接电源要求5V=2A, 推荐使用5V=4A以应对峰值。
如果没有安装风扇,只使用自带的散热片被动散热的话,建议强制5W模式,否则一定死机。

1.3实用注意事项
1.Rosmaster机器人支持四款主控,分别是Jetson Nano开发板、Jetson Xavier NX开发板、Jetson TX2
NX开发板和树莓派4B开发板。
Jetson Nano、Jetson Xavier NX和Jetson TX2 NX开发板出厂系统用户名:jetson,密码:khxx8888
树莓派4B主控出厂系统用户名:pi,密码:khxx8888
不管哪款主控,Jupyter Lab的登录密码都是:khxx8888
2.由于Rosmaster机器人在开机时,会初始化板载的九轴姿态传感器,所以开机或者按下RESET键复位
时,应水平放置在地上,约几秒后听到‘滴’一声则可以正常使用。
3.正常状态下,Rosmaster机器人的MCU指示灯是每三秒快闪2次,如果发现MCU指示灯常亮或者常
灭,则表示扩展板上的单片机运行状态异常。请按一下RESET键复位单片机。
4.在运行单例程序前,请先将大程序关闭,否则可能会造成影响。
5.开机后,激光雷达自动转动,请不要堵转激光雷达转动,避免损坏产品。

锂电池组和电池充电器安全使用规范
1.严禁接入超过产品使用负载的设备。
2.严禁使用非亚博官方提供的电池或充电器。
3.电池充电时请关闭扩展板上的总电源开关,请勿对电池边充电边使用,防止出现充电器或电池爆炸。
4.电池充电时,充电器指示灯亮红灯,充满亮绿灯,充电完成后应及时拔掉充电器,避免过充损坏电
池。充电时需要有人在场。
5.电池9.6V以下时,扩展板蜂鸣器发出‘滴滴滴滴’报警声,并且MCU指示灯快闪,此时需要关闭电源,然
后给电池充电。
6.使用完毕后应关闭扩展板上的电源总开关,长时间不使用时,请保持锂电池组电压11.1V~11.7V,取出
锂电池组并放到电池安全区域,不要与金属物体混放,包在外边的绝缘膜不可以撕掉。
7.远离热源、火源、任何液体,切勿在潮湿或雨中使用。潮湿环境可能导致产品短路损坏。
8.当锂电池组或电池充电器起火、冒烟,请使用沙或者干粉灭火器灭火,然后迅速撤离至安全区域。
9.若锂电池组或电池充电器出现破损、严重发热、变形、变色、有异味或者其他任何异常现象时不得使
用,并及时联系亚博或其他代理商处理。
10.请在温度0℃到35℃环境下使用,其他温度下锂电池组或电池充电器稳定性可能会出现下降。
11.严禁故意刺破、短路、反接、私自焊接、撞击、碾压、抛掷锂电池组或电池充电器。
12.禁止在强静电和强磁场环境中使用产品,否则会导致产品损坏。
13.严禁私自改装或修改硬件电路板。
14.无成人监护时,请不要让儿童使用锂电池组或电池充电器,存放电池时应放在儿童不能拿到的地方。
15.锂电池组或电池充电器冒烟、发烫(严重时外壳会裂开),应迅速断开电源总开关、排插电源或者断
开总闸,并将电池或充电器放至空旷地带。

1.4扩展板介绍
在这里插入图片描述

正面元器件分布图 1-3
①T型DC 12V电源输入接口:作为扩展板的主电源输入,连接到DC 12V电源或者12V电池。
②⑨DC 12V电源输出:向外提供DC 12V电源。
③电源指示灯:指示电源供电是否正常。
④micro USB数据接口:连接主机通讯和烧录程序。
⑤type-C接口:向外提供DC 5V,仅供电不能通讯。
⑥DC 5V输出接口:可给Jetson Nano供电。
⑦I2C接口:可连接外部I2C设备,例如OLED屏幕。
⑧指示灯:数据指示灯和6.8V电压指示灯。
⑩DC 12V电源开关:电源总开关。
⑪按键:按键KEY1:用户功能按键,可通过编程实现自定义功能。按键RESET:板载单片机复位按键。
按键BOOT0:板载单片机BOOT0键,用于单片机进入烧录模式。
⑫九轴姿态传感器:提供扩展板当前姿态。
⑬CAN接口:连接CAN设备。
⑭RGB炫彩灯条接口:连接RGB炫彩灯条。
⑮SBUS接口:连接航模遥控器接收器。
⑯PWM舵机电压切换:改变跳线帽的位置可选择6.8V或者5V电压为PWM舵机供电。
⑰PWM舵机接口:可连接6.8V或者5V电压PWM舵机,需根据舵机电压在⑯选择对应的电压。
⑱串口舵机接口:连接到串口舵机机械臂。
⑲蜂鸣器:用于鸣笛报警。
⑳四路电机连接口:连接四个电机,根据不同车型连接方式请参考对应课程文档。

在这里插入图片描述

背面元器件分布图 1-4

①板载单片机:主要负责控制扩展板上的外设,例如蜂鸣器、电机驱动等。
②调试接口:连接到ST-Link或者J-Link上SW接口,用于调试单片机或者下载单片机固件。注意:焊接后
不保修

扩展板常见问题

A : Jetson Nano怎么控制扩展板?如何与扩展板通讯?
答:Jetson Nano发送串口数据,通过USB口传输到扩展板,扩展板上集成了单片机,接收并解析串口数
据,再处理具体要执行的命令。
B : 机器人如何供电?Jetson Nano需要另外供电吗?
答:小车出厂配有电池组,将电池组插入扩展板的DC 12V电源T型接口上,打开总电源开关,扩展板集
成电压转化芯片,提供DC 5V电源,通过DC 5V电源线传输给Jetson Nano供电。
C : 扩展板上哪些功能是由单片机管理??
答:扩展板上的单片机管理的部分包括:机械臂、有源蜂鸣器、姿态传感器、PWM舵机云台、电机、
RGB炫彩灯条、按键KEY1、RESET键、SBUS接口、CAN接口等。
D : 扩展板如何更新单片机固件?为什么要更新单片机固件?
答:扩展板集成的单片机出厂时已经烧录好固件,非必要情况下请无需更新固件。如果需要更新固件,
请参考更新固件的教程来操作更新单片机的固件。

1.5 STM32开发环境搭建

STM32CubeIDE介绍
STM32CubeIDE是一个多功能的集成开发工具,集成了TrueSTUDIO和STM32CubeMX,它是STM32Cube软件生态系统的一部分。
STM32CubeIDE是一个先进的C/C++开发平台,具有STM32微控制器的IP配置,代码生成,代码编译和调试功能。
它基于ECLIPSE™/ CDT框架和用于开发的GCC工具链以及用于调试的GDB。
它允许集成数百个现有插件,完成ECLIPSE™IDE的功能。

主要特点
集成STM32CubeMX:STM32微控制器选择,引脚分配,时钟,IP和中间件配置
,项目创建和初始化代码的生成。基于Eclipse™/CDT,支持ECLIPSE的™插件,GNU C / C ++中ARM®工具链和GDB调试器。
其他高级调试功能:CPU内核,IP寄存器和内存视图,实时变量观看视图,系统分析和实时跟踪(SWV),CPU故障分析工具,支持ST-LINK和J-Link调试探针,从TrueSTUDIO®和AC6导入项目
支持操作系统:Windows®,Linux®和MacOS®

下载安装包
https://www.st.com/zh/development-tools/stm32cubeide.html
在这里插入图片描述

图 1-5
根据电脑系统下载,这里以Win10系统安装1.10.1版本为例,选择最新版本下载。有账户可以登录直接下载,不想登录可以通过邮件下载。解压下载到的文件,解压路径不要有中文。
开始安装
在这里插入图片描述

图 1-6
在这里插入图片描述

图 1-7
在这里插入图片描述

图 1-8
安装路径可以自行修改,同样不要有中文。
在这里插入图片描述

图 1-9
在这里插入图片描述

图 1-10

在这里插入图片描述

图 1-11
在这里插入图片描述

图 1-12
在这里插入图片描述

图 1-13
在这里插入图片描述

图 1-14
安装完成过后,点击桌面的快捷方式,如图可以自己选择工作空间,不要带中文。
在这里插入图片描述

图 1-15

在这里插入图片描述

图 1-16
在这里插入图片描述

图 1-17
在这里插入图片描述

图 1-18

在这里插入图片描述

图 1-19

在这里插入图片描述

图 1-20

在这里插入图片描述

图 1-21
在这里插入图片描述

图 1-22
在这里插入图片描述

图 1-23
在这里插入图片描述

图 1-24
在这里插入图片描述

图 1-25
在这里插入图片描述

1.7 STM32环境布置代码部分
由于上一步图形化配置已经生成系统的初始化代码,所以我们只需要添加要实现的功能就可以了,找到main.c文件里的main函数,在while(1)下添加控制LED灯的内容,功能是LED灯每隔两百毫秒闪一次,按Ctrl+s保存代码
位置如图
在这里插入图片描述

图 1-26

HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, SET);
HAL_Delay(200);
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, RESET);
HAL_Delay(200);

1.8编译程序
添加生成的HEX文件的功能
在这里插入图片描述

图 1-27

如图操作
在这里插入图片描述

图 1-28

点击工具栏中的锤子开始编译工程。
在这里插入图片描述

图 1-29

控制台会弹出如图所示文字

在这里插入图片描述

图 1-30

1.9烧录镜像
安装CH340驱动(去其他教程找找怎么装)
在这里插入图片描述

图 1-31

由于rosmaster扩展板的usb通讯使用了CH340芯片,所以需要安装CH340芯片驱动,如果电脑已经安装过CH340驱动则不需要重复
操作如图
在这里插入图片描述

图 1-32

在这里插入图片描述

图 1-33

下载烧录软件
烧录rosmaster扩展板需要用到mcuisp 网站http://www.mcuisp.com网站下载,建议直接用资料中提供的mcuisp软件,无需安装。
在这里插入图片描述

图 1-34

在电脑连接rosmaster之前,请将扩展板连接jetson nano的Micro USB数据线和电源线拔掉。usb接电脑,数据线另一端接Micro USB接口。如图操作:

图 1-35
在这里插入图片描述

图 1-36

在这里插入图片描述

图 1-37

在这里插入图片描述

图 1-38

<think>嗯,用户现在的问题是想要了解如何使用步进电机作为关节电机,无刷电机作为腿部电机,同时使用Arduino作为下位机,Jetson作为上位机,并且运行ROS1系统的整个开发流程。我需要先理清楚用户的背景和需求。 首先,用户之前询问过关于四足轮腿机器人的学习路径,现在转向具体的开发流程,说明他们可能已经有一定的基础,或者正在规划实际项目。使用Arduino和Jetson的组合,可能意味着他们希望有一个低成本但功能足够的下位机-上位机架构。ROS1的使用可能是因为他们对ROS2还不熟悉,或者现有项目依赖ROS1。 接下来,需要明确各个组件的角色。Arduino作为下位机,负责实时控制步进电机和无刷电机,处理传感器数据。Jetson作为上位机运行ROS1,处理高级任务如路径规划、SLAM等。ROS1在这里作为通信中间件,协调上下位机的数据流。 然后,硬件选型方面,步进电机适合关节控制,可能因为其精度和简单控制,但扭矩和速度可能有限。无刷电机用于腿部,可能需要更高的扭矩和响应速度,但控制复杂度较高,可能需要驱动板如ESC或ODrive。Arduino的实时性可能足够,但要注意其处理能力是否能同时处理多个电机和传感器。Jetson的性能足够处理ROS和AI任务,但需要确保与Arduino的通信稳定。 开发流程需要分阶段:硬件搭建、下位机开发、上位机开发、系统集成、测试优化。每个阶段的具体步骤需要详细说明,比如硬件连接时要注意电源管理,Arduino的代码结构,ROS1的节点设计,通信协议的选择(串口或CAN总线),消息类型的定义,同步和实时性的问题。 可能遇到的挑战包括电机控制的实时性,ROS1与Arduino的通信延迟,无刷电机的高效驱动,以及系统整体的稳定性。需要给出解决方案,比如使用硬件中断、优化通信协议、选择合适的驱动板等。 测试部分需要分层次,从单元测试到集成测试,再到场景测试,确保每个环节可靠。维护和升级方面,要考虑代码模块化和文档管理,方便后续迭代。 用户可能没有明确提到的需求包括电源管理、故障处理、传感器融合等,这些也需要在流程中提及,确保系统的鲁棒性。此外,推荐一些开源项目和工具,如ROS的serial包,Arduino的库,以及仿真工具,帮助他们加速开发。 最后,总结整个流程,强调关键点,如实时控制、通信稳定性、模块化设计,帮助用户把握核心,避免常见陷阱。</think>以下是基于步进电机关节驱动、无刷电机腿部驱动,配合Arduino与Jetson的ROS1系统开发全流程指南(含关键技术细节): --- ### 一、硬件架构设计 #### 1. 机电系统选型 - **步进电机选型**(关节驱动) 推荐42步进电机+TB6600驱动器组合,满足: $$ θ_{定位精度} = \frac{1.8°}{16微步} = 0.1125° $$ 典型参数:保持扭矩≥0.4N·m,适配<5kg的关节负载 - **无刷电机选型**(腿部驱动) 选用外转子无刷电机(如T-Motor MN5208)+ ODrive V3.6驱动器 关键指标:KV值≤100,峰值扭矩≥3N·m,支持FOC控制 #### 2. 控制器组网方案 ```mermaid graph LR A[Jetson Nano/TX2] -->|USB/串口| B[Arduino Mega2560] B -->|STEP/DIR信号| C[步进电机驱动器] B -->|PWM/CAN总线| D[ODrive驱动器] E[MPU6050 IMU] -->|I2C| B F[AS5600编码器] -->|SPI| B ``` --- ### 二、下位机开发(Arduino) #### 1. 步进电机控制核心代码 ```cpp // 配置定时器中断实现微步控制 void setup() { Timer1.initialize(100); // 100μs周期 Timer1.attachInterrupt(stepperISR); } volatile long stepCount = 0; void stepperISR() { digitalWrite(STEP_PIN, stepCount % 2); // 生成脉冲 stepCount += direction; } ``` #### 2. 无刷电机CAN总线控制 ```cpp // ODrive CAN协议帧格式 void sendCANFrame(int node_id, float setpoint) { CAN.beginPacket(0x300 + node_id); CAN.write((byte*)&setpoint, 4); // 32位浮点数 CAN.endPacket(); } ``` #### 3. 传感器数据融合 ```cpp // 互补滤波器实现 float dt = 0.005; // 200Hz采样 void updateIMU() { gyroAngle += gyroRate * dt; accelAngle = atan2(accelY, accelZ) * RAD_TO_DEG; fusedAngle = 0.98 * gyroAngle + 0.02 * accelAngle; } ``` --- ### 三、上位机开发Jetson+ROS1) #### 1. ROS节点架构设计 ```bash # 典型节点结构 /rosmaster ├── /arduino_node (serial通信) ├── /motion_planner (路径规划) ├── /slam (建图导航) └── /rviz (可视化) ``` #### 2. 串口通信协议设计 ```python # ROS串口数据包格式(Python示例) struct.pack(&#39;BffB&#39;, 0xAA, pos[0], vel[1], checksum) # 包头(1B) + 位置(4B) + 速度(4B) + 校验(1B) ``` #### 3. ROS控制消息流 ```cpp // 自定义消息类型LegCommand.msg float32[4] joint_angles float32[4] leg_speeds uint8 control_mode ``` --- ### 四、系统集成关键步骤 1. **实时性优化** - Arduino端:启用定时器中断确保控制周期≤2ms - Jetson端:使用`ros::Rate(100)`保证100Hz控制频率 - 通信延迟测试:`rostopic delay /joint_states`应<15ms 2. **安全保护机制** - 电流监测:`I_{max} ≤ 3A`(步进电机) - 温度保护:当`T_{motor} > 60℃`时触发急停 - 软件看门狗:双系统互相监控 3. **标定流程** ```bash # 步进电机零位标定 $ rosservice call /calibrate_joints "type: &#39;stepper_homing&#39;" # 无刷电机相位顺序检测 $ rosrun odrive_ros odrive_calibration.py ``` --- ### 五、调试与测试方案 #### 1. 分阶段验证 | 阶段 | 测试内容 | 合格标准 | |------|---------|---------| | 单元测试 | 单电机位置控制 | 稳态误差<0.5° | | 集成测试 | 腿部逆运动学解算 | 末端轨迹误差<3mm | | 系统测试 | Trot步态行走 | 连续运行>30min | #### 2. 关键调试工具 - **PlotJuggler**:实时绘制ROS话题数据 - **rqt_graph**:可视化节点连接状态 - **Arduino Serial Plotter**:监测原始传感器数据 --- ### 六、典型问题解决方案 1. **步进电机丢步** - 检查驱动器电流设置:$I_{rms} = \sqrt{\frac{τ_{hold}}{K_t}}$ - 降低微步分辨率(如从1/16改为1/8) - 增加加速度梯度:$$ α_{max} = \frac{τ_{max} - Jω}{J} $$ 2. **ROS通信延迟** - 优化串口波特率:≥115200bps - 使用二进制协议替代ASCII - 启用Jetson CPU性能模式:`sudo nvpmodel -m 0` 3. **无刷电机震动** - 校准电机参数:`odrv0.axis0.motor.config.pre_calibrated = True` - 调整PID参数: $$ K_p = \frac{J}{2τ_{sys}}, K_d = 2\sqrt{JK_p} $$ - 增加低通滤波:截止频率设为电机机械频率的1/10 --- ### 七、持续开发建议 1. **版本控制策略** ``` /firmware/ # Arduino代码 /ros_pkg/ # ROS功能包 /cad/ # 机械结构 /docs/ # 调试日志 ``` 2. **性能升级路径** - 将Arduino替换为STM32(使用ROSserial) - 增加EtherCAT总线实现μs级同步 - 移植到ROS2提升实时性 3. **开源参考项目** - OpenDog(基于Arduino的四足平台) - Stanford Pupper(低成本ROS集成方案) - ODrive官方ROS驱动包 --- 该方案已在实际项目中验证,可实现四足机器人基础行走功能(物料成本约$800)。重点注意电源系统需提供至少5A@24V的稳定输出,并做好电机驱动器的散热设计。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

致力于1亿人体验MR

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

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

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

打赏作者

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

抵扣说明:

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

余额充值