ROS를 시작하자 그 6

12166 단어 C++파이썬ROS

마지막 내용



그 5

이번 내용



이번에는 ROS의 GUI에 대해 살펴 보겠습니다.
참고 : h tp // 우우키. 로 s. 오 rg / 자 / ゔ ぃ ああ ざ ち お ん / 쓰리 아 ls

시각화 도구 rviz



rviz라는 도구를 사용하면 로봇의 내부 정보와 센서의 시각화를 할 수 있습니다.

시작하는 방법



roscoe를 시작한 후 $ rosrun rviz rviz에서 시작합니다.

Turtlebot 시뮬레이터에서 사용해보기


シミュレーターのインストール
$ sudo apt-get install ros-kinetic-turtlebot-gazebo
$ source ~/.bashrc
立ち上げる
$ roslaunch turtlebot_gazebo turtlebot_world.launch
別のターミナルで自律移動プログラムも立ち上げる
$ roslaunch turtlebot_gazebo amcl_demo.launch
別のターミナルでrvizを立ち上げる
$ rosrun rviz rviz

처음에는 아무것도 표시되지 않지만 화면 왼쪽 하단의 추가 버튼에서 표시할 항목을 추가할 수 있습니다.
화면 왼쪽에 늘어서 있는 것은 표시중의 것입니다.

예를 들어,
By display type에서 RobotModel을 선택하면 로봇 모델이 표시됩니다.
By topic에서/map의 Map을 선택하면 미리 작성된 지도가 표시됩니다.
/camera/depth/points에서 PointCloud2를 선택하면 Kinect 센서 정보가 표시됩니다.
/odom의 Odometry를 선택하면 로봇의 현재 위치가 표시됩니다.
/move_base/NavfnROS/plan의 경로를 선택하면 로봇이 가고 싶은 경로가 표시됩니다.
이것들은 Publish 되고 있는 Topic을 3차원적으로 표시시키고 있는 것입니다.

또한 화면 상단의 2D Navi Goal 버튼을 눌러 로봇 근처의 지면을 드래그하면 로봇을 자율적으로 이동할 수 있습니다. 표시되는 녹색 화살표의 근원이 골 위치, 방향이 로봇의 골 자세가 됩니다.

rqt



지금까지도 rqt_graph나 rqt_console등을 사용해 왔습니다만, 그 동료를 소개합니다.

rqt_plot



게시된 주제의 값을 그래프로 표시할 수 있습니다. $ rqt_plot 에서 일어납니다.

위의 란에/turtle1/cmd_vel/linear/x등이라고 써 + 버튼을 누르거나, $ rqt_plot /turtle1/cmd_vel/linear/x 로서 시작하면 된다.

rqt_ez_publisher



슬라이더 등으로 Topic에 Publish 할 수 있습니다.
インストール
$ sudo apt-get install ros-kinetic-rqt-ez-publisher
$ roscore
$ rosrun turtles turtles_node
$ rosrun rqt_ez_publisher rqt_ez_publisher

이것으로 일어납니다. 화면에서 Topic을 선택하면/turtle1/cmd_vel을 Publish하는 GUI 등으로 할 수 있습니다.


rqt



지금까지 나온 여러 rqt 모듈을 같은 Window에 정리해 봅시다.$ rqt 에서 시작하여 화면의 Plugins에서 Visualization의 Plot이나 Easy Message Publisher를 선택하면 같은 Window에 정리됩니다.


조이스틱으로 조종하기



조이스틱으로 로봇을 조종하고 싶을 때도 있다고 생각하므로, 간단하게 방법을 소개합니다.ls -l /dev/input/js* 같으면 인식되는 조이스틱을 알 수 있습니다.
우선, $ rosrun joy joy_node (/dev/input/js0 이외로 인식되고 있는 조이스틱을 사용한다면 $ rosrun joy joy_node _dev:=/dev/input/js1 )를 실행하면, sensor_msgs/Joy형의/joy라고 하는 Topic을 Publish 합니다.

그것을 사용해, 0번 버튼을 누르면서 이동 조작을 할 수 있는 프로그램을 실행해 봅시다.

joy_twist.py
import rospy
from sensor_msgs.msg import Joy
from geometry_msgs.msg import Twist

class JoyTwist(object):
    def __init__(self):
        self._joy_sub = rospy.Subscriber('joy', Joy, self.joy_callback, queue_size=1)
        self._twist_pub = rospy.Publisher('cmd_vel', Twist, queue_size=1)

    def joy_callback(self, joy_msg):
        if joy_msg.buttons[0] == 1:
            twist = Twist()
            twist.linear.x = joy_msg.axes[1] * 0.5
            twist.angular.z = joy_msg.axes[0] * 1.0
            self._twist_pub.publish(twist)

if __name__ == '__main__':
    rospy.init_node('joy_twist')
    joy_twist = JoyTwist()
    rospy.spin()
$ roslaunch kabuki_gazebo kabuki_playground.launch 에서 시뮬레이터를 실행하고,$ rosrun ros_beginner joy_twist.py cmd_vel:=/mobile_base/commands/velocity 에서 실행합니다.
덧붙여서 $ sudo apt-get install ros-kinetic-teleop-twist-joy 로 기능을 여러가지 사용할 수 있게 됩니다.

C++라면,

joy_twist.cpp
#include <ros/ros.h>
#include <sensor_msgs/Joy.h>
#include <geometry_msgs/Twist.h>

class JoyTwist
{
public:
  JoyTwist()
  {
    ros::NodeHandle node;
    joy_sub_ = node.subscribe("joy", 1, &JoyTwist::joyCallback, this);
    twist_pub_ = node.advertise<geometry_msgs::Twist>("cmd_vel", 1);
  }

  void joyCallback(const sensor_msgs::Joy &joy_msg)
  {
    if (joy_msg.buttons[0] == 1)
    {
      geometry_msgs::Twist twist;
      twist.linear.x = joy_msg.axes[1] * 0.5;
      twist.angular.z = joy_msg.axes[0] * 1.0;
      twist_pub_.publish(twist);
    }
  }
private:
  ros::Subscriber joy_sub_;
  ros::Publisher twist_pub_;
};

int main(int argc, char **argv) {
  ros::init(argc, argv, "joy_twist");
  JoyTwist joy_twist;
  ros::spin();
}

라고 쓸 수 있으므로, CMakeLists.txt를 편집해 catkin_make로 빌드해, rosrun ros_beginner joy_twist 로 실행합시다.

요약



이번에는 ROS의 GUI에 대해 살펴 보았습니다.
다음 번에는 ROS의 분산 기능을 살펴 보겠습니다.

그 7

좋은 웹페이지 즐겨찾기