ROS(0)命令及学习资源汇总

ROS安装命令

参考:Ubuntu20.04.4安装ROS Noetic详细教程 - 知乎

安装C++和Python3

sudo apt-get install g++

sudo apt-get install python3

ROS运行小海龟仿真器

roscore确定ROS是否运行成功
rosrun turtlesim turtlesim_node运行小海龟仿真器
rosrun turtlesim turtle_teleop_key 启动小海龟控制

工作空间

创建工作空间WorkSpace

mkdir -p ../catkin_ws/src

cd ../catkin_ws/src

catkin_init_workspace

编译工作空间

cd ../catkin_ws

catkin_make

catkin_make install

设置环境变量

source devel/setup.bash

检查环境变量  echo $ROS_PACKAGE_PATH

创建功能包

功能包放到src文件夹中

cd ../catkin_ws/src

catkin_create_pkg 功能包名称test_pkg 依赖std_msgs roscpp rospy

编译功能包

cd ../catkin_ws

catkin_make

source ../catkin_ws/devel/setup.bash

直接配置source

gedit ~/.bashrc

最下方添加  source ~/catkin_ws/devel/setup.bash

广播模型执行命令

执行命令

roscore

rosrun turtlesim turtlesim_node

rosrun 功能包 turtle_tf_broadcaster节点名 __name:=turtle1_tf_broadcaster /turtle1

rosrun 功能包 turtle_tf_broadcaster节点名 __name:=turtle2_tf_broadcaster /turtle2

rosrun 功能包 turtle_tf_listener

rosrun turtlesim turtle_teleop_key

学习资源

机器人命令调试方法整理

 

机器人use_cam功能包话题

Move_base自主导航原理 

Limo机器人命令

差速运动控制

  • $ roslaunch limo_base limo_base.launch  启动底盘
  • $ roslaunch limo_bringup limo_teleop_keyboard.launch  启动键盘操控
  • roslaunch  一次启动多个节点命令
  • rosnode list  查看节点
  • rosnode info /节点名  查看指定节点信息
  • rostopic list  查看话题列表
  • rostopic pub -r 10 /cmd_vel geometry_msgs/Twist ''linear: x y z angular:x y z
  • rostopic echo /odom  订阅odom话题

机器人发布话题,走圆形

  • Publisher(draw_circle)--Message(geometry_msg/Twist)--Topic(cmd_vel)--Message(geometry_msg/Twist)--Subscribe(limo_base_node)
  • 移动机器人有节点(subscriber)limo_base_node订阅了Topic(cmd_cel),话题类型Message为geometry_msg/Twist
  • 检测机器人的运行速度
  • Publisher(limo_base_node)--Message(nav_msgs/Odometry)--Topic(odom)--Message(nav_msgs/Odometry)--Subscriber(limo_subscriber)

移动机器人分布式通信

  • 编辑终端配置文件 
  • $ gedit ~/.bashrc
  • 将机器人配置为主机
  • ROS_MASTER_URI(机器人IP+默认端口11311)、ROS_HOSTNAME(当前系统主机名)、ROS_IP(当前系统的IP地址)均设置为机器人IP即可
  • 将笔记本配置为从机
  • ROS_MASTER_URI(设置为机器人IP)、ROS_HOSTNAME和ROS_IP设置为电脑IP

分布式控制
机器人端——$ roslaunch limo_base limo_base.launch
笔记本端——$ roslaunch limo_bringup limo_teletop_keyboard.launch

控制机器人圆周运动
机器人端——$ roslaunch limo_bringup limo_start.launch    订阅者在机器人
笔记本端——$ rosrun limo_demo draw_circle.py        发布者cmd_vel

查看机器人实时位置
机器人端——$ roslaunch limo_bringup limo_start.launch        机器人发布位姿话题
笔记本端——$ roslaunch limo_bringup limo_teletop_keyboard.launch    键盘控制
笔记本端——$ rosrun limo_demo limo_subscriber.py        笔记本订阅机器人的位姿话题

机器视觉原理

图像采集—————————图像分析—————————控制输出
光源强化检测特征        提取图像特征        I/O控制
相机镜头捕捉特征        图像特征分析        运动控制
光学图像转为数字图像    图像数据标定        可视化显示
光源-镜头、图像传感器(CCD/CMOS)、光束控制单元
      光学信号转为数字信号
照明        相机(2D/3D)

安装ROS USB相机的驱动包

  • sudo apt-get install ros-noetic-usb-cam
  • roslaunch usb_cam usb_cam-test.launch
  • rqt_image_view

三维结构光相机——RealScene

https://github.com/intel-ros/realsense/releases
安装SDK
$ mkdir build
cd build
cmake ..
make
sudo make install
安装ROS驱动
https://github.com/IntelRealSense/librealsense/releases
$ catkin_make-DCATKIN_ENABLE_TESTING=False -DCMAKE_BUILD_TYPE=Release
catkin_make install
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrcsource ~/.bashrc
点云可视化
roslaunch realsense2_camera rs_rgbd.launch
rosrun rviz rviz
通过rviz可以查看三维点云信息

安装OpenCV

$ sudo apt-get install ros-noetic-vision-opencv libopencv-dev python3-opencv
OpenCV                ROS
OpenCV IpIImage <——>CvBridge<->ROS Image Message

获取HSV值

  • 启动机器人的摄像头
  • roslaunch astra_camera dabai_u3.launch
  • 使用rqt查看图像并保存
  • rqt_image_view
  • 预制了hsv检测工具,检测hsv值
  • roscd limo_visions/scripts/ && python hsv_test.py

物体识别与追踪

$ roslaunch limo_visions follow.launch
<launch>
    <include file=$(find limo_base)/launch/limo_base.launch/>                        启动机器人的底盘
    <include file=$(find astra_camera)/launch/dabai_u3.launch/>                        启动机器人摄像头
    <node name="object_detect" pkg="limo_visions" type="object_detect.py" output="screen"/>  启动机器人跟随控制节点
    <node name="follow_object" pkg="limo_visions" type="follow.py" output="screen"/>
</launch>

二维码识别与跟踪

ALVAR——虚拟现实和增强现实的跨平台开源计算机视觉库,由C++编写,提供C++接口
安装ar-track-alvar
$ sudo apt-get install ros-melodic-ar-track-alvar
创建二维码
$ rosrun ar_track_alvar createMarker -s 5 0      (5是二维码的尺寸为5cm,0为保存的内容)

启动摄像头
roslaunch artra_camera dabai_u3.launch
启动二维码识别
roslaunch limo_vision ar_code.launch
查看识别到的二维码的位姿
rostopic echo /ar_pose_marker

二维SLAM地图构建

Gmapping功能包  粒子滤波算法,将定位与建图过程分离,先定位后建图,适合小场景环境下地图信息
基于激光雷达,Rao-Blackwellized粒子滤波算法,二维栅格地图,需要机器人提供里程计信息,OpenSlam开源算法
输出地图话题
nav_msgs/OccupancyGrid

即时定位与地图建模(gmapping)  深度信息、IMU信息、里程计信息->栅格地图
Gmapping中的话题和服务
Topic订阅
名称        类型            描述
tf        tf/tfMessage        用于激光雷达坐标系,基坐标系,里程计坐标系之间的变换
scan        sensor_msgs/LaserScan    激光雷达扫描数据
Topic发布
map_metadata    nav_msgs/MapMetaData    发布地图Meta数据
map        nav_msgs/OccupancyGrid    发布地图栅格数据
~entropy        std_msgs/Float64        发布机器人姿态分布熵的估计
Service
dynamic_map    nav_msgs/GetMap        获取地图数据

Gmapping中的TF变换
必须的TF变换    <scan frame> -> base_link    激光雷达坐标系与基坐标系之间的变换,一般由robot_state_publisher或static_transform_publisher发布
        base_link -> odom        基坐标系与里程计坐标系之间的变换,一般由里程计节点发布
发布的TF变换    map -> odom        地图坐标系与机器人历程坐标系之间的变换,估计机器人在地图中的位姿
base_link 固定在机器人的中心;odom 里程计坐标系;map 地图坐标系 表示全局定位过程中的参考系

配置gampping节点
limo_bringup/launch/limo_gampping.launch
<launch>
    <node pkg="robot_pose_ekf" name="robot_pose_ekf" type="robot_pose_ekf">    卡尔曼滤波,对里程计信息做滤波,提高里程计数据稳定性
        <param name="output_frame" value="odom">
        <param name="base_footprint_frame" value="base_link"/>
    </node>
    <node pkg="gmapping" type="slam_gmapping name="slam_gmapping" output="screen">
        <param> ......
    </node>
    <node pkg="rviz" type="rviz" name="rviz" args="-d $(find limo_bringup)/rviz/gmapping.rviz">
    </node>
</launch>

gmapping 地图构建
roslaunch limo_bringup limo_start.launch pub_odom_tf:=false    启动机器人底盘
roslaunch limo_bringup limo_gmapping.launch            启动建图的gmapping文件
roslaunch limo_bringup limo_teletop_keyboard.launch        启动键盘控制节点
保存地图
cd /agilex_ws/limo_bringup/maps/
rosrun map_server map_saver -f map1    map_saver:地图保存节点  map1:地图文件名

Cartographer功能包  大场景
2016年10月5日,谷歌开源,基于图网络的优化SLAM方法
二维或三维条件下的定位及建图功能
设计目的是在计算资源有限的情况下,实时获取相对较高精度的地图
主要基于激光雷达
后续会支持更多传感器和机器人平台,同时不断增加新的功能
Local SLAM  建立子图(栅格地图),通过匹配算法将位置插入到子图,但会产生累计误差——生成一个一个拼图块
Global SLAM 闭环检测,消除累计误差——完成整个拼图

配置cartographer节点
limo_bringup/launch/limo_cartographer.launch
<launch>
    <param name="/use_sim_time" value="false">  设置当前使用系统的真实时间
    订阅雷达数据和完成子图的创建,使用Lua脚本配置算法参数
    <node name="cartographer_node" pkg="cartographer_ros" type="cartographer_node" args="-configuration_directory $(find limo_bringup) /param-configuration_basename build_map_2d.lua">
        <remap from="horizontal_laser_2d" to="scan" />
    </node>
    子图合并为占用栅格地图,生成SLAM建图的结果
    <node name="cartographer_occupancy_grid_node" pkg="cartographer_ros" type="cartographer_occupancy_grid_node" args="-resolution 0.05" />
    rviz上位机,方便实时看到SLAM的过程
    <node name="rviz" pkg="rviz" type="rviz" required="true" args="-d $(find limo_bringup)/rviz/cartographer.rviz" />
</launch>

cartographer
roslaunch limo_bringup limo_start.launch pub_odom_tf:=false    启动机器人底盘
roslaunch limo_bringup limo_cartographer.launch            运行cartographer地图构建算法和Rviz上位机
roslaunch limo_bringup limo_teletop_keyboard.launch        运行键盘控制节点

保存地图
rosservice call /finish_trajectory 0  调用服务,告诉cartographer结束建图
rosservice call /write_state "{filename:'${HOME}/agilex_ws/src/limo_ros/limo_bringup/maps/mymap.pbstream'}"
rosrun cartographer_ros cartographer_pbstream_to_ros_map -map_filestem=${HOME}/agilex_ws/src/limo_ros/limo_bringup/maps/mymap
-pbstream_filename=${HOME}/agilex_ws/src/limo_ros/limo_bringup/maps/mymap.pbstream -resolution=0.05
生成地图文件名称;上一步创建好的原始地图数据;生成栅格地图的分辨率,0.05表示5cm

三维SLAM地图构建
RTAB-Map功能包
具有实时约束的全局闭环检测器的RGB-D SLAM方法
基于全局贝叶斯闭环检测器
定位点创建->权值更新->贝叶斯过滤器更新->闭环假设选择->取回->转移
可单独使用RGB-D摄像头建图或和二维/三维激光雷达共同建图

地图构建 rtabmap
roslaunch limo_bringup limo_start.launch pub_odom_tf:=true
roslaunch astra_camera dabai_u3.launch
roslaunch limo_bringup limo_rtabmap_orbbec.launch    启动RTAB算法节点
roslaunch limo_bringup rtabmap_rviz.launch
roslaunch limo_bringup limo_teletop_keyboard.launch

查看建图结果
rtabmap-databaseViewer ~/.ros/rtabmap.db

移动机器人自主导航
目标点、全局最优路径、动态避障、定位粒子云、本地代价地图
原理
Goal -> AMCL -> Path Planner -> move_base -> /cmd_vel+/odom -> Base Controller -> Motor Speeds
导航目标点  AMCL全局定位算法  全局路径规划  本地规划器  运动速度  指令发给底盘,控制机器人电机按照某一速度运动

move_base功能包
Action订阅    move_base/goal        move_base_msgs/MoveBaseActionGoal        move_base的运动规划目标
        move_base/cancel        actionlib_msgs/GoalID            取消特定目标的请求
Action发布    move_base/feedback    move_base_msgs/MoveBaseActionFeedback    反馈信息,含有机器人底盘的坐标
        move_base/status        actionlib_msgs/GoalStatusArray        发送到move_base的目标状态信息
        move_base/result        move_base_msgs/MoveBaseActionResult    此处move_base操作的结果为空
Topic订阅        move_base_simple/goal    geometry_msgs/PoseStamped        为不需要追踪目标执行状态的用户,提供一个非action接口
Topic发布        cmd_vel            geometry_msgs/Twist            输出到机器人底盘的速度命令
Service        ~make_plan        nav_msgs/GetPlan                允许用户从move_base获取给定目标的路径规划,但不会执行该路径规划
        ~clear_unknown_space    std_srvs/Empty                允许用户直接清除机器人周围的未知空间。适合于costmap停止很长时间后,在一个全新环境中重新启动时使用
        ~clear_costmaps        std_srvs/Empty                允许用户命令move_base节点清除costmap中的障碍。这可能会导致机器人撞上障碍物,请谨慎使用

蒙特卡罗定位方法
二维环境定位
针对已有地图使用粒子滤波器跟踪一个机器人的姿态

环境信息(Map)传感器数据(Scan)航程信息(Odom)初始位姿(Initial Pose)->运动模型 传感器模型 蒙特卡洛航位推算 采用(重采样)算法 -> 偏航校准(TF)粒子分布(Particle Cloud)位姿优化(Filtered Pose)

移动机器人差速导航
roslaunch limo_bringup limo_start.launch pub_odom_tf:=false
roslaunch limo_bringup limo_navigation_diff.launch

全向导航
roslaunch limo_bringup limo_start.launch pub_odom_tf:=false
roslaunch limo_bringup limo_navigation_mcnamu.launch

阿克曼导航
roslaunch limo_bringup limo_start.launch pub_odom_tf:=false
roslaunch limo_bringup limo_navigation_ackerman.launch

launch文件中包含:里程计滤波节点、amcl定位节点、map_server地图服务器节点、move_base导航节点、rivz可视化节点

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

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

相关文章

【微信小程序开发】一文学会使用CSS控制样式布局与美化

引言 在微信小程序开发中&#xff0c;CSS样式布局和美化是非常重要的一部分&#xff0c;它能够为小程序增添美感&#xff0c;提升用户体验。本文将介绍如何学习使用CSS进行样式布局和美化&#xff0c;同时给出代码示例&#xff0c;帮助开发者更好地掌握这一技巧。 一、CSS样式布…

星宿UI2.4资源付费变现小程序源码 支持流量主

第一个小程序为星宿小程序 目前是最新版2.0 搭建星宿需要&#xff1a;备用域名 服务器 微信小程序账号 功能&#xff1a;文章展示 文章分类 资源链接下载 轮播图 直接下载附件功能 很多 很适合做资源类分享 源码下载&#xff1a;https://download.csdn.net/download/m0_6604…

mysql面试题17:MySQL引擎InnoDB与MyISAM的区别

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:MySQL引擎InnoDB与MyISAM的区别 InnoDB和MyISAM是MySQL中两种常见的存储引擎,它们在功能和性能方面有一些区别。下面将详细介绍它们之间的差异。…

【算法导论】线性时间排序(计数排序、基数排序、桶排序)

引言&#xff1a;   在排序的最终结果中&#xff0c;各元素的次序依赖于它们之间的比较&#xff0c;我们把这类排序算法称为比较排序&#xff0c;对于包含n个元素的输入序列来说&#xff0c;任何比较排序在最坏情况下都要经过 Ω ( n l g n ) \Omega(nlgn) Ω(nlgn)次比较&a…

学信息系统项目管理师第4版系列17_干系人管理

1. 项目经理和团队管理干系人的能力决定着项目的成败 2. 干系人满意度应作为项目目标加以识别和管理 3. 发展趋势和新兴实践 3.1. 识别所有干系人&#xff0c;而非在限定范围内 3.2. 确保所有团队成员都涉及引导干系人参与的活 3.3. 定期审查干系人群体&#xff0c;可与单…

星际争霸之小霸王之小蜜蜂(十六)--狂奔的花猫

系列文章目录 星际争霸之小霸王之小蜜蜂&#xff08;十五&#xff09;--剧将终场 星际争霸之小霸王之小蜜蜂&#xff08;十四&#xff09;--资本家的眼泪 星际争霸之小霸王之小蜜蜂&#xff08;十三&#xff09;--接着奏乐接着舞 星际争霸之小霸王之小蜜蜂&#xff08;十二…

Lucene学习总结之Lucene的索引文件格式

当我们真正进入到Lucene源代码之中的时候&#xff0c;我们会发现: Lucene的索引过程&#xff0c;就是按照全文检索的基本过程&#xff0c;将倒排表写成此文件格式的过程。Lucene的搜索过程&#xff0c;就是按照此文件格式将索引进去的信息读出来&#xff0c;然后计算每篇文档打…

Android开源 Skeleton 骨架屏 V1.3.0

目录 一、简介 二、效果图 三、引用 Skeleton 添加jitpack 仓库 添加依赖: 四、新增 “块”骨架屏 1、bind方法更改和变化&#xff1a; 2、load方法更改和变化&#xff1a; 五、关于上一个版本 一、简介 骨架屏的作用是在网络请求较慢时&#xff0c;提供基础占位&…

Android LitePal byte[]类型字段不被创建

我创建了以下实体类&#xff0c;主要是用户分享的内容、分享的照片、分享的标题&#xff0c;然后百度了一下LitePal可以识别byte[]&#xff0c;因为需要文件的上传与读取&#xff1a; public class Context extends LitePalSupport {private Integer ContextId;private String…

LLMs 用强化学习进行微调 RLHF: Fine-tuning with reinforcement learning

让我们把一切都整合在一起&#xff0c;看看您将如何在强化学习过程中使用奖励模型来更新LLM的权重&#xff0c;并生成与人对齐的模型。请记住&#xff0c;您希望从已经在您感兴趣的任务上表现良好的模型开始。您将努力使指导发现您的LLM对齐。首先&#xff0c;您将从提示数据集…

用向量数据库Milvus Cloud 搭建AI聊天机器人

加入大语言模型(LLM) 接着,需要在聊天机器人中加入 LLM。这样,用户就可以和聊天机器人开展对话了。本示例中,我们将使用 OpenAI ChatGPT 背后的模型服务:GPT-3.5。 聊天记录 为了使 LLM 回答更准确,我们需要存储用户和机器人的聊天记录,并在查询时调用这些记录,可以用…

软件设计模式系列之二十五——访问者模式

访问者模式&#xff08;Visitor Pattern&#xff09;是一种强大的行为型设计模式&#xff0c;它允许你在不改变被访问对象的类的前提下&#xff0c;定义新的操作和行为。本文将详细介绍访问者模式&#xff0c;包括其定义、举例说明、结构、实现步骤、Java代码实现、典型应用场景…

软件工程从理论到实践客观题汇总(头歌第九章至第十七章)

九、软件体系结构设计 1、软件体系结构设计概述 2、软件体系结构模型的表示方法 3、软件体系结构设计过程 4、设计初步的软件体系结构 5、重用已有软件资源 6、精化软件体系结构 7、设计软件部署模型 8、文档化和评审软件体系结构设计 十、软件用户界面设计 1、用户界面设计概…

Ae 效果:CC Page Turn

扭曲/CC Page Turn Distort/CC Page Turn CC Page Turn &#xff08;CC 翻页&#xff09;主要用于模拟书页翻动的效果。通过使用该效果&#xff0c;用户可以创建出像书页或杂志页面翻动的视觉效果&#xff0c;增强影片的交互性和视觉吸引力。 ◆ ◆ ◆ 效果属性说明 Contro…

Is This The Intelligent Model(这是智能模型吗)

Is This The Intelligent Model 这是智能模型吗 Ruoqi Sun Academy of Military Science Defense Innovation Institute, Beijing, 100091, China E-mail: ruoqisun7163.com The exposed models are called artificial intelligent models[1-3]. These models rely on knowled…

第2篇 机器学习基础 —(1)机器学习方式及分类、回归

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。机器学习是一种人工智能的分支&#xff0c;它使用算法和数学模型来使计算机系统能够从经验数据中学习和改进&#xff0c;而无需显式地编程。机器学习的目标是通过从数据中发现模式和规律&#xff0c;从而使计算机能够自动进…

Leetcode 231.2的幂

给你一个整数 n&#xff0c;请你判断该整数是否是 2 的幂次方。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 如果存在一个整数 x 使得 n 2x &#xff0c;则认为 n 是 2 的幂次方。 示例 1&#xff1a; 输入&#xff1a;n 1 输出&#xff1a;tr…

【重拾C语言】二、顺序程序设计(基本符号、数据、语句、表达式、顺序控制结构、数据类型、输入/输出操作)

目录 前言 二、顺序程序设计 2.1 求绿化带面积——简单程序 2.2基本符号&#xff1a; 2.2.1 字符集 可视字符 不可视字符 2.2.2 C特定符 关键字 分隔符 运算符 2.2.3 标识符 2.2.4 间隔符 2.2.5 注释 2.3 数据 2.3.1 字面常量&#xff08;Literal Constants&am…

【RP-RV1126】烧录固件使用记录

文章目录 烧录完整固件进入MASKROM模式固件烧录升级中&#xff1a;升级完成&#xff1a; 烧录部分进入Loader模式选择文件切换loader模式 烧录完整固件 完整固件就是update.img包含了所有的部件&#xff0c;烧录后可以直接运行。 全局编译&#xff1a;./build.sh all生成固件…

SDL2绘制ffmpeg解析的mp4文件

文章目录 1.FFMPEG利用命令行将mp4转yuv4202.ffmpeg将mp4解析为yuv数据2.1 核心api: 3.SDL2进行yuv绘制到屏幕3.1 核心api 4.完整代码5.效果展示 本项目采用生产者消费者模型&#xff0c;生产者线程&#xff1a;使用ffmpeg将mp4格式数据解析为yuv的帧&#xff0c;消费者线程&am…