ROS2机器狗平台中,开源做得很好的平台。
注意:
main 18.04
devel 20.04
其中,devel使用ros2 galactic!非常赞!
Xiaomi CyberDog ROS 2 License
CyberDogDog
English
简介 本项目包含小米铁蛋®的ROS 2主要功能包.
基本信息 铁蛋默认用户是mi, 密码为123 使用USB线连接Download接口, 可通过ssh mi@192.168.55.1连接铁蛋进行内部操作 软件架构 我们基于ROS 2实现了大部分的机器人应用, 如架构图所示, 包括多设备链接、多模态感知、多模态人机交互、自主决策、空间定位、导航和目标追踪等功能. 目前使用的DDS中间件是Cyclone DDS, ROS 2的版本为Galactic.
由于NVIDIA对Jetson系列截至目前(202109)只提供了Ubuntu 18.04的支持, 故我们对Ubuntu 18.04进行了ROS 2的适配和修改. 具体的修改内容可以通过mini.repos进行拉取, 我们去除了部分没必要的仓, 并添加了一些需要使用的仓库.
本项目的详细文档都在各个子模块的根目录里, 如有需要可以直接点击进行了解
前置条件 如在目标设备上直接编译, 需要保证已连接互联网. 首选环境是铁蛋, 次选环境是Docker开发环境.
如是前者,需要保证执行如下指令:
apt-get update apt-get install nvidia-l4t-jetson-multimedia-api cuda-compiler-10-2 如是后者, 可以考虑使用arm64的Docker. 我们在未来会支持交叉编译。
大陆地区加速 如果您在,可以使用我们提供的Docker的构建加速和colcon的编译加速
构建Docker时, 可使用docker build -t arm_docker:1.0 . --build-arg gfw=1进行构建镜像, 以提高速度.
使用colcon编译包时, 可在colcon编译的语句最后添加--cmake-args -DBUILD_INSIDE_GFW=ON以获取加速, 如colcon build --merge-install --packages-select sdl2_vendor lcm_vendor mpg123_vendor toml11_vendor --cmake-args -DBUILD_INSIDE_GFW=ON.
构建 & 部署 本项目支持两种构建策略:
最小功能包: 只编译影响整机启动和运动的相关功能包. 基础功能包: 编译本仓(cyberdog_ros2)的全部功能包. 最小功能包 编译方法:
下载cyberdog_ros2. mkdir -p ros_apps/src cd ros_apps/src git clone https://github.com/MiRoboticsLab/cyberdog_ros2.git cd .. 使用--packages-up-to编译(确保source过ROS 2的环境变量)
export OUTPUT_DIR=/opt/ros2/cyberdog colcon build --merge-install --install-base
下载cyberdog_ros2. Download cyberdog_ros2. mkdir -p ros_apps/src cd ros_apps/src git clone https://github.com/MiRoboticsLab/cyberdog_ros2.git cd .. 直接编译所有的包(确保source过ROS 2的环境变量)
export OUTPUT_DIR=/opt/ros2/cyberdog colcon build --merge-install --install-base
通用的部署方式 如果使用的是/opt/ros2/cyberdog路径进行编译, 且环境是铁蛋, 重启机器或服务即可部署完毕.
重启服务的方式:
To restart the service:
$ sudo systemctl restart cyberdog_ros2.service 相关项目 CyberDog_Ctrl:使用GRPC控制铁蛋 相关资源 CyberDogAPP下载链接 铁蛋躯干Step文件 向铁蛋贡献力量! 浏览页面CONTRIBUTING.md了解如何向铁蛋贡献力量!
内核部分:
github.com/MiRoboticsLab/cyberdog_tegra_kernel
Tegra Linux Kernel for CyberDog
[简介] 本项目为L4T的内核代码项目(适用于小米定制的英伟达应用板)。目前版本为Jetpack 4.5,内核版本为4.9.201。
[编译方法] cd到内核代码所在目录后并执行以下命令:
git clone https://github.com/MiRoboticsLab/cyberdog_tegra_kernel.git cd cyberdog_tegra_kernel/kernel/kernel-4.9 ./build.sh
build.sh中make的jobs数量(-jn)可根据个人电脑实际情况进行修改。
github.com/MiRoboticsLab/cyberdog_motor_sdk
电机和惯导部分:
CYBERDOG MOTOR SDK 此SDK开放了电机驱动器和机身IMU传感器接口,配合cyberdog 1.0.0.94及以上版本使用,方便用户进行运动控制的二次开发。具体接口使用可参照Example_MotorCtrl.cpp,按如下步骤在实际机器人上部署运行。
准备工作 安装依赖 安装lcm(本地部署时需要)
git clone https://github.com/lcm-proj/lcm.git cd lcm mkdir build && cd build
按照链接所附步骤进行安装:https://docs.docker.com/engine/install/ubuntu/
# 给docker设置root权限: sudo groupadd docker sudo usermod -aG docker
wget https://cdn.cnbj2m.fds.api.mi-img.com/os-temp/loco/loco_arm64_20220118.tar docker load --input loco_arm64_20220118.tar
ping 192.168.55.100 #本地PC被分配的ip ssh mi@192.168.55.1 #登录nx应用板 ,密码123 mi@lubuntu:~ athena_version -v #核对当前版本>=1.0.0.94
$ ssh root@192.168.55.233 #登录运动控制板 root@TinaLinux:~# cd /robot root@TinaLinux:~# ./initialize.sh #拷贝出厂代码到可读写的开发区(/mnt/UDISK/robot-software),切换到开发者模式,仅需执行一次 root@TinaLinux:~# vi /mnt/UDISK/robot-software/config/user_code_ctrl_mode.txt #切换mode:1(0:默认模式,1用户代码控制电机模式),重启机器人生效 编译及部署 1、用户电脑侧部署 运行在用户pc侧(linux)难以保证实时lcm通信,仅推荐编译验证和简单的位控测试
ping 192.168.55.233 #通过type c线连接Cyberdog的Download接口后,确认通信正常 ifconfig | grep -B 1 192.168.55.100 | grep "flags"| cut -d ':' -f1 #获取该ip对应网络设备,一般为usb0 sudo ifconfig usb0 multicast #usb0替换为上文获取的168.55.100对应网络设备,并配为多播 sudo route add -net 224.0.0.0 netmask 240.0.0.0 dev usb0 #添加路由表,usb0对应替换 mkdir build && cd build #进入sdk代码仓后 make -j4 ./Example_MotorCtrl 注:lcm通信若不成功,无法正常激活电机控制模式,log提示:Motor control mode has not been activated successfully
2、铁蛋NX应用板部署 因非实时系统,仅推荐编译验证和简单位控测试
scp -r {sdk_path}/cyberdog_motor_sdk mi@192.168.55.1:/home/mi/ #sdk源码拷入应用板,密码123 ssh mi@192.168.55.1 #登录应用板 mi@lubuntu:~ cd /home/mi/cyberdog_motor_sdk mi@lubuntu:~ mkdir build && cd build mi@lubuntu:~ cmake .. mi@lubuntu:~ make -j2 mi@lubuntu:~ ping 192.168.55.233 #测试和运控板的通信 mi@lubuntu:~ ./Example_MotorCtrl 3、铁蛋运控板交叉编译部署 为了能使编译的文件可以直接在机器人上运行,需要在部署交叉编译工具链的docker镜像环境下编译,具体步骤如下:
$ docker run -it --rm --name cyberdog_motor_sdk -v /home/xxx/{sdk_path}:/work/build_farm/workspace/cyberdog cr.d.xiaomi.net/athena/athena_cheetah_arm64:2.0 /bin/bash [root:/work] # cd /work/build_farm/workspace/cyberdog/ #进入docker系统的代码仓 [root:/work/build_farm/workspace/cyberdog] # mkdir onboard-build && cd onboard-build [root:/work/build_farm/workspace/cyberdog] # cmake -DCMAKE_TOOLCHAIN_FILE=/usr/xcc/aarch64-openwrt-linux-gnu/Toolchain.cmake .. [root:/work/build_farm/workspace/cyberdog] # make -j4 #指定交叉编译工具链并编译 [root:/work/build_farm/workspace/cyberdog] # exit 编译成功后, 将生成的.so文件libcyber_dog_sdk.so和可执行文件Example_MotorCtrl拷贝到运控/mnt/UDISK目录下
cd ~/{sdk_path}/onboard-build ssh root@192.168.55.233 "mkdir /mnt/UDISK/cyberdog_motor_sdk" #在运控板内创建文件夹 scp libcyber_dog_motor_sdk.so Example_MotorCtrl root@192.168.55.233:/mnt/UDISK/cyberdog_motor_sdk ssh root@192.168.55.233 root@TinaLinux:~# cd /mnt/UDISK/cyberdog_motor_sdk root@TinaLinux:~# export LD_LIBRARY_PATH=/mnt/UDISK/cyberdog_motor_sdk #设置so库路径变量 root@TinaLinux:~# ./Example_MotorCtrl #通过“nohup ./Example_MotorCtrl &”可后台运行,退出ssh连接不受影响 如何添加开机自启动: 配置/mnt/UDISK/manager_config/fork_para_conf_lists.json 进程管理文件(注意结尾逗号)后重启运控程序 例: "600003": {"fork_config":{"name": "Example_MotorCtrl", "object_path": "/cyberdog_motor_sdk/", "log_path": "", "paraValues": ["", "", ""] }} 注:手动关闭程序时,请先关闭用户程序Example_MotorCtrl,触发主程序(ctrl)超时保护趴下,再关闭或重启主程序。同时关闭主程序和用户程序,电机会因CAN总线超时位置锁定,再次启动易发生危险。
错误标志位含义 //bit0: warning flag, lost communication between user code and robot over 10[ms]. For safety, commanded tau and qd_des will be forced to divide by (over_time[ms]/10.0); //bit1: error flag, lost communication between user code and robot over 500[ms]. Robot will enter high-damping mode by setting joint gains kp=0, kd=10, tau=0; //bit2: warning flag, position command of any abaduction joint changing more than 8 degrees from its previous will be truncated; //bit3: warning flag, position command of any hip joint changing more than 10 degrees from its previous will be truncated; //bit4: warning flag, position command of any knee joint changing more than 12 degrees from its previous will be truncated; 注:为了避免通信超时导致危险,报err_flag: 0x02 communicate lost over 500ms后先排除故障,关闭Example_MotorCtrl例程进程,再重启运控程序或者直接重启运控板才能清除错误.
# 重启运控程序: ssh root@192.168.55.233 "ps | grep -E 'Example_MotorCtrl' | grep -v grep | awk '{print ssh root@192.168.55.233 "ps | grep -E 'manager|ctrl|imu_online' | grep -v grep | awk '{print ssh root@192.168.55.233 "export LD_LIBRARY_PATH=/mnt/UDISK/robot-software/build;/mnt/UDISK/manager /mnt/UDISK/ >> /mnt/UDISK/manager_log/manager.log 2>&1 &" # 重启运控板系统: