ROS를 시작하자 그 6
마지막 내용
그 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.pyimport 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
Reference
이 문제에 관하여(ROS를 시작하자 그 6), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hagi-suke/items/709699c7ed988ea167b0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이번에는 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.pyimport 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
Reference
이 문제에 관하여(ROS를 시작하자 그 6), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hagi-suke/items/709699c7ed988ea167b0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
シミュレーターのインストール
$ 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
지금까지도 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.pyimport 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
Reference
이 문제에 관하여(ROS를 시작하자 그 6), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hagi-suke/items/709699c7ed988ea167b0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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()
#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();
}
이번에는 ROS의 GUI에 대해 살펴 보았습니다.
다음 번에는 ROS의 분산 기능을 살펴 보겠습니다.
그 7
Reference
이 문제에 관하여(ROS를 시작하자 그 6), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hagi-suke/items/709699c7ed988ea167b0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)