ARM架构可视化ROS消息方案部署

ARM架构可视化ROS消息方案部署

三种方案, 1. webviz 2. foxglove 3. rosviz

注: web要用firefox, chromimum用不了, 可能是因为取消了时间同步机制的原因

先说三种方案的优劣, webviz 延迟比较高, 但是部署相对简单, foxglove 部署比较费劲, 但是效果不错, 延迟低, 本文会尽量描述清楚如何部署, 去掉目前我发现的这个缺点 , rosvizweb 就算了, 可以但没必要, 功能太简陋了

先从最靠谱的foxglove说起

foxglove

前置条件

sudo apt update
sudo apt install npm git-lfs nodejs -y
# 安装最新的nodejs
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
# 更换镜像源
npm config set registry https://registry.npmmirror.com
sudo npm install -g yarn

安装foxglove开发的类似于rosbridge的ros包, 如果不下的话, 就需要自己考虑去实现foxglove的传输协议, 这一点可以看ws-protocal, 在V0.23.1之后就开始使用该协议了, 如果实在不想下载这个包也不想实现该协议, 可以考虑下载0.23.1版本, 不过这个版本我没研究怎么从源码编译(其实是失败了)

sudo apt install ros-<distro>-foxglove-bridge

注: 以下所有过程建议在代理模式下进行, 否则可能多次失败, 因为在依赖的安装时, 十分依赖github

git clone https://github.com/foxglove/studio.git # 这步可以通过 git clone https://mirror.ghproxy.com/https://github.com/foxglove/studio.git 偷渡
cd studio
sudo corepack enable
git lfs install
git lfs pull
yarn install

运行

cd /path/to/studio
yarn web:serve

效果图:

Screenshot from 2024-01-30 08-39-57

webviz

建议全程在代理环境下进行! 加代理都麻烦的要死, 无代理建议换个方式, linux就用rviz, windows考虑用foxglove吧

此外, 我尝试在arm架构使用webviz, 但是尽管编译成功, 但是出不了图, 看不到相关消息, 如果有大佬知道为什么还请不吝赐教!

git clone https://github.com/cruise-automation/webviz.git
cd webviz
sudo apt install npm
npm run bootstrap
npm run build-static-webviz# 运行webviz
npm run serve-static-webviz 

TroubleShooting

报错 /usr/bin/git ls-remote -h -t + 仓库名
npm ERR! Error while executing:
npm ERR! /usr/bin/git ls-remote -h -t ssh://git@github.com/davidswinegar/chartjs-plugin-datalabels.git

解决:

cd packages/webviz-core
vim package-lock.json

使用/git+ssh 查找所有带git+ssh的字段, 切换为 https://

举个例子

git+ssh://git@github.com/troygibb/react-mosaic.git#860c8d70ba3c723be07bc6208f0d05e2c3f2915f
# 把前面的 git+ssh://git@ 换成 https://
https://github.com/troygibb/react-mosaic.git#860c8d70ba3c723be07bc6208f0d05e2c3f2915f
报错 sha 512 xxxxxxxx 验证不通过
cd packages/webviz-core
vim package-lock.json

通过/chart.js 查找 chart.js并将括号中的验证行(integrity)删掉, 删除完成以后大概长这个样子

Screenshot from 2024-01-24 10-21-16

报错 path = process.cwd(); Error: ENOENT: no such file or directory, uv_cwd

原因: nodejs版本太低, 10.19不行, 要升级到12

# 在下面这行命令执行的过程中会有警告, 因为12也是老版本, 需要等待20s以后才执行该命令, 再等60s以后才开始正式刷新源
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt-get install -y nodejs

webviz显示实时运行的信息

主要就是需要一个rosbridge的协助, rosbridge默认的端口为0.0.0.0:9090, 需要修改的话, 建议自建一个rosbridge.launch

# 下载rosbridge
sudo apt update
sudo apt install ros-<rosdistro>-rosbridge-suite# 不需要改端口直接按下面的指令就可以
roslaunch <自己的包> <自己的launch>
roslaunch rosbridge_server rosbridge_websocket.launch # 在0.0.0.0:9090启动rosbridge
cd /path/to/webviz #切换到webviz目录
npm run serve-static-webviz 

如果需要修改ip以及端口, 示例launch文件如下, 这是默认的rosbridge_websocket.launch, 只是修改了地址, 建议不要改端口, 因为webviz监听的是9090, 而我不知道怎么改webviz的端口emmmm

注: rosapi这个node不要删, 因为webviz会通过rosapi去获取消息的类型, 从而显示在浏览器上

<launch><arg name="port" default="9090" /><arg name="address" default="10.168.2.183" /><arg name="ssl" default="false" /><arg name="certfile" default=""/><arg name="keyfile" default="" /><arg name="retry_startup_delay" default="5" /><arg name="fragment_timeout" default="600" /><arg name="delay_between_messages" default="0" /><arg name="max_message_size" default="None" /><arg name="unregister_timeout" default="10" /><arg name="websocket_external_port" default="None" /><arg name="use_compression" default="false" /><arg name="authenticate" default="false" /><arg name="websocket_ping_interval" default="0" /><arg name="websocket_ping_timeout" default="30" /><arg name="websocket_null_origin" default="true" /><arg name="topics_glob" default="[*]" /><arg name="services_glob" default="[*]" /><arg name="params_glob" default="[*]" /><arg name="bson_only_mode" default="false" /><!-- Output: screen, log --><arg name="output" default="screen" /><!-- Valid options for binary_encoder are "default", "b64" and "bson". --><arg unless="$(arg bson_only_mode)" name="binary_encoder" default="default"/><group if="$(arg ssl)"><node name="rosbridge_websocket" pkg="rosbridge_server" type="rosbridge_websocket" output="$(arg output)"><param name="certfile" value="$(arg certfile)" /><param name="keyfile" value="$(arg keyfile)" /><param name="authenticate" value="$(arg authenticate)" /><param name="port" value="$(arg port)"/><param name="address" value="$(arg address)"/><param name="retry_startup_delay" value="$(arg retry_startup_delay)"/><param name="fragment_timeout" value="$(arg fragment_timeout)"/><param name="delay_between_messages" value="$(arg delay_between_messages)"/><param name="max_message_size" value="$(arg max_message_size)"/><param name="unregister_timeout" value="$(arg unregister_timeout)"/><param name="use_compression" value="$(arg use_compression)"/><param name="websocket_ping_interval" value="$(arg websocket_ping_interval)" /><param name="websocket_ping_timeout" value="$(arg websocket_ping_timeout)" /><param name="websocket_external_port" value="$(arg websocket_external_port)" /><param name="websocket_null_origin" value="$(arg websocket_null_origin)" /><param name="topics_glob" value="$(arg topics_glob)"/><param name="services_glob" value="$(arg services_glob)"/><param name="params_glob" value="$(arg params_glob)"/></node></group><group unless="$(arg ssl)"><node name="rosbridge_websocket" pkg="rosbridge_server" type="rosbridge_websocket" output="$(arg output)"><param name="authenticate" value="$(arg authenticate)" /><param name="port" value="$(arg port)"/><param name="address" value="$(arg address)"/><param name="retry_startup_delay" value="$(arg retry_startup_delay)"/><param name="fragment_timeout" value="$(arg fragment_timeout)"/><param name="delay_between_messages" value="$(arg delay_between_messages)"/><param name="max_message_size" value="$(arg max_message_size)"/><param name="unregister_timeout" value="$(arg unregister_timeout)"/><param name="use_compression" value="$(arg use_compression)"/><param name="websocket_ping_interval" value="$(arg websocket_ping_interval)" /><param name="websocket_ping_timeout" value="$(arg websocket_ping_timeout)" /><param name="websocket_external_port" value="$(arg websocket_external_port)" /><param name="topics_glob" value="$(arg topics_glob)"/><param name="services_glob" value="$(arg services_glob)"/><param name="params_glob" value="$(arg params_glob)"/><param name="bson_only_mode" value="$(arg bson_only_mode)"/></node></group><node name="rosapi" pkg="rosapi" type="rosapi_node" output="$(arg output)"><param name="topics_glob" value="$(arg topics_glob)"/><param name="services_glob" value="$(arg services_glob)"/><param name="params_glob" value="$(arg params_glob)"/></node></launch>

成品效果图:

Screenshot from 2024-01-24 10-43-40

rosviz

github仓库地址: https://github.com/jstnhuang/ros-rviz

User guide: https://github.com/jstnhuang/ros-rviz/wiki/User-guide

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/448517.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

KMP算法解决——找出字符串中第一个匹配项的下标(深入图解KMP算法)

"The only way to do great work is to love what you do." ​- Steve Jobs 首先我们先来回顾一下题目&#xff1a; 1. 先正儿八经的拿比较官方的说法来解释一下KMP算法 KMP&#xff08;Knuth-Morris-Pratt&#xff09;算法是一种用于在一个文本串中查找一个模式串…

睿尔曼超轻量仿人机械臂—外置按钮盒使用说明

睿尔曼RM系列机械臂的控制方式有很多种&#xff0c;包括&#xff1a;示教器、JSON、API等。在此为大家介绍外置按钮盒的使用方法。 按钮盒接线安装 按钮盒外观如下图所示&#xff0c;有&#xff1a;急停、暂停、开始、继续。四个功能按钮。用户可通过这四个按钮来实现对机械臂运…

OpenCV 14 - 自定义线性滤波

1 卷积 1-1概念 卷积是图像处理中一个操作,kernel在图像的每个像素上的操作。 Kernel本质上一个固定大小的矩阵数组,其中心点称为锚点 1-2 卷积如何工作 把kernel放到像素数组之上,求锚点周围覆盖的像素乘积之和(包括锚点),用来替换锚点覆盖下像素点值称为卷积处理。 …

2024年美赛E题:财产保险的可持续性 Sustainability of Property Insurance 思路模型代码解析

2024年美赛E题&#xff1a;财产保险的可持续性 Sustainability of Property Insurance 思路模型代码解析 【点击最下方群名片&#xff0c;加入群聊&#xff0c;获取更多思路与代码哦~】 问题翻译 极端天气事件对房产所有者和保险公司已经成为一场危机。近年来&#xff0c;世界…

Springboot集成graylog快速入门demo

一、graylog介绍 GrayLog是一个轻量型的分布式日志管理平台&#xff0c;一个开源的日志聚合、分析、审计、展示和预警工具。在功能上来说&#xff0c;和ELK类似&#xff0c;但又比ELK要简单轻量许多。依靠着更加简洁&#xff0c;高效&#xff0c;部署使用简单的优势很快受到许多…

10个React状态管理库推荐

本文将为您推荐十款实用的React状态管理库&#xff0c;帮助您打造出高效、可维护的前端应用。让我们一起看看这些库的魅力所在&#xff01; 在前端开发中&#xff0c;状态管理是至关重要的一环。React作为一款流行的前端框架&#xff0c;其强大的状态管理功能备受开发者青睐。…

Spring Boot导出EXCEL 文件

主要功能:实现java导出excel到本地 JDK版本&#xff1a;openJDK 20.0.1 依赖pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchem…

拓展欧几里得法求逆元

板子&#xff1a; x即为最终答案&#xff0c;x可能为负数&#xff0c;加模数即可 乘法逆元 - OI Wiki (oi-wiki.org) void exgcd(int a, int b, int& x, int& y) {if (b 0) {x 1, y 0;return;}exgcd(b, a % b, y, x);y - a / b * x; } 使用: exgcd(a, n 1, x,…

【全网最全】2024美赛ABCDEF题思路模型全解(后续会更新)

欲获取更多资料&#xff0c;一定要点击这里并关注文末的公众号&#xff01;&#xff01;&#xff01; 最新更新&#xff1a;我们团队不仅在第一时间更新了24美赛全题目的深度翻译和深入分析&#xff0c;经过爆肝奋战&#xff0c;我们在第一时间给出了ABCDEF全题目的完整建模过程…

JavaScript基础第二课

目录 一.JavaScript变量 1.理解变量是计算机存储数据的“容器” 2.变量的基本使用 3. 变量的本质 4. 变量命名规则 二. 变量拓展-数组 1. 数组的基本使用 2. 取值语法 三.JavaScript常量 四.JavaScript数据类型 ①基本数据类型 ②引用数据类型 ③NaN ④通过 type…

函数重载你真的了解吗?

1.什么叫函数重载&#xff1f; 函数重载&#xff08;Function Overloading&#xff09;是指在同一个作用域内&#xff0c;允许定义多个具有相同名称但参数列表不同的函数。具体而言&#xff0c;函数重载允许你定义同名的函数&#xff0c;但这些函数应该有不同的参数类型、参数个…

【网络安全】2024年暗网威胁分析及发展预测

暗网因其非法活动而臭名昭著&#xff0c;现已发展成为一个用于各种非法目的的地下网络市场。 它是网络犯罪分子的中心&#xff0c;为被盗数据交易、黑客服务和邪恶活动合作提供了机会。为了帮助企业组织更好地了解暗网发展形势&#xff0c;近日&#xff0c;卡巴斯基的安全研究…