• 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

                                启动机器人的底盘
                                启动机器人摄像头
         启动机器人跟随控制节点
       

    二维码识别与跟踪

    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变换     -> 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

           卡尔曼滤波,对里程计信息做滤波,提高里程计数据稳定性
           
           
       

       
            ......
       

       
       

    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

         设置当前使用系统的真实时间
        订阅雷达数据和完成子图的创建,使用Lua脚本配置算法参数
       
           
       

        子图合并为占用栅格地图,生成SLAM建图的结果
       
        rviz上位机,方便实时看到SLAM的过程
       

    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可视化节点

  • 相关阅读:
    瑞萨e2studio(29)----SPI速率解析
    又是一年,接着水
    炸锅了,Java多线程批量操作,居然有人不做事务控制
    Windows如何启动MySQL
    内存函数
    爬山算法介绍
    在 WPF 客户端实现 AOP 和接口缓存
    R语言ggplot2可视化地图并使用scale_fill_gradient函数自定义设置地图颜色刻度为灰色梯度刻度(grey gradient scales)
    面试(数据库的索引结构)
    js获取当前日期与7天后的日期
  • 原文地址:https://blog.csdn.net/jiangyangll/article/details/133079924