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

news2024/11/19 1:31:12

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.coloradmin.cn/o/1428451.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL篇----第二篇

系列文章目录 文章目录 系列文章目录前言一、MyIASM二、Memory三、数据库引擎有哪些前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 一、MyIASM MyIASM是 MySQL默…

Dash :一个超漂亮的 python Web库!

你好&#xff0c;Dash 是一个非常方便的 Python 库&#xff0c;它可以非常非常帮助你构建基于 Web 的应用程序&#xff0c;而且最棒的是你无需使用 JavaScript&#xff01; 不仅如此&#xff0c;Dash 还是一个专门用于创建分析 Web 应用程序的用户界面库。 如果你是一个使用 …

【Algorithms 4】算法(第4版)学习笔记 03 - 1.3 背包、队列和栈

文章目录 前言参考目录学习笔记0&#xff1a;预热1&#xff1a;栈1.1&#xff1a;栈的链表实现1.1.1 代码实现1.2&#xff1a;栈的数组实现1.2.1&#xff1a;定容栈1.2.2&#xff1a;可调整大小数组1.2.3&#xff1a;代码实现1.3&#xff1a;链表与数组的取舍2&#xff1a;队列…

Vue中的常用指令

一、常用指令 概念&#xff1a;指令&#xff08;Directives&#xff09;是 Vue 提供的带有 v- 前缀 的 特殊 标签属性。 为啥要学&#xff1a;提高程序员操作 DOM 的效率。 vue 中的指令按照不同的用途可以分为如下 6 大类&#xff1a; 内容渲染指令&#xff08;v-html、v-t…

电脑风扇控制温度软件 Macs Fan Control Pro 中文

Macs Fan Control Pro是一款专为Mac用户设计的风扇控制软件&#xff0c;旨在提供更精细的风扇转速控制和温度监控。这款软件通过实时监测Mac内部硬件的温度&#xff0c;自动或手动调整风扇的转速&#xff0c;以确保系统温度保持在理想范围内。 Macs Fan Control Pro提供了直观…

使用gcc/g++查看C语言预处理,编译,汇编,连接,以及动静态库的区分

文章目录 使用gcc/ggcc如何完成编译后生成可执行文件&#xff1f;预处理(进行宏替换)编译&#xff08;生成汇编&#xff09;汇编&#xff08;生成机器可识别代码&#xff09;连接&#xff08;生成可执行文件或库文件&#xff09;最后记忆小技巧 在这里涉及到一个重要的概念&…

【Tomcat与网络2】一文理解Servlet是怎么工作的

在前面&#xff0c;我们研究了如何用idea来启动一个Servlet程序&#xff0c;今天我们就再来看一下Servlet是如何工作的。 目录 1.Servlet 介绍 2.Servlet 容器工作过程 3.Servlet的扩展 不管是电脑还是手机浏览器&#xff0c;发给服务端的就是一个 HTTP 格式的请求&#xf…

双非本科准备秋招(14.1)—— 力扣刷题

今天做两个有点难度的题。 1、295. 数据流的中位数 手写堆实现&#xff1a; 加入元素&#xff1a; 如何维护一个中位数&#xff1f;我们考虑一下堆的特点&#xff0c;大顶堆堆顶是一个最大值&#xff0c;小顶堆堆顶是一个最小值&#xff0c;那么&#xff0c;如果我们可以把数…

R语言学习case7:ggplot基础画图(核密度图)

step1: 导入ggplot2库文件 library(ggplot2)step2&#xff1a;带入自带的iris数据集 iris <- datasets::irisstep3&#xff1a;查看数据信息 dim(iris)维度为 [150,5] head(iris)查看数据前6行的信息 step4&#xff1a;画图展示 plot2 <- ggplot(iris,aes(Sepal.W…

踩坑STM32CubeMX生成Makefile工程无法使用printf(“%f“)

过去一年偶有接触STM32开发时都是使用STM32CubeMX生成Makefile的工程&#xff0c;具体开发环境见配置Clion用于STM32开发&#xff08;Makefile&#xff09;&#xff0c;但没想到今天在使用printf打印输出浮点数时无法正常输出&#xff0c;不仅printf无法使用&#xff0c;其他涉…

024 增强for循环

什么是增强for循环 用法 int[] arr {1,3,5,7,9}; for (int i : arr) {System.out.println(i); } 拓展 增强for不止用于数组&#xff0c;还可以用于集合。 增强for是for的偷懒写法&#xff0c;必定可以被for的写法的代替&#xff0c;但for不一定会被增强for代替。

【详细教程】Kubernetes集群部署:使用kubeadm创建集群

文章目录 一、虚拟机准备&#xff08;一&#xff09;主机基本配置&#xff08;二&#xff09;安装docker&#xff08;三&#xff09;配置cri-docker环境&#xff08;四&#xff09;安装kubeadm、kubelet、kubectl&#xff08;五&#xff09;克隆主机 二、环境配置工作&#xff…

扫盲软件开发工具低代码

目录 一、低代码是什么&#xff1f; 二、低代码平台的优势和劣势都是什么&#xff1f; 三、低代码操作方式 四、写在最后 一、低代码是什么&#xff1f; 低代码是一套可视化开发工具&#xff0c;它帮开发者把前后端基础功能写扎实&#xff0c;开发者只需要通过填表配置或拖…

Java SWT Composite 绘画

Java SWT Composite 绘画 1 Java SWT2 Java 图形框架 AWT、Swing、SWT、JavaFX2.1 Java AWT (Abstract Window Toolkit)2.2 Java Swing2.3 Java SWT (Standard Widget Toolkit)2.4 Java JavaFX 3 比较和总结 1 Java SWT Java SWT&#xff08;Standard Widget Toolkit&#xff…

3593 蓝桥杯 查找最大元素 简单

3593 蓝桥杯 查找最大元素 简单 // C风格解法1&#xff0c;通过率100%&#xff0c;多组数据处理样式//str "abcdefgfedcba" //abcdefg(max)fedcba//str "xxxxx" //x(max)x(max)x(max)x(max)x(max)#include<bits/stdc.h>const int N 1e2 10;char …

pdf怎么改成word文档?PDF转Word的方法

Word是一种常用的文字处理软件&#xff0c;具有丰富的编辑功能。通过将PDF转换成Word&#xff0c;您可以轻松地对文档进行编辑、修改和格式调整。这对于需要对文本进行更改、添加或删除内容的情况非常有用&#xff0c;本文介绍一个pdf转word的简单方法&#xff0c;通过压缩图的…

Qt加载网页崩溃 ASSERT:“m_adapterClient“ in file ...

1、软件启动后加载网页无异常&#xff0c;点击按钮&#xff0c;加载新网页时崩溃 崩溃代码&#xff1a; QWebEngineView *createWindow(QWebEnginePage::WebWindowType type) { Q_UNUSED(type); return this; } 2、原因 Qt只是调用谷歌的浏览器引擎&#xff…

Python爬虫某云免费音乐——多线程批量下载

重点一&#xff1a;每首音乐的下载地址 重点二&#xff1a;如何判断是免费音乐 重点三&#xff1a;如何用线程下载并保存 重点四&#xff1a;如何规避运行错误导致子线程死掉 重点五&#xff1a;如何管理子线程合理运行 需要全部代码的私信或者VX:Kmwcx1109 运行效果&…

【机器学习】AAAI 会议论文聚类分析

实验五&#xff1a;AAAI 会议论文聚类分析 ​ 本次实验以AAAI 2014会议论文数据为基础&#xff0c;要求实现或调用无监督聚类算法&#xff0c;了解聚类方法。 1 任务介绍 ​ 每年国际上召开的大大小小学术会议不计其数&#xff0c;发表了非常多的论文。在计算机领域的一些大…

vue实现el-table-column中自定义label

默认的label只能显示普通文字&#xff0c;如果有一些特殊需求&#xff0c;比如换行显示&#xff0c;更改文字颜色&#xff0c;更改文字大小&#xff0c;就需要自定义label了 <el-table-column label"组合" align"center" key"combinData" pr…