当前位置: 首页 > news >正文

Apollo Auto:Cyber RT 与 ROS 通信

1.背景

完成dreamView的启动后,我们需要定制化的录制和debug我们自己的车辆,此时需要修改他们之间的通信,Apollo Auto新版本cyber对框架进行了改造,支持了cyber与ros的通信。具有以下功能亮点:

实现常用消息的转换功能,低成本即开即用:

新版本的cyber打通了部分常用传感器的消息通信,实现了相应消息转换功能,包括点云、IMU等消息格式,关心这部分消息通信的用户只需在配置中对齐两端的channel,启动即可使用

插件化的消息转换框架,提升开发效率:

如果用户还想实现除上述消息以外的消息通信,新版本cyber还提供了基于插件化的消息转换框架,用户无需关心cyber和ros的通信接口,只需实现消息转换函数,配置好对应的channel,就能在Apollo各模块中接收由ros发送出来的消息,进一步提升开发效率

在新的 cyberRT 版本中,打平了通信中间件的版本,开发了 ros-bridge 适配了 ros 2 的通信接口,实现了 消息从 cyber 到 ros_bridge 到 ros 的通路,以及从 ros 到 ros_bridge 到 cyber 的通路:
在这里插入图片描述

除了依赖打平和接口适配以外,由于 Apollo 的消息与 ros 消息定义的不同,用户使用 ros bridge 的时候是逃不开相互之间的消息转换逻辑的。而这部分消息转换代码与 cyber 的通信接口、ros 的 rclcpp 接口强耦合,学习成本高,易用性低,并且难以维护。因此,我们基于 Apollo 9.0 中的 cyber 插件机制,解耦消息转换逻辑与 ros_bridge 内部运行逻辑:
在这里插入图片描述

下面我们先把ros bridge部署起来

2.ros bridge部署

首先要求我们能够正常的将Apollo Auto10.0安装好,未安装的请移步至:《Apollo Auto10.0安装教程》

安装cyber源码

buildtool install cyber

配置ros环境

buildtool rosenv -t # -t 指的是使用清华源

如果没有安装清华源的可以使用以下指令:

sudo sh -c 'echo "deb https://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu jammy main" > /etc/apt/sources.list.d/ros2.list'

执行source ros的脚本,这一步你会遇到第一个坑

source /opt/ros/iron/setup.sh    # 如果您的ubuntu是22.04
source /opt/ros/galactic/setup.sh # 如果您的ubuntu是20.04

具体是执行source /opt/ros/iron/setup.sh 还是source /opt/ros/humble/setup.sh
需要先通过指令:

ls /opt/ros

在这里插入图片描述

注意:如果你这里像我一样有两个不同的版本,推荐卸载掉humble,因为我已经通过iron执行成功,humble我还未尝试

卸载方法:

sudo apt remove --purge ros-humble-*
sudo rm -rf /opt/ros/humble
sudo apt autoremove
source /opt/ros/iron/setup.sh

在这里插入图片描述

在这里插入图片描述

如果不卸载的话,其源码里(/apollo_workspace/application-core/tools/ros/ros_configure.bzl)会强制失败
在这里插入图片描述

执行编译:

sudo buildtool build -p cyber

如果出现:[WARNNING] missing dynamic library in ld, try refreash ld cache
在这里插入图片描述

那是因为环境变量不对,可以执行:

echo "/opt/ros/$ROS_DISTRO/lib" | sudo tee /etc/ld.so.conf.d/ros-iron.conf

然后把之前编译的资源清掉

sudo buildtool clean 
sudo rm -rf ~/.cache/bazel/ 

再次编译:

sudo buildtool build -p cyber

在这里插入图片描述

3.分场景使用 cyber 中的 ros_bridge 程

这块我还没去跟着走一遍,所以后面再回来更新,如果有跟着做完的大佬们,可以在评论区教我一下,感谢

相关文章:

  • 面试心得 --- 车载诊断测试常见的一些面试问题
  • LMT86LP模拟温度传感器
  • Mobile App UI自动化locator
  • 【websocket】安装与使用
  • Simplicity studio SDK下载和安装,创建工程
  • 《如何使用MinGW-w64编译OpenCV和opencv_contrib》
  • 如何通过外网访问内网?哪个方案比较好用?跨网远程连接网络知识早知道
  • 开关机、重启、改密、登录:图解腾讯云CVM日常管理核心操作,轻松掌控你的云主机
  • linux 故障处置通用流程-36计-14-27
  • 【计算机网络】NAT、代理服务器、内网穿透、内网打洞、局域网中交换机
  • centos实现SSH远程登录
  • 拆解实战案例:电商ERP管理系统从需求到原型全流程设计
  • 构建云原生安全治理体系:挑战、策略与实践路径
  • Python Rio 【图像处理】库简介
  • 【图像处理3D】:世界坐标系
  • 【深尚想】OPA855QDSGRQ1运算放大器IC德州仪器TI汽车级高速8GHz增益带宽的全面解析
  • flutter 中Stack 使用clipBehavior: Clip.none, 超出的部分无法响应所有事件
  • 【图像处理3D】:焦距的像素单位标定
  • CICD实战(二)-----gitlab的安装与配置
  • 智慧赋能:新能源汽车充电桩应用现状与管理升级方案
  • wordpress维护模式/百度优化排名软件
  • 如何自己做网站发布到服务器上面/合肥网络seo推广服务
  • 网站里的动画效果图/2023年小学生简短小新闻
  • 如何选择做网站/广告推广营销网站
  • 五金喷漆东莞网站建设/成人职业培训机构
  • 郑州网站推广公司排名/cba目前排行