Skip to content

常见问题解答

This content is not available in your language yet.

【重要】为什么放在 ORIN 上的二开程序会被自动删除?

Section titled “【重要】为什么放在 ORIN 上的二开程序会被自动删除?”

V0.7 及以上的版本 disk monitor 模块会自动清理用户目录下修改时间超过 24h 的文件,可以将文件放在 /agibot/data/home/agi/Desktop 下面,该文件夹为白名单文件夹,不会被 disk monitor 模块清理。

如何确认机器为 T3 机器还是 P1 机器?

Section titled “如何确认机器为 T3 机器还是 P1 机器?”

T3 和 P1 是硬件型号,有部分硬件差异,相应的软件也有一定差异。

可以通过在 ORIN 上执行 cat /etc/bsp_version 来确认,找不到该文件则说明是 T3 机型,有该文件则说明是 P1 机型。

不可以,修改系统依赖会导致机上原有软件模块无法运行,且不提供任何相关支持保障。

系统依赖遭修改后可能无法恢复,此时若要恢复机上原有环境需要返厂刷机。

在 ORIN 上部署程序需要安装某些依赖的情况下,有两种方式:

  1. 利用原有的 ORIN 环境,程序中的依赖都使用源码依赖
  2. Python 程序使用虚拟环境,其他语言使用容器,与宿主机的系统环境进行隔离,避免修改系统依赖

支持自行开发运控程序替换机上运控程序吗?

Section titled “支持自行开发运控程序替换机上运控程序吗?”

自行开发运动控制程序需要有运控相关开发经验,门槛较高,不建议自行开发。

如因科研等用途需要自行开发运控程序,请联系相应商务详谈。注意如若替换运动控制程序,则机器人所有自带的运动相关功能将不可用,请谨慎考虑,且因此造成的摔机和损坏等情形不在保修范围内。

是否可以使用 ROS2 直接进行控制?

Section titled “是否可以使用 ROS2 直接进行控制?”

可以的,高层控制接口(RPC)仍需通过 HTTP 协议调用,底层运动控制和传感器数据获取都可以通过 ROS2 进行开发。

为什么在 ORIN 上收不到 ros2 后端发布的话题?

Section titled “为什么在 ORIN 上收不到 ros2 后端发布的话题?”

在 ORIN 上运行 ROS2 示例前需要设置如下环境变量:

Terminal window
source /opt/ros/humble/setup.bash
export ROS_DOMAIN_ID=232
export ROS_LOCALHOST_ONLY=0
export FASTRTPS_DEFAULT_PROFILES_FILE=/agibot/software/v0/entry/bin/cfg/ros_dds_configuration.xml

一般情况下,请不要修改上述 dds 配置文件,其他配置未经测试,无法保证机上模块间通信正常。

ROS2 话题的默认 qos 设置为

history: keep_last
depth: 10
reliability: best_effort

请在接收和发送对应 topic 时调整 qos 保持一致,避免出现 qos 不兼容导致的无法通信问题。

为什么在个人开发 PC 上收不到机器人的 ROS2 话题?

Section titled “为什么在个人开发 PC 上收不到机器人的 ROS2 话题?”

为保证机器人 ROS2 通信稳定性,机上 ROS2 流量默认限制在机器人 ORIN 和 x86 开发板之间,无法从机器人外部获取。

如实在需要从个人开发 PC 上获取机器人 ROS2 话题,可以参考如下步骤:

  1. PC 需要调整到 192.168.2.0/24 网段并通过网线连接上机器人后侧左边网口,对应 ORIN 的网络调试口,连接上之后要能 ping 通 192.168.2.50,否则无法进行通信

  2. PC 上需要安装 ROS2 humble 版本

  3. 备份 ORIN 上的 /agibot/software/v0/entry/bin/cfg/ros_dds_configuration.xml/agibot/software/v0/entry/bin/cfg/privileged_ros_dds_configuration.xml 文件

    Terminal window
    cp /agibot/software/v0/entry/bin/cfg/ros_dds_configuration.xml /agibot/software/v0/entry/bin/cfg/ros_dds_configuration.xml.backup
    cp /agibot/software/v0/entry/bin/cfg/privileged_ros_dds_configuration.xml /agibot/software/v0/entry/bin/cfg/privileged_ros_dds_configuration.xml.backup
  4. ORIN 上修改 /agibot/software/v0/entry/bin/cfg/ros_dds_configuration.xml/agibot/software/v0/entry/bin/cfg/privileged_ros_dds_configuration.xml,将二者 interfaceWhitelist 列表中添加一个 192.168.2.50,添加完成后对应代码片段如下。

    <interfaceWhitelist>
    <address>192.168.100.110</address>
    <address>192.168.2.50</address>
    </interfaceWhitelist>
  5. 在 PC 上执行以下命令,预期可以收到机器人 ORIN 上发布的 ROS2 话题。

    Terminal window
    source /opt/ros/humble/setup.bash
    export ROS_DOMAIN_ID=232
    export ROS_LOCALHOST_ONLY=0
    ros2 topic list

以上方法未经大范围使用测试,仅供开发调试使用,使用时机器人务必带保护,不允许在生产环境中使用该配置。

ORIN 上的容器如何与 ORIN 宿主机进行 ROS2 通信?

Section titled “ORIN 上的容器如何与 ORIN 宿主机进行 ROS2 通信?”
  1. 创建容器时将 ipc 通信和 net 与主机共享,添加如下选项

    Terminal window
    --ipc=host --net=host
  2. 将 ORIN 上 /agibot/software/v0/entry/bin/cfg/ros_dds_configuration.xml 拷贝到容器中

  3. 在容器内 echo 或者接受数据之前执行以下命令(注意 dds 配置文件路径需要替换为实际路径)

    Terminal window
    source /opt/ros/humble/setup.bash
    export ROS_DOMAIN_ID=232
    export ROS_LOCALHOST_ONLY=0
    export FASTRTPS_DEFAULT_PROFILES_FILE=/path/to/ros_dds_configuration.xml
  4. 在容器内执行以下命令,预期可以收到机器人 ORIN 上发布的 ROS2 话题。

    Terminal window
    ros2 topic list
  1. http 接口调用失败,通过返回值和现象排查

    • 如果拒绝连接可能是 IP 、PORT、URL 填写错误
    • 确认 IP、PORT、URL 均无问题且拒绝连接则可能是相应模块并未启动,此时可能机上有异常或者急停处于 OFF 状态
    • 如果返回 req deserialization failed 则请求体填写可能存在问题
    • 如果返回找不到对应 url 则可能是 url 填写错误
    • 所有的 http 接口都有对应调用示例,请仔细核对代码和调用示例的差异
  2. 运控接口调用问题

    • 先对照接口查看调用码,是否在正确的 Action 下
    • 上身接口调用不动是否在 JOINT_SERVO 模式下(此时需要调用动作播放模块发送 DisableMotionPlayer 接口才能正常运动)
    • 灵巧手接口不动,是否力矩太小,尝试修改 position 和 effort 多尝试几遍。
  3. ros2 相关问题

    • 检查相应环境变量是否加载 (ROS_DOMAIN_ID,ROS_LOCALHOST_ONLY,FASTRTPS_DEFAULT_PROFILES_FILE)
    • qos 是否设置正确
    • topic name 是否填写正确

以上问题排查后仍无法解决,请联系相应技术支持团队。

支持,但需要购买遥操作相关设备,在 AimMaster 上即可录制。

录制好的动作文件需要按照指定方式放置在 x86 上的 /agibot/data/var/rc/custom 目录下。

手臂、头部、灵巧手关节的限位信息都在 运动控制模块文档 中有给出,此处再次列出:

手臂关节限位(仅支持位控,速度、加速度控制请通过发送位置指令的间隔实现,以下速度和加速度限制可作为参考):

关节名称最小角度(rad)最大角度(rad)最大速度绝对值(rad/s)最大加速度绝对值(rad/s^2)
左臂 J1-2.912.913.006.28
左臂 J2-0.461.603.006.28
左臂 J3-2.912.913.006.28
左臂 J4-2.00-0.033.006.28
左臂 J5-2.942.943.006.28
左臂 J6-0.450.453.006.28
左臂 J7-0.350.353.006.28
右臂 J1-2.912.913.006.28
右臂 J2-1.600.463.006.28
右臂 J3-2.912.913.006.28
右臂 J40.032.003.006.28
右臂 J5-2.942.943.006.28
右臂 J6-0.450.453.006.28
右臂 J7-0.350.353.006.28

头部关节限位(仅支持位控):

关节名称最小角度(rad)最大角度(rad)
neck_shake-0.7850.785
neck_nod-0.4010.401

灵巧手关节限位(支持位控和力控,左右手关节限位相同):

关节名称最小位置最大位置最小力矩(g)最大力矩(g)
大拇指 1 关节0200005700
大拇指 2 关节0200005700
食指0200005700
中指0200005700
无名指0200005700
小拇指0200005700
  1. 不允许在 x86 开发板上部署程序

    • x86 上运行着运控软件,在 x86 上部署程序可能因操作系统调度、CPU 负载、内存占用等因素导致运控程序异常,从而造成机器人出现异常甚至摔倒等情形。
  2. 简单二次开发程序

    • 调用基本 RPC 接口进行高层控制,基于智元软件、算法进行展厅导览、语音交互等功能的开发程序
    • 推荐部署在三方电脑(如笔记本电脑)或开发板上,并使用 HTTP 协议进行调用
  3. 复杂二次开发程序(具身操作、交互智能等)

    • 需要调用 Channel 接口进行数据获取和机器人持续控制等,开发具身 AI 算法等
    • 推荐部署在 orin 开发板上或三方工控机上,如部署在 ORIN 上,ORIN 上本身环境不可修改,python 程序可使用虚拟环境进行隔离,C++ 等语言需要安装 docker 对环境进行隔离
    • 此时 RPC 接口仍然使用 HTTP 协议进行调用,Channel 接口使用 ROS2 进行调用

为什么调用头部、手臂、灵巧手进行运动时不生效?

Section titled “为什么调用头部、手臂、灵巧手进行运动时不生效?”

当运动控制模块处于 JOINT_SERVO 模式,上半身控制会被动作播放模块接管。

在 V0.6 及以上的软件版本中,动作播放模块只会在运动控制模块处于 JOINT_SERVO 模式时才会持续对机器人的头部、手臂和灵巧手发送命令,因此在其他模式下不会出现动作播放模块抢占头部、手臂和灵巧手控制接口的情况。

如果仍想暂停动作播放模块对机器人的头部、手臂和灵巧手发送命令,可以调用动作播放模块的 DisableMotionPlayer 接口。

Terminal window
curl -i \
-H 'content-type:application/json' \
-H 'timeout: 1000' \
-X POST http://192.168.100.100:56444/rpc/aimdk.protocol.MotionCommandService/DisableMotionPlayer \
-d '{}'

手臂的 SE3 位姿控制需要位于 PLANNING_MOVE 模式下才可以正常被调用,调用该接口无需关闭动作播放模块。

【不推荐】如何修改默认传感器话题的帧率和分辨率?

Section titled “【不推荐】如何修改默认传感器话题的帧率和分辨率?”

修改该配置会导致机器人感知避障导航等所有依赖相机数据的模块不可用,且不提供任何相关支持保障。

  1. 首先备份相关配置文件,以便恢复
Terminal window
cd /agibot/software/v0/config/hal_sensor
cp a2_t2_sensor.yaml a2_t2_sensor.yaml.backup
  1. 修改 /agibot/software/v0/config/hal_sensor/a2_t2_senor.yaml 中相应相机 width height fps 参数组,只能改这三个参数

  2. 重启 hal_sensor 模块

aima em stop-app hal_sensor
aima em start-app hal_sensor

相机 width height fps 只支持固定参数组,参数组获取方法如下:

在上述步骤二中将某个相机的 height 改为原有值 +1,然后重启 hal_sensor

Terminal window
cat /agibot/log/hal_sensor/hal_sensor.log

往上翻找到对应的三元组表格如下: 相机三元组表格

针对 pb:/aimdk.protocol.MotionCommandService/SendMotionCommand 接口,传入的 motion_id 参数不正确的情况下会导致此问题,一个正确的参数应该类似以下:

Terminal window
/agibot/data/resources/default/motion/motion_player/default/演讲10s/演讲10s

各个数据的时间戳是硬件时间戳还是 ROS2 时间戳?

Section titled “各个数据的时间戳是硬件时间戳还是 ROS2 时间戳?”
  1. 运控模块发布的关节状态时间戳为收到嵌入式消息时的系统时间戳
  2. 下巴 realsense d415 打的是帧捕捉时的时间戳
  3. 胯部 orbbec 打的是 hal_sensor 模块 pub 的 system clock 时间戳
  4. 鱼眼相机分为 t3 机型和 p1 机型
    1. t3 机型为 xinying 相机,使用系统时间减 1/2 曝光时间,即为曝光中心时刻估计值
    2. p1 机型为森云相机,使用 camera 模块从相机 SDK 收到相机图像的时间

如何获取机器人在地图上的位置?

Section titled “如何获取机器人在地图上的位置?”

前置知识:需要了解 slam 的栅格地图,对应像素坐标。

  1. 从 pb:/aimdk.protocol.MappingService/Get2DWholeMap 接口获取地图相关的信息,如下图所示: 地图信息 其中 origin_x, origin_y 为建图时的原点,可以理解为世界坐标系的原点
  2. 从 /tf 中获取 map 到 base_link 的变换,也就是世界坐标,如下图所示: tf 消息
  3. 采用如下公式可以计算该世界坐标在像素坐标中的值:
pixel_x = origin_x + x * resolution
pixel_y = origin_y - y * resolution

注意世界坐标的 y 值前有一个负号,因为世界坐标和像素坐标的 y 轴方向相反。

ORIN 上如何使用 cuda 版本 pytorch?

Section titled “ORIN 上如何使用 cuda 版本 pytorch?”

ORIN 需要使用 Nvidia 专门的工具链编译的 torch 才能使用,Nvidia 官方社区有提前编译好的二进制 whl 包可以安装,链接地址:https://forums.developer.nvidia.com/t/pytorch-for-jetson/72048

T3 机型使用的麦克风为讯飞套件中的线性 4 mic,对应文档地址为:https://aiui-doc.xf-yun.com/project-2/doc-395/

在 ORIN 上使用以下命令即可连接到讯飞开发板

Terminal window
adb connect 192.168.2.74:5555

P1 机型使用同样的麦克风设备,P1 机型无讯飞开发版,麦克风直接插在 ORIN 上,可在 ORIN 上的音频设备中找到。

不过不建议直接使用麦克风,可以使用语音交互的二开接管模式获得经本体降噪和 VAD 后的语音,具体请参考 语音交互模块文档

在机器人背面铭牌,AimMaster 关于页面均可查询。

如未找到可在 ORIN 上执行以下命令查询:

Terminal window
cat /agibot/data/info/sn

【谨慎】如何关闭 ORIN 上智元程序,释放机器资源供二次开发使用?

Section titled “【谨慎】如何关闭 ORIN 上智元程序,释放机器资源供二次开发使用?”

如果希望临时关闭某些进程可以通过 aima em stop-app xxx 来关闭(其中 xxx 为模块名,可在 /agibot/software/v0/entry/bin/cfg/run_agibot.yaml/agibot/software/v0/entry/bin/cfg/sm.yaml 中找到)。

如果上述方法不生效或者希望永久关闭某些智元程序,可以通过修改 ORIN 上的配置文件 /agibot/software/v0/entry/bin/cfg/run_agibot.yaml/agibot/software/v0/entry/bin/cfg/sm.yaml 来配置关闭某些智元程序的自动拉起,重启后生效。

以下步骤以关闭智元交互的 interaction 模块为例,其他模块关闭方式类似。模块关闭后相应功能即无法使用,请谨慎操作,iox_roudi 和 sm 模块请勿关闭。

  1. 首先备份以上文件,方便恢复,建议在拷贝复制的基础上将以上文件拉取到本地额外存储一份

    Terminal window
    cp /agibot/software/v0/entry/bin/cfg/run_agibot.yaml /agibot/software/v0/entry/bin/cfg/run_agibot.yaml.backup
    cp /agibot/software/v0/entry/bin/cfg/sm.yaml /agibot/software/v0/entry/bin/cfg/sm.yaml.backup
  2. 修改 /agibot/software/v0/entry/bin/cfg/run_agibot.yaml 文件,将其中 default_apps 中的 interaction 注释掉(如果要关闭的模块不在 default_apps 中则只需修改 sm.yaml 文件) 移除 interaction

  3. 修改 /agibot/software/v0/entry/bin/cfg/sm.yaml 文件,将其中功能组中的 interaction 移除。 移除 interaction

  4. 重启机器人生效

手臂关节电机上报超速异常,如何处理?

Section titled “手臂关节电机上报超速异常,如何处理?”

alt text 原因:调用手臂接口时,传入的位置和当前位置存在一定阶跃,导致电机过速引发限流,此时嵌入式底层会对关节进行失能保护,并同步上报告警。 解决办法:一般情况下重启机器人即可恢复,为避免此问题,调用手臂 Channel 接口时,请将关节位置进行滤波和平滑后传入,确保传入值与当前状态不存在较大阶跃。