系列文章目录
Docker部署Webviz:实现ros与网页交互
利用Rosweb实现ros与网页交互(1)
前言
1、需求:在网页上实时显示slam建图、导航等交互。即利用rosbridge -Websocket实现ROS与Web的交互;
2、本章节利用cruise/webviz实现;
3、操作环境:Ubuntu20.04,ROS版本:noetic,docker容器,谷歌浏览器;
4、本项目需要用谷歌浏览器才能打开;
5、需要安装rosbridge_suite功能包,请看这篇文章利用Rosweb实现ros与网页交互(1)
一、Docker安装步骤
1.引入库
可以在Ubuntu 20.04上部署Webviz并使用Docker来简化这一过程。Webviz是一个基于React的开源工具,用于可视化ROS(Robot Operating System)数据,常用于机器人系统数据分析。以下是使用Docker部署Webviz的基本步骤。
准备工作
-
安装Docker:首先确保的Ubuntu 20.04系统上安装了Docker,可以按照以下步骤操作:
-
更新软件包索引:
sudo apt update
-
安装一些必要的软件包,以便通过HTTPS使用存储库:
sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
-
添加Docker的官方GPG密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
-
添加Docker存储库:
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
-
更新软件包索引并安装Docker:
sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io
-
-
启动Docker并允许开机启动:
sudo systemctl start docker sudo systemctl enable docker
二、部署Webviz
- 运行Webviz:可以通过以下命令运行Webviz容器:
sudo docker run -p 8080:8080 cruise/webviz
这个命令会下载镜像,然后启动一个容器,将容器内部的80端口映射到主机的8080端口。curise/webviz是镜像的名称。
2. 启动rosbridge websocket:
在终端上启动launch文件
roslaunch rosbridge_server rosbridge_websocket.launch
- 访问Webviz:容器启动后,可以在谷歌浏览器中访问来查看Webviz界面。
http://localhost:8080
4. 测试Webviz:导入bag文件。
下载地址:Bag文件,然后直接把文件拖拽到页面即可。bag文件的作用:可以模拟仿真环境在某时刻的情况,也就是说这个是录制好的一个包
需要在三个终端打开三个命令行:
(1)启动仿真环境
roslaunch turtlebot3_gazebo turtlebot3_house.launch
(2)启动键盘控制
roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch
(3)启动可视化
roslaunch turtlebot3_navigation turtlebot3_navigation.launch
附录
下面是一个包含常用功能窗口的配置,可通过上面提到的方法导入到自己的面板上进行预览和进一步修改
{
"layout": {
"direction": "row",
"first": {
"direction": "column",
"first": {
"direction": "row",
"first": "DiagnosticSummary!3edblo1",
"second": "StateTransitions!3c71bze"
},
"second": "Plot!3s13ldj",
"splitPercentage": 37.359550561797754
},
"second": {
"direction": "row",
"first": {
"direction": "column",
"first": "RosOut!1f38b3d",
"second": "RawMessages!2d7jlx6"
},
"second": "3D Panel!1my2ydk",
"splitPercentage": 50
},
"splitPercentage": 33.3333333333
},
"savedProps": {
"StateTransitions!3c71bze": {
"paths": [
{
"value": "/move_base/status.status_list[:]{goal_id==0}.status",
"timestampMethod": "receiveTime"
}
]
},
"Plot!3s13ldj": {
"paths": [
{
"value": "/odom.twist.twist.linear.x",
"enabled": true,
"timestampMethod": "receiveTime"
},
{
"value": "/odom.twist.twist.linear.y",
"enabled": true,
"timestampMethod": "receiveTime"
}
],
"minYValue": "",
"maxYValue": "",
"showLegend": true,
"xAxisVal": "timestamp"
},
"RosOut!1f38b3d": {
"searchTerms": [
"/gazebo",
"/rviz",
"/move_base"
],
"minLogLevel": 8,
"topicToRender": "/rosout"
},
"RawMessages!2d7jlx6": {
"topicPath": "/camera/depth/image_raw",
"diffTopicPath": "",
"diffMethod": "custom",
"diffEnabled": false,
"showFullMessageForDiff": false
},
"3D Panel!1my2ydk": {
"checkedNodes": [
"/amcl/parameter_descriptions",
"/amcl/parameter_updates",
"/amcl_pose",
"/camera/depth/camera_info",
"/camera/depth/image_raw",
"/camera/depth/points",
"/camera/parameter_descriptions",
"/camera/parameter_updates",
"/camera/rgb/camera_info",
"/camera/rgb/image_raw",
"/camera/rgb/image_raw/compressed",
"/camera/rgb/image_raw/compressed/parameter_descriptions",
"/camera/rgb/image_raw/compressed/parameter_updates",
"/camera/rgb/image_raw/compressedDepth/parameter_descriptions",
"/camera/rgb/image_raw/compressedDepth/parameter_updates",
"/camera/rgb/image_raw/theora",
"/camera/rgb/image_raw/theora/parameter_descriptions",
"/camera/rgb/image_raw/theora/parameter_updates",
"/clock",
"/cmd_vel_mux/active",
"/cmd_vel_mux/input/navi",
"/cmd_vel_mux/parameter_descriptions",
"/cmd_vel_mux/parameter_updates",
"/gazebo/link_states",
"/gazebo/model_states",
"/gazebo/parameter_descriptions",
"/gazebo/parameter_updates",
"/gazebo_gui/parameter_descriptions",
"/gazebo_gui/parameter_updates",
"/joint_states",
"/map",
"/map_metadata",
"/mobile_base/commands/velocity",
"/mobile_base/sensors/imu_data",
"/mobile_base_nodelet_manager/bond",
"/move_base/DWAPlannerROS/cost_cloud",
"/move_base/DWAPlannerROS/global_plan",
"/move_base/DWAPlannerROS/local_plan",
"/move_base/DWAPlannerROS/parameter_descriptions",
"/move_base/DWAPlannerROS/parameter_updates",
"/move_base/DWAPlannerROS/trajectory_cloud",
"/move_base/NavfnROS/plan",
"/move_base/current_goal",
"/move_base/feedback",
"/move_base/global_costmap/costmap",
"/move_base/global_costmap/costmap_updates",
"/move_base/global_costmap/footprint",
"/move_base/global_costmap/inflation_layer/parameter_descriptions",
"/move_base/global_costmap/inflation_layer/parameter_updates",
"/move_base/global_costmap/obstacle_layer/parameter_descriptions",
"/move_base/global_costmap/obstacle_layer/parameter_updates",
"/move_base/global_costmap/parameter_descriptions",
"/move_base/global_costmap/parameter_updates",
"/move_base/global_costmap/static_layer/parameter_descriptions",
"/move_base/global_costmap/static_layer/parameter_updates",
"/move_base/goal",
"/move_base/local_costmap/costmap",
"/move_base/local_costmap/costmap_updates",
"/move_base/local_costmap/footprint",
"/move_base/local_costmap/inflation_layer/parameter_descriptions",
"/move_base/local_costmap/inflation_layer/parameter_updates",
"/move_base/local_costmap/obstacle_layer/parameter_descriptions",
"/move_base/local_costmap/obstacle_layer/parameter_updates",
"/move_base/local_costmap/parameter_descriptions",
"/move_base/local_costmap/parameter_updates",
"/move_base/parameter_descriptions",
"/move_base/parameter_updates",
"/move_base/result",
"/move_base/status",
"/move_base_simple/goal",
"/navigation_velocity_smoother/parameter_descriptions",
"/navigation_velocity_smoother/parameter_updates",
"/navigation_velocity_smoother/raw_cmd_vel",
"/odom",
"/particlecloud",
"/rosout",
"/rosout_agg",
"/tf",
"/tf_static",
"/turtlebot/laser/scan",
"name:Topics"
],
"expandedNodes": [
"name:Topics"
],
"followTf": "map",
"cameraState": {
"targetOffset": [
0,
0,
0
]
},
"modifiedNamespaceTopics": [],
"pinTopics": false,
"topicSettings": {},
"autoSyncCameraState": false,
"topicGroups": [
{
"displayName": "Imported Group",
"visibilityByColumn": [
true,
true
],
"expanded": true,
"items": []
}
],
"savedPropsVersion": 14
}
},
"globalVariables": {},
"userNodes": {},
"linkedGlobalVariables": [],
"playbackConfig": {
"speed": 0.2
}
}
总结
1、下载docker的时候会报错,一般是网络问题,白天或者趁老外睡觉的时间段一般就没啥问题了。
2、下一章详细介绍webviz的使用
参考地址:
①webviz源码网址
②智能车比赛—webviz阶段总结
③利用Rosweb实现ros与网页交互(1)
④webviz安装,docker安装可正常使用与Foxglove Studio