该仓库目前已经迁移至 cyberdog_ros2,本仓库不再更新。
本项目是铁蛋的ROS 2应用程序的主仓,支持单独构建和与其他辅仓库共同构建。辅仓库可参考相关项目了解更多。
我们基于ROS 2实现了大部分的机器人应用,如架构图所示,包括多设备链接、多模态感知、多模态人机交互、自主决策、空间定位、导航和目标追踪等功能。目前使用的DDS中间件是Cyclone DDS
,ROS 2的版本为Foxy
。
graph LR
AndroidAPP---|Bluetooth|ROS2_Bluetooth_Bridge
AndroidAPP---|WiFi&GRPC|ROS2_GRPC_Bridge
AndroidAPP---|WiFi&RTSP|ROS2_Live_Stream
ROS2_GRPC_Bridge---DDS
ROS2_Live_Stream---|SHM|ROS2_Camera
ROS2_Camera---|SHM|ROS2_Vision
ROS2_Camera---DDS
ROS2_Vision---DDS
MCU_Driver_LED---|CAN|ROS2_LEDServer---DDS
MCU_Driver_Ultrasonic---|CAN|ROS2_ObstacleDetection---DDS
MCU_Driver_TOF---|CAN|ROS2_BodyStateDetection
MCU_Driver_Mag_AK---|CAN|ROS2_BodyStateDetection
MCU_Driver_Gyro&Acc_LSM---|CAN|ROS2_BodyStateDetection---DDS
MCU_Driver_OpticalFlow---|CAN|ROS2_BodyStateDetection
MCU_Driver_LightSensor---|CAN|ROS2_LightSensor---DDS
ROS2_AudioAssitant---DDS
ROS2_TouchDetection---DDS
ROS2_Realsense---DDS
DDS---ROS2_BatteryManager
DDS---ROS2_VoiceCMD
DDS---ROS2_RemoteCMD
DDS---ROS2_DecisionMaker
DDS---ROS2_Localization
DDS---ROS2_Mapping
DDS---ROS2_Navigation
DDS---ROS2_Tracking
ROS2_DecisionMaker---|Ethernet&LCM|MIT_Ctrl
ROS2_BatteryManager---|Ethernet&LCM|Manager
由于NVIDIA对Jetson系列截至目前(202109)只提供了Ubuntu 18.04的支持,故我们对Ubuntu 18.04进行了ROS 2的适配和修改。具体的修改内容可以通过ros2_fork/mini.repos进行拉取,我们去除了部分没必要的仓,并添加了一些需要使用的仓库(文件是Galcatic版本的,我们会在后续适配到该版本)。
本项目的详细文档都在各个子模块的根目录里,如有需要可以直接点击进行了解:
-
通用类:
- athena_bringup:启动系统相关,我们在ROS 2的Launch启动系统上设计了更简约的启动项管理,对启动脚本(Python3)和启动内容进行了隔离。通过简单的参数配置,新的节点或新的进程便可被添加到启动项,而无需修改脚本内容。同时也支持参数管理、调试和开关等功能。
- athena_grpc:机器人与外部通讯的媒介,目前与手机App进行连接是基于GRPC的。在未来将支持多机识别和多机通讯。
- athena_utils:本项目的通用功能仓,包括基于cascade_lifecycle修改的LifecycleNode基类,和传感器相关节点共用的基类等。
- media_vendor:多媒体相关应用需要使用的
CMake
配置项。 - toml11_vendor:toml11的桥接包。
-
感知类
- athena_bms:CyberDog上的电池管理模块,主要负责电池信息的接收与分发。
- athena_body_state:该模块实现了整机运动状态的感知功能,并通过BodyState上报posequat和speed_vector两种message的数据(posequat表示整机姿态四元数;speed_vector表示整机运动的瞬时速度,单位:m/s)。
- athena_lightsensor:该模块创建了机器人感知系统中Light Sensor的service和publisher,当机器人需要感知周围环境光的强度时,可通过上层决策层启动该service和publisher,获取环境光照度信息。
- athena_obstacledetection:该模块创建了机器人感知系统中Ultrasonic Sensor的service和publisher。
- athena_scenedetection:该模块为机器人提供场景检测功能,通过定位芯片获取当前位置信息,同时通过卫星信号质量判断机器人当前处于室内或室外。
-
交互类:
- athena_audio
- audio_base:该模块用于播放多段或单段不定长PCM音频数据、wav格式音频文件,其底层实现为SDL2与SDL_mixer。
- audio_interaction:该模块用于实现整个音频模块的交互部分,主要包括与其它模块之间关于通用播放的交互、语音助手相关控制与交互功能和与APP(grpc)之间关于音量调解的交互功能。
- athena_camera:该模块基于NVIDIA Argus和ROS 2实现了相机的基础功能,包括拍照和录像等,并为其他模块(视觉SDK、图传等)提供调用接口。
- athena_led:该模块用于统一决策系统所有的LED灯效请求,基于ROS2 Service以及sensor_utils类实现,通过定义不同client的LED消息优先级以及timeout来实现对CyberDog头灯和尾灯的控制显示功能。
- athena_livestream
- athena_touch:该模块提供了topic为TouchState的publisher, 继承于athena_utils::LifecycleNode. 目前支持单指单击报LPWG_SINGLETAP_DETECTED 和单指长按3s报LPWG_TOUCHANDHOLD_DETECTED事件。
- athena_wireless
- athena_audio
-
决策类:
- athena_decisionmaker:面向业务层,负责实现具体业务功能。目前提供了
automation_manager
、ception_manager
、interaction_manager
和motion_manager
。分别用于自动化功能、感知功能、人机交互功能和运动功能的管理和决策。该四个模块均继承cascade_manager
,并在基础上根据业务功能稍作改动。 - athena_decisionutils:决策相关功能的基类和工具类集合,负责实现通用功能。目前提供了
cascade_manager
,该模块继承于athena_utils::LifecycleNode
,具备级联/并联和单点控制的功能,可以快速管控其作用域下的节点的启动和关闭。
- athena_decisionmaker:面向业务层,负责实现具体业务功能。目前提供了
-
接口类:
- athena_interfaces:接口总抽象包。
- automation_msgs:自动化功能相关接口。
- cascade_lifecycle_msgs:级联节点相关接口。
- ception_msgs:感知功能相关接口。
- interaction_msgs:交互功能相关接口。
- motion_msgs:运动功能相关接口。
如在交叉环境进行编译,可参考交叉编译铁蛋源码进行了解环境的配置。
如在目标设备上直接编译,需要保证已连接互联网。首选环境是铁蛋,次选环境是NVIDIA Jetson系列
的开发环境。
如是后者,需要保证安装:
- ROS 2(Foxy):最小必须。并且需要至少包含mini.repos中的功能包。
- LCM:最小必须。可通过下载源码编译安装。
- mpg123,SDL2和SDL2_Mixer:基础必须。最好通过源码安装,并确保按照前面所写的顺序编译安装。
- NV相关库:基础必须。可
nvidia-l4t-jetson-multimedia-api
和cuda-compiler-10-2
。 - OpenCV、VTK、PCL和相关的ROS 2桥接包等,参考extend.repos和custom.repos
本项目支持三种构建策略:
- 最小功能包:只编译影响整机启动和运动的相关功能包。
- +=基础功能包:编译本仓(athena_cyberdog)的全部功能包。
- +=扩展功能包:编译本仓与相关扩展仓的全部功能包。
编译方法:
- 下载
athena_cyberdog
和athena_lcm_type
。
$ mkdir -p ros_apps/src
$ cd ros_apps/src
$ git clone https://partner-gitlab.mioffice.cn/cyberdog/athena_cyberdog.git
$ git clone https://partner-gitlab.mioffice.cn/cyberdog/athena_lcm_type.git
$ cd ..
- 使用
--packages-up-to
编译(确保source过ROS 2的环境变量)
$ colcon build --merge-install --packages-up-to athena_bringup
或者,编译到指定目录,注意:如有需要请替换/opt/ros2/cyberdog
的值为其他。
$ export OUTPUT_DIR=/opt/ros2/cyberdog
$ colcon build --merge-install --install-base $OUTPUT_DIR --packages-up-to athena_bringup
编译方法:
- 下载
athena_cyberdog
和athena_lcm_type
。
$ mkdir -p ros_apps/src
$ cd ros_apps/src
$ git clone https://partner-gitlab.mioffice.cn/cyberdog/athena_cyberdog.git
$ git clone https://partner-gitlab.mioffice.cn/cyberdog/athena_lcm_type.git
$ cd ..
- 直接编译所有的包(确保source过ROS 2的环境变量)
$ colcon build --merge-install
或者,编译到指定目录,注意:如有需要请替换/opt/ros2/cyberdog
的值为其他。
$ export OUTPUT_DIR=/opt/ros2/cyberdog
$ colcon build --merge-install --install-base $OUTPUT_DIR
- 下载
athena_cyberdog
、athena_lcm_type
、athena_assitant
、athena_automation
和athena_vision
。
$ mkdir -p ros_apps/src
$ cd ros_apps/src
$ git clone https://partner-gitlab.mioffice.cn/cyberdog/athena_cyberdog.git
$ git clone https://partner-gitlab.mioffice.cn/cyberdog/athena_lcm_type.git
$ git clone https://partner-gitlab.mioffice.cn/cyberdog/athena_assistant.git
$ git clone https://partner-gitlab.mioffice.cn/cyberdog/athena_automation.git
$ git clone https://partner-gitlab.mioffice.cn/cyberdog/athena_vision.git
$ cd ..
- 直接编译所有的包(确保source过ROS 2的环境变量)
$ colcon build --merge-install
或者,编译到指定目录,注意:如有需要请替换/opt/ros2/cyberdog
的值为其他。
$ export OUTPUT_DIR=/opt/ros2/cyberdog
$ colcon build --merge-install --install-base $OUTPUT_DIR
如果使用的是/opt/ros2/cyberdog
路径进行编译,且环境是铁蛋,重启机器或服务即可部署完毕。
重启服务的方式:
$ sudo systemctl restart cyberdog_ros2.service
补充:如果编译了扩展功能包
,还需要执行
$ sudo systemctl restart cyberdog_automation.service
- 语音助手:基于小米小爱同学的语音助手的ROS 2桥接包。
- 视觉检测&识别:基于小米AI计算机视觉的人脸、手势和人体检测和识别的ROS 2桥接包。
- 定位&导航&跟踪:基于ROS 2的自动化功能包,包括定位、导航和跟踪等功能包。
浏览页面CONTRIBUTING.md了解如何向铁蛋贡献力量!