【立创·泰山派3-RK3576开发板】硬件调试

检查机器人接线

机器人相关的接线必须和图中的一摸一样,相关的链路要求保持一致。

打开 RoboTamerSdk4Qmini/include/user/Motor_thread.hpp 并修改 USB 转四路 485 适配器对应的四个串口 ID,可通过 ls /dev/serial/by-id 查看具体 ID,并将下方代码中 ****** 部分替换为真实 ID,注意如果存在多个串口,注意根据命名规律识别。

std::vector<SerialGroup> serialGroups = {
    {"/dev/serial/by-id/usb-FTDI_USB__-__Serial_Converter_FT******-if03-port0", { 0, 5 }},      // CH4
    {"/dev/serial/by-id/usb-FTDI_USB__-__Serial_Converter_FT******-if02-port0", { 1, 6 }},      // CH3
    {"/dev/serial/by-id/usb-FTDI_USB__-__Serial_Converter_FT******-if00-port0", { 2, 3, 4 }},   // CH1
    {"/dev/serial/by-id/usb-FTDI_USB__-__Serial_Converter_FT******-if01-port0", { 7, 8, 9 }}    // CH2
};

效果:

IMU指定

原有的机器人IMU有问题,我们换成了 N100 型号的IMU,所以我们需要修改 RoboTamerSdk4Qmini 中指定的IMU数据输出口。

打开 ~/RoboTamerSdk4Qmini/include/user/IMU/imu_receiver.py 文件,修改 N100 IMU 对应的 ID,可通过 ls /dev/serial/by-id 查看具体 ID:

将下方代码中 port 替换为真实 ID,注意根据命名规律识别:

权限管理

需要将用到的 /dev 设备全部给予 lckfb 用户访问权限,我们使用 udev 规则实现,这样的话我们就能针对性的对特定规则实现。

  1. 使用 ls -l /dev/serial/by-id 查看相关的接口是什么:

可以看到有以下的对应关系:

  • USB转四路485适配器对应的接口就是 ttyUSB0 ~ ttyUSB3
  • N100 IMU 对应的接口是 ttyUSB4
  1. 创建 /etc/udev/rules.d/99-robot.rules 文件,并写入以下内容:

根据显示信息修改相关参数。因为 USB转四路485适配器N100 IMU 对应的接口就是 ttyUSB0 ~ ttyUSB4 参数一致,只要写一条即可。

KERNEL=="ttyUSB*", MODE="0666"
  1. 使其配置生效:
sudo udevadm control --reload-rules
sudo udevadm trigger

修改通讯接口

打开 ~/RoboTamerSdk4Qmini/source/run_interface.cpp 此文件,需要将 eth0 改为 lo ,使用本地回环进行操作,这样我们就可以方便很多!

这是初始化 DDS 中间件(Unitree 用的是 CycloneDDS),网口只是告诉 DDS 在哪个网络接口上做节点发现和通信。DDS 在这里用于:

  • 手柄/摇杆输入(xRockerGamepad.InitDdsModel()
  • 发布/订阅 rt/lowcmdrt/lowstate 话题(供监控或其他节点用)
lckfb@localhost:~/RoboTamerSdk4Qmini$ git diff /home/lckfb/RoboTamerSdk4Qmini/source/run_interface.cpp
diff --git a/source/run_interface.cpp b/source/run_interface.cpp
index bf9ecdc..2966f0c 100644
--- a/source/run_interface.cpp
+++ b/source/run_interface.cpp
@@ -1,8 +1,8 @@
 #include "user/custom.hpp"

 int main(int argc, char const *argv[]) {
-    std::cout << "Usage networkInterface: " << "eth0 of Q1 robot " << std::endl;
-    std::string networkInterface = "eth0";
+    std::cout << "Usage networkInterface: " << "lo of Q1 robot " << std::endl;
+    std::string networkInterface = "lo";
     G1 g1(networkInterface, false);

     while (true) sleep(10);

关节调零

  1. 断开 Qmini 电源,关节电机绿色指示灯全部熄灭,使用USB线单独给主控电脑(泰山派3M-RK3576)供电
  2. 通过 SSH 登录主控电脑,修改 ~/RoboTamerSdk4Qmini/include/user/Motor_Thread.hpp 文件:
std::array<float, 10> Startq = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

  1. 保存并重新编译
# 进入构建目录
cd ~/RoboTamerSdk4Qmini/build

# 构建项目
cmake -DPLATFORM=arm64 .. && make -j2
  1. 编译完成后,开启 PS4 手柄,连接蓝牙。
  2. 参考 Qmini 手册中的零位标定姿势(双腿外翻并向后扬起,每个关节均达到限位)即可,并牢记以后只要 Qmini 断电,必须摆放至该姿势后再进行上电

  1. 关节上电(机器人保持零位标定姿势不要动!!!
  2. 执行操作(机器人保持零位标定姿势不要动!!!):
  • 切换至 cd ~/RoboTamerSdk4Qmini/bin 目录
  • 运行 sudo ip link set lo multicast on 开启 MULTICAST = DDS 进程互相认识的握手机制
  • 创建日志目录 mkdir -p /home/lckfb/robot-logs
  • 运行 ./run_interface 2>&1 | tee /home/lckfb/robot-logs/tmp_run_interface_$(date +%Y%m%d_%H%M%S).log
  • 待数值趋于稳定后,复制 任意 一组 q 值,例如:

复制 [] 中的数值,注释掉当前 Startq,将复制好的 10 个数,并作为新的 q 值,例如:

也可以查看下日志 /home/lckfb/robot-logs/ ,找到 q 的数值,选择一组数值进行复制。

//std::array<float, 10> Startq = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
std::array<float, 10> Startq = { 0.119672, 0.212419, 0.58618, 0.493727, 0.115964, 0.562708, 0.00526843, 0.476245, 0.0409862, 0.664455 };
  1. 保存,并再次编译:
# 进入构建目录
cd ~/RoboTamerSdk4Qmini/build

# 构建项目
cmake -DPLATFORM=arm64 .. && make -j2
  1. 电机断电,然后电机重新上电(每次开机都要使用上述固定的姿势开机),切换至 cd ~/RoboTamerSdk4Qmini/bin 目录,再次运行 ./run_interface 2>&1 | tee /home/lckfb/robot-logs/run_interface_$(date +%Y%m%d_%H%M%S).log,此时你可以发现新打印的数值,几乎都接近零,代表零位标定完成,例如:
q: -0.00480433  0.00978649  0.00518107  0.00503349  0.00371964  0.00483339 -0.00739716 -0.00747706  0.00818987   0.0111182

  1. 恭喜你,完成了调零,以后每次开机都要使用固定的姿势开机(机器人零位标定姿势示意图)!

测试

  1. 打开 ~/RoboTamerSdk4Qmini/source/user/custom.cpp 将相关的 rpy 输出打开:

  1. 重新编译
# 进入构建目录
cd ~/RoboTamerSdk4Qmini/build

# 构建项目
cmake -DPLATFORM=arm64 .. && make -j2
  1. 将机器人调整至机器人零位标定姿势并且上电,运行程序 cd ~/RoboTamerSdk4Qmini/bin && sudo ./run_interface ,然后我们随意晃动机身,发现 imurpy 跟随机身摇晃,发生对应的变化即通过!

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐