[ROS 연구 노트 14] ROS 공통 구성 요소

[ROS 연구 노트 14] ROS 공통 구성 요소

앞부분에 쓰여진 이 일련의 노트는 AutoLabor 튜토리얼을 참조하며 구체적인 프로젝트 주소는 여기에

머리말

로봇 센서에서 얻은 정보는 때때로 처리해야 할 수도 있고 때로는 다음과 같이 데이터를 수집하고 나중에 분석할 수도 있습니다.

로봇 내비게이션 구현에 있어서 내비게이션에 필요한 글로벌 지도를 그려야 할 수도 있는데, 지도를 그리는 방법은 크게 두 가지가 있다. 지도 정보를 생성합니다. 방법 2: 로봇의 움직임을 제어하고, 로봇 센서에서 감지한 데이터를 저장한 후, 이후 데이터를 다시 읽어 지도 정보를 생성하는 방법도 있다. 두 방법을 비교해 보면 방법 2가 더 유연하고 사용하기 편리하다는 것이 분명합니다.

ROS에서는 데이터 보존 및 읽기 구현을 위한 특수 도구인 rosbag이 제공됩니다.

개념

ROS 주제의 기록 및 재생을 위한 도구 세트입니다.

효과

디버깅 및 테스트에 편리한 데이터 재사용이 실현됩니다.

자연

rosbag의 본질 역시 ros의 노드로, 녹화 시 rosbag은 topic 메시지를 구독하고 구독한 데이터를 디스크 파일에 쓸 수 있는 구독 노드이며, 재생 시 rosbag은 디스크 파일을 읽고 Topic을 게시할 수 있는 게시 노드입니다. 파일의 메시지.


1. 로스백의 활용

1.1 rosbag 사용 - 명령줄 모드

필요:

ROS 내장 거북이 케이스 및 작동, rosbag을 사용하여 작동 중 녹화, 녹화 후 재생 실현

성취하다:

1. 준비

녹화 파일을 저장할 디렉토리 생성

mkdir ./xxx
cd xxx

2. 녹음 시작

rosbag record -a -O 目标文件

작은 거북이를 잠시 조작하고 녹음을 종료하고 ctrl + c를 누르면 생성된 디렉토리에 bag 파일이 생성됩니다.

3. 파일 보기

rosbag info 文件名

4. 파일 재생

rosbag play 文件名

거북이 노드를 다시 시작하면 기록된 트랙에 따라 거북이가 움직이는 것을 확인할 수 있습니다.

결과 예:


1.2 rogbag 사용 - 인코딩 방식

명령 구현이 유연하지 않은 경우 인코딩 방법을 사용하여 녹음 및 재생의 유연성을 향상시킬 수 있습니다.이 섹션에서는 간단한 읽기 및 쓰기를 통해 rosbag 인코딩 구현을 보여줍니다.

솔루션 A: C++ 구현

1. 쓰기 가방

#include "ros/ros.h"
#include "rosbag/bag.h"
#include "std_msgs/String.h"


int main(int argc, char *argv[])
{
    
    
    ros::init(argc,argv,"bag_write");
    ros::NodeHandle nh;
    //创建bag对象
    rosbag::Bag bag;
    //打开
    bag.open("/home/rosdemo/demo/test.bag",rosbag::BagMode::Write);
    //写
    std_msgs::String msg;
    msg.data = "hello world";
    bag.write("/chatter",ros::Time::now(),msg);
    bag.write("/chatter",ros::Time::now(),msg);
    bag.write("/chatter",ros::Time::now(),msg);
    bag.write("/chatter",ros::Time::now(),msg);
    //关闭
    bag.close();

    return 0;
}

2. 가방 읽기

/*  
    读取 bag 文件:

*/
#include "ros/ros.h"
#include "rosbag/bag.h"
#include "rosbag/view.h"
#include "std_msgs/String.h"
#include "std_msgs/Int32.h"

int main(int argc, char *argv[])
{
    
    

    setlocale(LC_ALL,"");

    ros::init(argc,argv,"bag_read");
    ros::NodeHandle nh;

    //创建 bag 对象
    rosbag::Bag bag;
    //打开 bag 文件
    bag.open("/home/rosdemo/demo/test.bag",rosbag::BagMode::Read);
    //读数据
    for (rosbag::MessageInstance const m : rosbag::View(bag))
    {
    
    
        std_msgs::String::ConstPtr p = m.instantiate<std_msgs::String>();
        if(p != nullptr){
    
    
            ROS_INFO("读取的数据:%s",p->data.c_str());
        }
    }

    //关闭文件流
    bag.close();
    return 0;
}

효과 예:

옵션 B: Python 구현

1. 쓰기 가방

#! /usr/bin/env python
import rospy
import rosbag
from std_msgs.msg import String

if __name__ == "__main__":
    #初始化节点 
    rospy.init_node("w_bag_p")

    # 创建 rosbag 对象
    bag = rosbag.Bag("/home/rosdemo/demo/test.bag",'w')

    # 写数据
    s = String()
    s.data= "hahahaha"

    bag.write("chatter",s)
    bag.write("chatter",s)
    bag.write("chatter",s)
    # 关闭流
    bag.close()

2. 가방 읽기

#! /usr/bin/env python
import rospy
import rosbag
from std_msgs.msg import String

if __name__ == "__main__":
    #初始化节点 
    rospy.init_node("w_bag_p")

    # 创建 rosbag 对象
    bag = rosbag.Bag("/home/rosdemo/demo/test.bag",'r')
    # 读数据
    bagMessage = bag.read_messages("chatter")
    for topic,msg,t in bagMessage:
        rospy.loginfo("%s,%s,%s",topic,msg,t)
    # 关闭流
    bag.close()

결과 예:


2. rqt 도구 상자

이전에는 ROS에서 다음과 같은 몇 가지 실용적인 도구가 사용되었습니다. 녹음 및 재생을 위한 ros_bag, TF 트리를 생성할 수 있는 tf2_tools... 이러한 도구는 개발의 편의성을 크게 향상시키지만 몇 가지 문제도 있습니다. tools 일부 명령어 연산을 포함하고 있어 적용하기 불편함 ROS에서는 rqt toolbox를 제공하고 tool을 호출할 때 command 연산을 그래픽 연산으로 대체하여 적용이 보다 편리하고 연산 효율이 향상되며, 사용자 경험이 최적화됩니다.

개념

ROS는 QT 프레임워크를 기반으로 로봇 개발을 위한 일련의 시각적 도구를 제공하며 이러한 도구 모음은 rqt입니다.

효과

ROS 시각적 디버깅을 구현하고 동일한 창에서 여러 구성 요소를 열어 개발 효율성을 높이고 사용자 경험을 최적화하는 것이 편리합니다.

구성

rqt 도구 상자는 세 부분으로 구성됩니다.

  • rqt - 핵심 구현, 개발자가 주의를 기울일 필요 없음
  • rqt_common_plugins - rqt에서 일반적으로 사용되는 도구 세트
  • rqt_robot_plugins - 작동 중에 로봇과 상호 작용하는 플러그인(예: rviz)

2.1 rqt 설치 및 기본 사용

1. 설치

  • 일반적으로 데스크톱 정식 버전을 설치하면 도구 상자가 함께 제공됩니다.

  • 설치가 필요한 경우 다음과 같이 설치할 수 있습니다.

    $ sudo apt-get install ros-noetic-rqt
    $ sudo apt-get install ros-noetic-rqt-common-plugins
    

2. 시작

rqt시작하는 방법에는 두 가지가 있습니다.

  • 방법 1:rqt
  • 방법 2:rosrun rqt_gui rqt_gui

기본 사용 예: rqt를 사용하여 작은 거북이가 원형 동작을 하도록 메시지를 게시합니다. 결과 예는 다음과 같습니다.

2.2 rqt 일반적으로 사용되는 플러그인: rqt_graph

rqt에는 일반적으로 사용되는 플러그인이 있어 rqt_graph직접 사용할 수 있는 계산 그래프를 시각적으로 표시할 수 있습니다.

rqt_graph

시작하십시오.

사용 예:

원은 노드이고 상자는 주제입니다.


2.3 rqt 일반적으로 사용되는 플러그인: rqt_console

**소개:**rqt_console은 ROS에서 로그를 표시하고 필터링하기 위한 그래픽 플러그인입니다.

**준비:** 노드 노드를 작성하여 다양한 수준에서 로그 정보를 출력합니다.

/*  
    ROS 节点:输出各种级别的日志信息

*/
#include "ros/ros.h"

int main(int argc, char *argv[])
{
    
    
    ros::init(argc,argv,"log_demo");
    ros::NodeHandle nh;

    ros::Rate r(0.3);
    while (ros::ok())
    {
    
    
        ROS_DEBUG("Debug message d");
        ROS_INFO("Info message oooooooooooooo");
        ROS_WARN("Warn message wwwww");
        ROS_ERROR("Erroe message EEEEEEEEEEEEEEEEEEEE");
        ROS_FATAL("Fatal message FFFFFFFFFFFFFFFFFFFFFFFFFFFFF");
        r.sleep();
    }


    return 0;
}

시작:

rqt의 플러그인에 추가하거나 다음으로 rqt_console시작할 수 있습니다.


2.4 rqt 일반적으로 사용되는 플러그인: rqt_plot

**소개:** 주제에 게시된 데이터를 2D 드로잉 형태로 그릴 수 있는 그래픽 드로잉 플러그인

**준비:** turtlesim 거북이 노드와 키보드 제어 노드를 시작하고 rqt_plot을 통해 거북이 포즈를 얻습니다.

**시작:** rqt의 플러그인에 추가하거나 rqt_plot시작을 사용할 수 있습니다.

사용 예:


2.5 rqt 일반적으로 사용되는 플러그인: rqt_bag

**소개:** 백 파일 기록 및 재생을 위한 그래픽 플러그인

**준비:**turtlesim 거북이 노드 및 키보드 제어 노드 시작

**시작:** rqt의 플러그인에 추가하거나 rqt_bag시작을 사용할 수 있습니다.

녹음:

다시 하다:


사용 예:


참조

http://www.autolabor.com.cn/book/ROSTutorials/di-2-zhang-ros-jia-gou-she-ji/23-fu-wu-tong-xin/224-fu-wu-tong- xin-zi-ding-yi-srv-diao-yong-b-python.html

추천

출처blog.csdn.net/qq_44940689/article/details/129475241