├── README.md
└── ros1_tutorial
├── camera_calibration
├── how_to_calibrate_monocular_camera.md
└── img
│ ├── monocular_camera_calibrate_1.png
│ ├── monocular_camera_calibrate_2.png
│ ├── monocular_camera_calibrate_3.png
│ ├── monocular_camera_calibrate_4.png
│ ├── monocular_camera_calibrate_5.png
│ ├── monocular_camera_calibrate_6.png
│ └── monocular_camera_calibrate_7.png
├── catkin_ws
└── src
│ ├── roscpp
│ └── learning_tf
│ │ ├── CMakeLists.txt
│ │ ├── launch
│ │ └── start_demo.launch
│ │ ├── package.xml
│ │ └── src
│ │ ├── turtle_tf_broadcaster.cpp
│ │ └── turtle_tf_listener.cpp
│ └── rospy
│ ├── ar_marker
│ └── scripts
│ │ └── pub_ar_pose.py
│ ├── learning_tf
│ ├── CMakeLists.txt
│ ├── launch
│ │ └── start_demo.launch
│ ├── nodes
│ │ ├── dynamic_tf_broadcaster.py
│ │ ├── fixed_tf_broadcaster.py
│ │ ├── turtle_tf_broadcaster.py
│ │ └── turtle_tf_listener.py
│ ├── package.xml
│ └── src
│ │ ├── turtle_tf_broadcaster.cpp
│ │ └── turtle_tf_listener.cpp
│ ├── rospy_tutorial
│ ├── CMakeLists.txt
│ ├── launch
│ │ └── turtlesim_param.launch
│ ├── package.xml
│ ├── scripts
│ │ ├── add2ints_client.py
│ │ ├── add2ints_server.py
│ │ ├── example_pub.py
│ │ ├── example_sub.py
│ │ ├── move_turtle_by_param.py
│ │ ├── move_turtle_client.py
│ │ ├── move_turtle_py_param.py
│ │ ├── move_turtle_server.py
│ │ ├── move_turtlesim.py
│ │ ├── move_turtlesim_1.py
│ │ ├── move_turtlesim_2.py
│ │ ├── move_turtlesim_3.py
│ │ ├── move_turtlesim_4.py
│ │ ├── remote_turtle.py
│ │ └── set_go_turtle.py
│ ├── setup.py
│ ├── src
│ │ └── my_lib
│ │ │ ├── GetChar.py
│ │ │ └── __init__.py
│ └── srv
│ │ ├── AddTwoInts.srv
│ │ └── AngleDistance.srv
│ ├── tb3_cleaner
│ ├── CMakeLists.txt
│ ├── package.xml
│ ├── scripts
│ │ ├── 01_straight.py
│ │ ├── 02_rotate.py
│ │ ├── 03_go2goal.py
│ │ ├── 04_gotogoal.py
│ │ ├── 05_pub_tb3_pose2d.py
│ │ ├── 06_straight_by_pose2d.py
│ │ ├── 07_rotate_by_pose2d.py
│ │ ├── 08_test_lib_tb3move.py
│ │ ├── align2marker.py
│ │ ├── align_n_keep_dist.py
│ │ ├── go2marker.py
│ │ ├── keep_dist2marker.py
│ │ ├── move2marker_temp.py
│ │ └── pub_ar_pose.py
│ ├── setup.py
│ └── src
│ │ └── tb3_cleaner
│ │ ├── GetChar.py
│ │ ├── MoveTB3.py
│ │ └── __init__.py
│ └── turtlesim_cleaner
│ ├── CMakeLists.txt
│ ├── package.xml
│ └── scripts
│ ├── go2goal.py
│ ├── move.py
│ ├── rotate.py
│ └── sub_pose.py
├── darknetROS
├── darknet_ros_1_install_n_example.md
├── darknet_ros_2_using_cuda.md
└── darknet_ros_connect2github_ssh.md
├── img
├── GPS_info_around_D_Station.png
├── PNU_google_map1.png
├── PNU_google_map2.png
├── PNU_google_map3.png
├── RollPitchYaw_ARmarker.png
├── Screenshot from 2020-01-21 07-51-55.png
├── Screenshot from 2020-01-21 16-54-37.png
├── Screenshot from 2020-01-21 16-56-11.png
├── Screenshot from 2020-01-21 16-57-38.png
├── Screenshot from 2020-01-21 17-31-03.png
├── add_frame.png
├── ar_marker
│ ├── marker_id
│ │ ├── AR_Marker_03.png
│ │ ├── markers0to8.png
│ │ └── markers9to17.png
│ ├── orientation_z
│ │ ├── orientation_z_eq0.png
│ │ ├── orientation_z_gt0.png
│ │ └── orientation_z_lt0.png
│ ├── position_x
│ │ ├── position_x_eq0.png
│ │ ├── position_x_gt0.png
│ │ └── position_x_lt0.png
│ └── position_z
│ │ ├── mesure1m.png
│ │ ├── mesure2m.png
│ │ ├── mesure3m.png
│ │ └── mesure4m.png
├── ar_marker_axis.png
├── ar_marker_axis.psp
├── ar_marker_rviz1.png
├── ar_marker_rviz2.png
├── attention.png
├── atti_tmp.png
├── bebop_attitude.png
├── bebop_attitude.psp
├── bebop_autonomy_readthedoc.png
├── bebop_n_marker3.png
├── bebop_n_marker3.psp
├── calibration
│ ├── calibrate_monocular_1.png
│ ├── calibrate_monocular_2.png
│ ├── calibrate_monocular_3.png
│ ├── calibrate_monocular_4.png
│ ├── calibrate_monocular_5.png
│ └── calibrate_monocular_6.png
├── chk_chrome_ver.png
├── chk_chrome_ver2.png
├── chrome_drv1.png
├── chrome_drv_down.png
├── chrome_seeting_menu.gif
├── cmd4turtlesim.png
├── complex_multimaster_network.png
├── cuDNN_8_2_2_x86_64.png
├── cuda_toolkit_11_4.png
├── cv_bridge.png
├── cv_bridge_after.png
├── cv_bridge_before.png
├── darknet_ROS
│ ├── darknet_ros_sample1.png
│ ├── darknet_ros_sample2.png
│ ├── darknet_ros_uvc.png
│ ├── how2register_sshkey2github_01.png
│ ├── how2register_sshkey2github_02.png
│ ├── how2register_sshkey2github_03.png
│ ├── how2register_sshkey2github_04.png
│ ├── how2register_sshkey2github_05.png
│ └── how2register_sshkey2github_06.png
├── download_nodejs.png
├── drone_on_map1.png
├── drone_on_map2.png
├── equationTfDemo.png
├── go2goal_py_1.png
├── go2goal_py_2.png
├── gps_bearing_n_attitude.png
├── gps_cn_korchamhrd.png
├── idea.png
├── image_publisher.png
├── info_of_chrome.png
├── install_sphinx_1.png
├── install_sphinx_1_1.png
├── install_sphinx_1_2.png
├── install_sphinx_2.png
├── install_sphinx_2_1.png
├── install_sphinx_2_2.png
├── install_sphinx_3.png
├── install_sphinx_3_1.png
├── install_sphinx_3_2.png
├── kakao_api
│ ├── kakao_api_01.png
│ ├── kakao_api_02.png
│ ├── kakao_api_03.png
│ ├── kakao_api_04.png
│ ├── kakao_api_05.png
│ ├── kakao_api_06.png
│ ├── kakao_api_07.png
│ ├── kakao_api_08.png
│ ├── kakao_api_09.png
│ ├── kakao_api_10.png
│ └── kakao_api_11.png
├── m_per_lat_lon.png
├── marker5.png
├── marker5_v.png
├── marker_pose1.png
├── marker_pose2.png
├── marker_pose3.png
├── marker_pose_o.png
├── marker_pose_x.png
├── mouse_pointer_1.psp
├── move_py_1.png
├── move_py_2.png
├── move_turtle_svc_1.png
├── move_turtle_svc_2.png
├── move_turtle_svc_3.png
├── move_turtle_svc_4.png
├── multiple_computer_ros_network.png
├── my_1st_pkg_pub_sub.png
├── my_1st_pkg_rqt_graph.png
├── note4brocken.png
├── open_tf_frames_pdf.png
├── pnu_map.png
├── robot_n_marker.png
├── robot_n_marker.psp
├── robot_n_marker1.png
├── robot_n_marker2.png
├── robot_n_marker2.psd
├── robot_n_marker2.psp
├── robot_n_marker3.png
├── robot_n_marker3.psp
├── rotate_py_1.png
├── rotate_py_2.png
├── rqt_graph_turtlesim.png
├── rqt_tf_tree.png
├── running_sphinx.png
├── sav79D1.tmp
├── single_computer_ros_network.png
├── single_computer_ros_network_example.png
├── sphinks_takeoff.png
├── test_param_0.png
├── test_param_1.png
├── test_param_2.png
├── tf_axis_color.png
├── tf_demo_1of2.png
├── tf_demo_2of2.png
├── tf_frmaes_pdf.png
├── tf_marker.png
├── tf_marker_org.png
├── tf_rviz.png
├── time_travel.png
├── turtlebot3
│ ├── RPi_GPIO.png
│ ├── button_upper_right.png
│ ├── hotspot01.png
│ ├── hotspot02.png
│ ├── hotspot03.png
│ ├── hotspot04.png
│ ├── menu_button.png
│ ├── sd_boot01.png
│ ├── sd_boot02.png
│ ├── sd_boot03.png
│ ├── sd_card01.png
│ ├── sd_card02.png
│ ├── sd_card03.png
│ ├── sd_card04.png
│ └── usb2uart.png
├── turtlesim_move_py.png
├── turtlesim_node.png
├── turtlesim_node_msg.png
├── turtlsim_topic_echo.png
├── ubuntu
│ ├── 1604
│ │ ├── 00_grub.png
│ │ ├── 01_welcome.png
│ │ ├── 02_connect_wifi_1.png
│ │ ├── 02_connect_wifi_2.png
│ │ ├── 02_during_setup.png
│ │ ├── 03_setup_where.png
│ │ ├── 04_add_partition.png
│ │ ├── 05_swap_partition.png
│ │ ├── 05_swap_partition_.png
│ │ ├── 06_root_partition.png
│ │ ├── 07_partition_result.png
│ │ ├── 08_apply_partition.png
│ │ ├── 09_where_live.png
│ │ ├── 10_kb_layout.png
│ │ ├── 11_whoru.png
│ │ ├── 12_start_install.png
│ │ ├── 13_finish_install.png
│ │ ├── 13_installing.png
│ │ ├── _download_iso.png
│ │ ├── _templete.png
│ │ ├── disk_mgmt_00.png
│ │ ├── disk_mgmt_01.png
│ │ ├── disk_mgmt_02.png
│ │ ├── disk_mgmt_03.png
│ │ ├── disk_mgmt_04.png
│ │ ├── disk_mgmt_05.png
│ │ ├── grub_loader.png
│ │ ├── system_properties.png
│ │ ├── system_setting_ico.png
│ │ ├── upgrade1804_1.png
│ │ └── upgrade1804_2.png
│ ├── 1804
│ │ ├── VirtualBox_bionic_04_07_2021_22_11_36.png
│ │ ├── VirtualBox_bionic_04_07_2021_22_12_11.png
│ │ ├── VirtualBox_bionic_04_07_2021_22_12_29.png
│ │ ├── VirtualBox_bionic_04_07_2021_22_14_04.png
│ │ ├── VirtualBox_bionic_04_07_2021_22_15_02.png
│ │ ├── VirtualBox_bionic_04_07_2021_22_15_11.png
│ │ ├── VirtualBox_bionic_04_07_2021_22_15_19.png
│ │ ├── VirtualBox_bionic_04_07_2021_22_15_30.png
│ │ ├── VirtualBox_bionic_04_07_2021_22_16_19.png
│ │ ├── VirtualBox_bionic_04_07_2021_22_16_30.png
│ │ ├── VirtualBox_bionic_04_07_2021_22_17_04.png
│ │ ├── VirtualBox_bionic_04_07_2021_22_17_12.png
│ │ ├── VirtualBox_bionic_04_07_2021_22_17_25.png
│ │ ├── VirtualBox_bionic_04_07_2021_22_17_37.png
│ │ ├── VirtualBox_bionic_04_07_2021_22_20_00.png
│ │ ├── VirtualBox_bionic_04_07_2021_22_20_34.png
│ │ ├── VirtualBox_bionic_04_07_2021_22_21_32.png
│ │ ├── VirtualBox_bionic_04_07_2021_22_21_42.png
│ │ ├── VirtualBox_bionic_04_07_2021_22_22_06.png
│ │ ├── VirtualBox_bionic_04_07_2021_22_23_27.png
│ │ ├── VirtualBox_bionic_04_07_2021_22_23_43.png
│ │ ├── VirtualBox_bionic_04_07_2021_22_23_48.png
│ │ ├── VirtualBox_bionic_04_07_2021_22_27_49.png
│ │ ├── VirtualBox_bionic_04_07_2021_23_16_43.png
│ │ ├── _download_iso.png
│ │ ├── disk01.png
│ │ ├── disk02.png
│ │ ├── disk03.png
│ │ ├── disk04.png
│ │ ├── disk05.png
│ │ ├── disk06.png
│ │ ├── disk07.png
│ │ ├── disk08.png
│ │ ├── eject_button.png
│ │ ├── hud.png
│ │ ├── install_01_welcome.png
│ │ ├── install_02_kb_layout.png
│ │ ├── install_03_update_etc_sw.png
│ │ ├── install_04_how_to_install.png
│ │ ├── install_05_write_to_disk.png
│ │ ├── install_06_select_timezone.png
│ │ ├── install_07_who_are_you.png
│ │ ├── install_08_copy_files.png
│ │ ├── menu_button.png
│ │ ├── run_Disks.png
│ │ └── system_setting_ico.png
│ ├── 00_grub.png
│ ├── __win_key.png
│ ├── _download_rufus.png
│ ├── _rufus01.png
│ ├── _rufus02.png
│ ├── _rufus_1.png
│ ├── _rufus_2.png
│ ├── disk_mgmt_00.png
│ ├── disk_mgmt_01.png
│ ├── disk_mgmt_02.png
│ ├── disk_mgmt_03.png
│ ├── disk_mgmt_04.png
│ ├── disk_mgmt_05.png
│ ├── grub_loader.png
│ └── system_properties.png
├── ubuntu16
│ ├── 00_grub.png
│ ├── 01_welcome.png
│ ├── 02_connect_wifi_1.png
│ ├── 02_connect_wifi_2.png
│ ├── 02_during_setup.png
│ ├── 03_setup_where.png
│ ├── 04_add_partition.png
│ ├── 05_swap_partition.png
│ ├── 05_swap_partition_.png
│ ├── 06_root_partition.png
│ ├── 07_partition_result.png
│ ├── 08_apply_partition.png
│ ├── 09_where_live.png
│ ├── 10_kb_layout.png
│ ├── 11_whoru.png
│ ├── 12_start_install.png
│ ├── 13_finish_install.png
│ ├── 13_installing.png
│ ├── __win_key.png
│ ├── _download_iso.png
│ ├── _download_rufus.png
│ ├── _rufus01.png
│ ├── _rufus02.png
│ ├── _rufus_1.png
│ ├── _rufus_2.png
│ ├── _templete.png
│ ├── disk_mgmt_00.png
│ ├── disk_mgmt_01.png
│ ├── disk_mgmt_02.png
│ ├── disk_mgmt_03.png
│ ├── disk_mgmt_04.png
│ ├── disk_mgmt_05.png
│ ├── grub_loader.png
│ ├── system_properties.png
│ ├── system_setting_ico.png
│ ├── upgrade1804_1.png
│ └── upgrade1804_2.png
├── urdf1_1_myfirst_rviz1.png
├── urdf1_1_myfirst_rviz2.png
├── urdf1_2_multiple_shape.png
├── urdf1_3_origins.png
├── urdf1_4_materials.png
├── urdf1_5_visual.png
├── urdf2_6_flexible.png
├── version_of_chrome.png
├── web_druver_chrome_1.png
├── xyz_color.png
└── yolo_v2tiny_cuda.png
├── install_n_config
├── install_ROS.md
├── install_ROS_Kinetic.md
└── install_ROS_Melodic.md
├── multimaster_fkie
├── ROS-systems.pdf
├── fkie_pc1_turtle.png
├── fkie_pc2_turtle.png
├── multimaster_fkie.md
├── multiple_computer_ros_network.png
├── single_computer_ros_network.png
└── single_computer_ros_network_example.png
├── roscpp
├── callback_n_spin.md
├── image_transport
│ └── it_beginner_writing_simple_img_pub.md
├── nodelet.md
├── roscpp_1_WritingPubSub.md
├── spin_n_sleep.md
├── tf_1_Instroduction.md
├── tf_1_broadcaster.md
├── tf_2_broadcaster.md
├── tf_3_listener.md
├── ts1_teleop_turtlesim.md
├── ts2_sub_turtlesim_pose.md
└── ts3_straight_move_turtlesim.md
├── rospy
├── ar_1_ar_track_alvar.md
├── ar_2_analysis_marker.md
├── bebop2
│ ├── bb2_1_bebop_autonomy.md
│ ├── bb2_1_bebop_autonomy_noetic.md
│ ├── bb2_2_parrot_sphinx.md
│ ├── bb2_3_teleop_key.md
│ ├── bb2_4_move_by_odom.md
│ ├── bb2_5_mark_bebop2_on_web.md
│ ├── bb2_6_lat_lon_bearing.md
│ ├── bb2_6_move_by_gps.md
│ ├── bb2_6_move_by_gps_D_Stattion.md
│ └── bb2_6_move_by_gps_PNU.md
├── mv_tutle_1_MoveInStraightLine.md
├── mv_tutle_2_RotateLeftRight.md
├── mv_tutle_3_Go2Goal.md
├── open_cv
│ ├── opencv_1_cv_bridge.md
│ └── opencv_2_image_publisher.md
├── rospy_1_How2UsePythonWithCatkin_1.md
├── rospy_2_WritingSimplePubSub.md
├── rospy_3_WritingServiceServerClient1.md
├── rospy_4_How2UsePythonWithCatkin_2.md
├── rospy_5_WritingServiceServerClient2.md
├── rospy_6_How2UseParameter.md
├── rqt_1_create_rqt_plugin_pkg.md
├── rqt_2_writing_python_plugin.md
├── tf_0_Instroduction.md
├── tf_1_broadcaster.md
├── tf_2_listener.md
├── tf_3_adding_frame.md
├── tf_4_tf_n_time.md
├── tf_5_time_travel.md
└── turtlebot3
│ ├── tb3_10_search_ar_marker.md
│ ├── tb3_1_Move_in_Straight_Line.md
│ ├── tb3_2_Rotate_Left_n_Right.md
│ ├── tb3_3_Go2Goal.md
│ ├── tb3_4_GoToGoal.md
│ ├── tb3_5_Sub_Odom_Pub_Pose2D.md
│ ├── tb3_6_Straight_by_Pose2D.md
│ ├── tb3_7_Rotate_by_Pose2D.md
│ ├── tb3_8_Rotate_n_Straight_Library.md
│ ├── tb3_9_move2xy.md
│ └── tb3_topic.md
├── temp
├── Quaternion.md
├── ar_tb3_1_ar_track_alvar.md
└── templet.md
├── turtlebot3
├── tb3_1_set_hotspot_on_1804.md
├── tb3_2_RPi_serial_console.md
└── tb3_3_RPi_udev_rules.md
├── ubuntu
├── install_ubuntu_1604_lts.md
└── install_ubuntu_1804_lts.md
└── urdf
├── urdf_1_building_visual_robot_model.md
├── urdf_2_building_movable_robot_model.md
└── urdf_3_adding_physical_n_collision.md
/ros1_tutorial/camera_calibration/img/monocular_camera_calibrate_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/camera_calibration/img/monocular_camera_calibrate_1.png
--------------------------------------------------------------------------------
/ros1_tutorial/camera_calibration/img/monocular_camera_calibrate_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/camera_calibration/img/monocular_camera_calibrate_2.png
--------------------------------------------------------------------------------
/ros1_tutorial/camera_calibration/img/monocular_camera_calibrate_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/camera_calibration/img/monocular_camera_calibrate_3.png
--------------------------------------------------------------------------------
/ros1_tutorial/camera_calibration/img/monocular_camera_calibrate_4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/camera_calibration/img/monocular_camera_calibrate_4.png
--------------------------------------------------------------------------------
/ros1_tutorial/camera_calibration/img/monocular_camera_calibrate_5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/camera_calibration/img/monocular_camera_calibrate_5.png
--------------------------------------------------------------------------------
/ros1_tutorial/camera_calibration/img/monocular_camera_calibrate_6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/camera_calibration/img/monocular_camera_calibrate_6.png
--------------------------------------------------------------------------------
/ros1_tutorial/camera_calibration/img/monocular_camera_calibrate_7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/camera_calibration/img/monocular_camera_calibrate_7.png
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/roscpp/learning_tf/launch/start_demo.launch:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
12 |
14 |
15 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/roscpp/learning_tf/package.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | learning_tf
4 | 0.0.0
5 | The learning_tf package
6 |
7 |
8 |
9 |
10 | ground0
11 |
12 |
13 |
14 |
15 |
16 | TODO
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 | catkin
52 | roscpp
53 | rospy
54 | tf
55 | turtlesim
56 | roscpp
57 | rospy
58 | tf
59 | turtlesim
60 | roscpp
61 | rospy
62 | tf
63 | turtlesim
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/roscpp/learning_tf/src/turtle_tf_broadcaster.cpp:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 | #include
4 |
5 | std::string turtle_name;
6 |
7 | void poseCallback(const turtlesim::PoseConstPtr& msg) {
8 | static tf::TransformBroadcaster br;
9 | tf::Transform transform;
10 | transform.setOrigin( tf::Vector3(msg->x, msg->y, 0.0) );
11 | tf::Quaternion q;
12 | q.setRPY(0, 0, msg->theta);
13 | transform.setRotation(q);
14 | br.sendTransform(tf::StampedTransform(transform, ros::Time::now(), "world", turtle_name));
15 | }
16 |
17 | int main(int argc, char** argv) {
18 | ros::init(argc, argv, "my_tf_broadcaster");
19 | if (argc != 2){ROS_ERROR("need turtle name as argument"); return -1;};
20 | turtle_name = argv[1];
21 |
22 | ros::NodeHandle node;
23 | ros::Subscriber sub = node.subscribe(turtle_name+"/pose", 10, &poseCallback);
24 |
25 | ros::spin();
26 | return 0;
27 | };
28 |
29 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/roscpp/learning_tf/src/turtle_tf_listener.cpp:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 | #include
4 | #include
5 |
6 | int main(int argc, char** argv) {
7 | ros::init(argc, argv, "my_tf_listener");
8 |
9 | ros::NodeHandle node;
10 |
11 | ros::service::waitForService("spawn");
12 | ros::ServiceClient add_turtle = node.serviceClient("spawn");
13 | turtlesim::Spawn srv;
14 | add_turtle.call(srv);
15 |
16 | ros::Publisher turtle_vel = node.advertise("turtle2/cmd_vel", 10);
17 |
18 | tf::TransformListener listener;
19 |
20 | ros::Rate rate(10.0);
21 | while (node.ok()) {
22 | tf::StampedTransform transform;
23 | try{
24 | listener.lookupTransform("/turtle2", "/turtle1", ros::Time(0), transform);
25 | }
26 | catch (tf::TransformException &ex) {
27 | ROS_ERROR("%s",ex.what());
28 | ros::Duration(1.0).sleep();
29 | continue;
30 | }
31 |
32 | geometry_msgs::Twist vel_msg;
33 | vel_msg.angular.z = 4.0 * atan2(transform.getOrigin().y(),transform.getOrigin().x());
34 | vel_msg.linear.x = 0.5 * sqrt(pow(transform.getOrigin().x(), 2) + pow(transform.getOrigin().y(), 2));
35 | turtle_vel.publish(vel_msg);
36 |
37 | rate.sleep();
38 | }
39 | return 0;
40 | };
41 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/learning_tf/launch/start_demo.launch:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
14 |
15 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/learning_tf/nodes/dynamic_tf_broadcaster.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/catkin_ws/src/rospy/learning_tf/nodes/dynamic_tf_broadcaster.py
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/learning_tf/nodes/fixed_tf_broadcaster.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/catkin_ws/src/rospy/learning_tf/nodes/fixed_tf_broadcaster.py
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/learning_tf/nodes/turtle_tf_broadcaster.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | import rospy
4 | import tf
5 | import turtlesim.msg
6 |
7 | def handle_turtle_pose(msg, turtlename):
8 | br = tf.TransformBroadcaster()
9 | br.sendTransform((msg.x, msg.y, 0),
10 | tf.transformations.quaternion_from_euler(0, 0, msg.theta),
11 | rospy.Time.now(),
12 | turtlename,
13 | "world")
14 |
15 | if __name__ == '__main__':
16 | rospy.init_node('turtle_tf_broadcaster')
17 | turtlename = rospy.get_param('~turtle')
18 | rospy.Subscriber('/%s/pose' % turtlename,
19 | turtlesim.msg.Pose,
20 | handle_turtle_pose,
21 | turtlename)
22 | rospy.spin()
23 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/learning_tf/nodes/turtle_tf_listener.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | import rospy
4 | import math
5 | import tf
6 | import geometry_msgs.msg
7 | import turtlesim.srv
8 |
9 | if __name__ == '__main__':
10 | rospy.init_node('turtle_tf_listener')
11 |
12 | listener = tf.TransformListener()
13 |
14 | rospy.wait_for_service('spawn')
15 | spawner = rospy.ServiceProxy('spawn', turtlesim.srv.Spawn)
16 | spawner(4, 2, 0, 'turtle2')
17 |
18 | turtle_vel = rospy.Publisher('turtle2/cmd_vel', geometry_msgs.msg.Twist,queue_size=1)
19 |
20 | rate = rospy.Rate(10.0)
21 | while not rospy.is_shutdown():
22 | try:
23 | (trans,rot) = listener.lookupTransform('/turtle2', '/turtle1', rospy.Time(0))
24 | except (tf.LookupException, tf.ConnectivityException, tf.ExtrapolationException):
25 | continue
26 |
27 | angular = 4 * math.atan2(trans[1], trans[0])
28 | linear = 0.5 * math.sqrt(trans[0] ** 2 + trans[1] ** 2)
29 | cmd = geometry_msgs.msg.Twist()
30 | cmd.linear.x = linear
31 | cmd.angular.z = angular
32 | turtle_vel.publish(cmd)
33 |
34 | rate.sleep()
35 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/learning_tf/package.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | learning_tf
4 | 0.0.0
5 | The learning_tf package
6 |
7 |
8 |
9 |
10 | ground0
11 |
12 |
13 |
14 |
15 |
16 | TODO
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 | catkin
52 | roscpp
53 | rospy
54 | tf
55 | turtlesim
56 | roscpp
57 | rospy
58 | tf
59 | turtlesim
60 | roscpp
61 | rospy
62 | tf
63 | turtlesim
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/learning_tf/src/turtle_tf_broadcaster.cpp:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 | #include
4 |
5 | std::string turtle_name;
6 |
7 | void poseCallback(const turtlesim::PoseConstPtr& msg) {
8 | static tf::TransformBroadcaster br;
9 | tf::Transform transform;
10 | transform.setOrigin( tf::Vector3(msg->x, msg->y, 0.0) );
11 | tf::Quaternion q;
12 | q.setRPY(0, 0, msg->theta);
13 | transform.setRotation(q);
14 | br.sendTransform(tf::StampedTransform(transform, ros::Time::now(), "world", turtle_name));
15 | }
16 |
17 | int main(int argc, char** argv) {
18 | ros::init(argc, argv, "my_tf_broadcaster");
19 | if (argc != 2){ROS_ERROR("need turtle name as argument"); return -1;};
20 | turtle_name = argv[1];
21 |
22 | ros::NodeHandle node;
23 | ros::Subscriber sub = node.subscribe(turtle_name+"/pose", 10, &poseCallback);
24 |
25 | ros::spin();
26 | return 0;
27 | };
28 |
29 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/learning_tf/src/turtle_tf_listener.cpp:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 | #include
4 | #include
5 |
6 | int main(int argc, char** argv) {
7 | ros::init(argc, argv, "my_tf_listener");
8 |
9 | ros::NodeHandle node;
10 |
11 | ros::service::waitForService("spawn");
12 | ros::ServiceClient add_turtle = node.serviceClient("spawn");
13 | turtlesim::Spawn srv;
14 | add_turtle.call(srv);
15 |
16 | ros::Publisher turtle_vel = node.advertise("turtle2/cmd_vel", 10);
17 |
18 | tf::TransformListener listener;
19 |
20 | ros::Rate rate(10.0);
21 | while (node.ok()) {
22 | tf::StampedTransform transform;
23 | try{
24 | listener.lookupTransform("/turtle2", "/turtle1", ros::Time(0), transform);
25 | }
26 | catch (tf::TransformException &ex) {
27 | ROS_ERROR("%s",ex.what());
28 | ros::Duration(1.0).sleep();
29 | continue;
30 | }
31 |
32 | geometry_msgs::Twist vel_msg;
33 | vel_msg.angular.z = 4.0 * atan2(transform.getOrigin().y(),transform.getOrigin().x());
34 | vel_msg.linear.x = 0.5 * sqrt(pow(transform.getOrigin().x(), 2) + pow(transform.getOrigin().y(), 2));
35 | turtle_vel.publish(vel_msg);
36 |
37 | rate.sleep();
38 | }
39 | return 0;
40 | };
41 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/rospy_tutorial/launch/turtlesim_param.launch:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/rospy_tutorial/package.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | rospy_tutorial
4 | 0.0.0
5 | The rospy_tutorial package
6 |
7 |
8 |
9 |
10 | ground0
11 |
12 |
13 |
14 |
15 |
16 | TODO
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 | catkin
52 | geometry_msgs
53 | rospy
54 | message_generation
55 | geometry_msgs
56 | rospy
57 | geometry_msgs
58 | rospy
59 | message_runtime
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/rospy_tutorial/scripts/add2ints_client.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | import sys
4 | import rospy
5 | from rospy_tutorial.srv import *
6 |
7 | def add_two_ints_client(x, y):
8 | rospy.wait_for_service('add_two_ints')
9 | try:
10 | add_two_ints = rospy.ServiceProxy('add_two_ints', AddTwoInts)
11 | resp1 = add_two_ints(x, y)
12 | return resp1.sum
13 |
14 | except rospy.ServiceException, e:
15 | print "Service call failed: %s"%e
16 |
17 | def usage():
18 | return "%s [x y]"%sys.argv[0]
19 |
20 | if __name__ == "__main__":
21 | if len(sys.argv) == 3:
22 | x = int(sys.argv[1])
23 | y = int(sys.argv[2])
24 | else:
25 | print usage()
26 | sys.exit(1)
27 | print "Requesting %s+%s"%(x, y)
28 | print "%s + %s = %s"%(x, y, add_two_ints_client(x, y))
29 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/rospy_tutorial/scripts/add2ints_server.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | from rospy_tutorial.srv import AddTwoInts,AddTwoIntsResponse
4 | import rospy
5 |
6 | def svc_cb(req):
7 | print "Returning [%s + %s = %s]"%(req.a, req.b, (req.a + req.b))
8 | return AddTwoIntsResponse(req.a + req.b)
9 |
10 | def add_two_ints_server(): #
11 | rospy.init_node('add_two_ints_server')
12 | s = rospy.Service('add_two_ints', AddTwoInts, svc_cb)
13 | print "Ready to add two ints."
14 | rospy.spin()
15 |
16 | if __name__ == "__main__":
17 | add_two_ints_server()
18 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/rospy_tutorial/scripts/example_pub.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | import rospy
4 | from std_msgs.msg import String
5 |
6 | def simple_pub():
7 | rospy.init_node('sample_pub', anonymous=True)
8 | pub = rospy.Publisher('hello', String, queue_size=10)
9 | rate = rospy.Rate(10) # 10hz
10 |
11 | while not rospy.is_shutdown():
12 | str = "hello~ %s" % rospy.get_time()
13 | rospy.loginfo(str)
14 | pub.publish(str)
15 | rate.sleep()
16 |
17 | if __name__ == '__main__':
18 | try:
19 | simple_pub()
20 | except rospy.ROSInterruptException:
21 | print "Program terminated"
22 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/rospy_tutorial/scripts/example_sub.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | import rospy
4 | from std_msgs.msg import String
5 |
6 | def cb_func(msg):
7 | rospy.loginfo(rospy.get_caller_id() + ' msg: %s', msg.data)
8 |
9 | def simple_sub():
10 | rospy.init_node('sample_sub')#, anonymous=True)
11 | rospy.Subscriber('hello', String, cb_func)
12 | rospy.spin()
13 |
14 | if __name__ == '__main__':
15 | simple_sub()
16 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/rospy_tutorial/scripts/move_turtle_by_param.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | import rospy
3 | from geometry_msgs.msg import Twist
4 | from rospy_tutorial.GetChar import GetChar
5 |
6 | def move_turtle():
7 | pb = rospy.Publisher("/turtle1/cmd_vel", Twist, queue_size=10)
8 | tw = Twist()
9 | tw.linear.x = 0.50
10 | tw.angular.z = 0.25
11 | pb.publish(tw)
12 |
13 | if __name__ == '__main__':
14 | try:
15 | kb = GetChar()
16 | rospy.init_node('move_by_param')
17 | print "type 'Q' to quit."
18 |
19 | while not rospy.is_shutdown():
20 | param = rospy.get_param("/turtle1/go_turtle")
21 |
22 | if param is True:
23 | move_turtle()
24 | else:
25 | pass
26 |
27 | except rospy.ROSInterruptException: pass
28 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/rospy_tutorial/scripts/move_turtle_client.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | import sys
4 | import rospy
5 | from my_pkg.srv import *
6 |
7 | def move_turtle_client(angle, distance):
8 | rospy.wait_for_service('turtlesim_svc')
9 |
10 | try:
11 | svc = rospy.ServiceProxy('turtlesim_svc', AngDist)
12 | res = svc(x, y)
13 | return res.result
14 |
15 | except rospy.ServiceException, e:
16 | print "Service call failed: %s"%e
17 |
18 | def usage():
19 | return "%s [distance] [angle]" %sys.argv[0]
20 |
21 | if __name__ == "__main__":
22 | if len(sys.argv) == 3:
23 | x = float(sys.argv[1])
24 | y = float(sys.argv[2])
25 | else:
26 | print usage()
27 | sys.exit(1)
28 |
29 | move_turtle_client(x, y)
30 | print "Requesting rotate %s(deg) & move %s(m)"%(x, y)
31 | #print "Request is %s"%(move_turtle_client(x, y))
32 |
33 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/rospy_tutorial/scripts/move_turtle_py_param.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | import rospy
3 | from geometry_msgs.msg import Twist
4 |
5 | def move_turtle(self):
6 | pb = rospy.Publisher("/turtle1/cmd_vel", Twist, queue_size=10)
7 | tw = Twist()
8 | tw.linear.x = 0.50
9 | tw.angular.z = 0.25
10 | pb.publish(tw)
11 |
12 | if __name__ == '__main__':
13 | try:
14 | rospy.init_node('move_by_param')
15 | tp2 = TestParam1()
16 |
17 | while not rospy.is_shutdown():
18 | param = rospy.get_param("/turtle1/go_turtle")
19 |
20 | if param is True:
21 | move_turtle()
22 | else: pass
23 |
24 | except rospy.ROSInterruptException: pass
25 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/rospy_tutorial/scripts/move_turtle_server.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | from my_pkg.srv import AngDist, AngDistResponse
4 | import rospy
5 | from geometry_msgs.msg import Twist
6 | from math import radians
7 |
8 |
9 | LIN_X = ANG_Z = 1.5
10 |
11 | def svc_cb(req):
12 | res_rot = rotate(radians(req.angle))
13 | res_mov = move(req.distance)
14 | return AngDistResponse(res_rot and res_mov)
15 |
16 | def turtlesim_svc_svr():
17 | rospy.init_node('turtlesim_svc_node')
18 | svc = rospy.Service('turtlesim_svc', AngDist, svc_cb)
19 | print "ready~"
20 | rospy.spin()
21 |
22 |
23 | def move(distance):
24 | p = rospy.Publisher('/turtle1/cmd_vel', Twist, queue_size=10)
25 | t = Twist()
26 |
27 | t.linear.x = t.linear.y = t.linear.z = 0
28 | t.angular.x = t.angular.y = t.angular.z = 0
29 |
30 | speed = LIN_X
31 |
32 | if distance < 0:
33 |
34 | speed = speed * -1
35 | t.linear.x = speed
36 |
37 | t0 = rospy.Time.now().to_sec()
38 | current_distance = 0
39 |
40 | while(current_distance > distance):
41 | p.publish(t)
42 | t1 = rospy.Time.now().to_sec()
43 | current_distance = speed * (t1 - t0)
44 | else:
45 |
46 | t.linear.x = speed
47 |
48 | t0 = rospy.Time.now().to_sec()
49 | current_distance = 0
50 |
51 | while(current_distance < distance):
52 | p.publish(t)
53 | t1 = rospy.Time.now().to_sec()
54 | current_distance= speed * (t1 - t0)
55 |
56 | print "end move"
57 | t.linear.x = 0
58 | p.publish(t)
59 | return True
60 |
61 |
62 | def rotate(angle):
63 |
64 | p = rospy.Publisher('/turtle1/cmd_vel', Twist, queue_size=10)
65 | t = Twist()
66 |
67 | speed = ANG_Z
68 |
69 | if angle < 0:
70 | speed = speed * -1
71 | t.angular.z = speed
72 |
73 | t0 = rospy.Time.now().to_sec()
74 | current_angle = 0
75 |
76 | while(current_angle > angle):
77 | p.publish(t)
78 | t1 = rospy.Time.now().to_sec()
79 | current_angle = speed * (t1 - t0)
80 | else:
81 |
82 | t0 = rospy.Time.now().to_sec()
83 | current_angle = 0
84 |
85 | while(current_angle < angle):
86 | p.publish(t)
87 | t1 = rospy.Time.now().to_sec()
88 | current_angle = speed * (t1 - t0)
89 |
90 | print "end rotate"
91 | t.angular.z = 0
92 | p.publish(t)
93 | return True
94 |
95 |
96 | if __name__ == "__main__":
97 | turtlesim_svc_svr()
98 |
99 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/rospy_tutorial/scripts/move_turtlesim.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | import rospy
4 | import geometry_msgs.msg
5 |
6 | def move_turtle():
7 | rospy.init_node("move_turtle")
8 | pub = rospy.Publisher("turtle1/cmd_vel", geometry_msgs.msg.Twist, queue_size=10)
9 | tw = geometry_msgs.msg.Twist()
10 | tw.linear.x = tw.angular.z = 0.25
11 | pub.publish(tw)
12 |
13 | if __name__ == '__main__':
14 | try:
15 | while not rospy.is_shutdown():
16 | move_turtle()
17 | except rospy.ROSInterruptException:
18 | print "Program terminated!"
19 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/rospy_tutorial/scripts/move_turtlesim_1.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | import rospy
4 | import geometry_msgs.msg
5 |
6 |
7 | if __name__ == '__main__':
8 | try:
9 | while not rospy.is_shutdown():
10 | rospy.init_node("move_turtle")
11 | pub = rospy.Publisher("turtle1/cmd_vel",geometry_msgs.msg.Twist,queue_size=10)
12 | tw = geometry_msgs.msg.Twist()
13 | tw.linear.x = tw.angular.z = 0.25
14 | pub.publish(tw)
15 |
16 | except rospy.ROSInterruptException:
17 | print "Program terminated!"
18 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/rospy_tutorial/scripts/move_turtlesim_2.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | import rospy
4 | import geometry_msgs.msg
5 |
6 | def move_turtle():
7 | rospy.init_node("move_turtle")
8 | pub = rospy.Publisher("turtle1/cmd_vel", geometry_msgs.msg.Twist, queue_size=10)
9 | tw = geometry_msgs.msg.Twist()
10 | tw.linear.x = tw.angular.z = 0.25
11 | pub.publish(tw)
12 |
13 | if __name__ == '__main__':
14 | try:
15 | while not rospy.is_shutdown():
16 | move_turtle()
17 | except rospy.ROSInterruptException:
18 | print "Program terminated!"
19 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/rospy_tutorial/scripts/move_turtlesim_3.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | import rospy
4 | import geometry_msgs.msg
5 |
6 | def move_turtle():
7 | rospy.init_node("move_turtle")
8 | pub = rospy.Publisher("turtle1/cmd_vel", geometry_msgs.msg.Twist, queue_size=10)
9 | tw = geometry_msgs.msg.Twist()
10 | tw.linear.x = tw.angular.z = 0.25
11 | pub.publish(tw)
12 |
13 | if __name__ == '__main__':
14 | try:
15 | while not rospy.is_shutdown():
16 | move_turtle()
17 | except rospy.ROSInterruptException:
18 | print "Program terminated!"
19 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/rospy_tutorial/scripts/move_turtlesim_4.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | import rospy
4 | import geometry_msgs.msg
5 |
6 | class MoveTurtle():
7 |
8 | def __init__(self):
9 | rospy.init_node("move_turtle")
10 | self.pub= rospy.Publisher("turtle1/cmd_vel",geometry_msgs.msg.Twist,queue_size=10)
11 | self.tw = geometry_msgs.msg.Twist()
12 | self.move_turtle()
13 |
14 | def move_turtle(self):
15 | self.tw.linear.x = self.tw.angular.z = 0.25
16 | self.pub.publish(self.tw)
17 |
18 | if __name__ == '__main__':
19 | try:
20 | while not rospy.is_shutdown():
21 | MoveTurtle()
22 |
23 | except KeyboardInterrupt:
24 | print "Program terminated!"
25 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/rospy_tutorial/scripts/remote_turtle.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | import rospy
4 | from geometry_msgs.msg import Twist
5 | from my_lib.GetChar import GetChar # <----- this works by 'setup.py'
6 |
7 | msg = """
8 | ---------------------------------------
9 | (forward)
10 | 'w'
11 |
12 | (left)'a' 's' 'd'(right)
13 | (backward)
14 | ---------------------------------------
15 | type 'Q' for quit program...
16 | ---------------------------------------
17 | """
18 |
19 | if __name__ == '__main__':
20 |
21 | rospy.init_node('remote_ctrl_turtle')
22 |
23 | pub = rospy.Publisher('/turtle1/cmd_vel', Twist, queue_size=10)
24 | tw = Twist()
25 | rate = rospy.Rate(10)
26 | kb = GetChar()
27 |
28 | tw.linear.x = tw.linear.y = tw.linear.z = 0.0
29 | tw.angular.x = tw.angular.y = tw.angular.z = 0.0
30 |
31 | count = ch = 0
32 |
33 | print msg
34 |
35 | while not rospy.is_shutdown():
36 | ch = kb.getch()
37 |
38 | if ch == 'w':
39 | tw.linear.x = 2.0; print "forward"
40 | elif ch == 's':
41 | tw.linear.x = -2.0; print "backward"
42 | elif ch == 'a':
43 | tw.angular.z = 2.0; print "turn left"
44 | elif ch == 'd':
45 | tw.angular.z = -2.0; print "turn right"
46 | elif ch == 'Q': break
47 | else: pass
48 |
49 | pub.publish(tw)
50 | tw.linear.x = tw.angular.z = 0.0
51 |
52 | count = count + 1
53 | if count == 15:
54 | count = 0; print msg
55 |
56 | rate.sleep()
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/rospy_tutorial/scripts/set_go_turtle.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | import rospy
4 | from rospy_tutorial.GetChar import GetChar
5 |
6 | class SetParam:
7 | def __init__(self):
8 | rospy.init_node('set_go_tutle', anonymous=True)
9 | param = rospy.get_param("/turtle1/go_turtle")
10 | print(param)
11 |
12 | if __name__ == '__main__':
13 | try:
14 | SetParam()
15 | kb_input = GetChar()
16 | print "\nType '1' for 'go', '0' for 'stop', any other key for 'quit'."
17 |
18 | while not rospy.is_shutdown():
19 | key = kb_input.getch()
20 |
21 | if key == '1':
22 | rospy.set_param("/turtle1/go_turtle", True)
23 | print(rospy.get_param("/turtle1/go_turtle"))
24 | elif key == '0':
25 | rospy.set_param("/turtle1/go_turtle", False)
26 | print(rospy.get_param("/turtle1/go_turtle"))
27 | else:
28 | break
29 | print "program terminated"
30 | except rospy.ROSInterruptException: pass
31 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/rospy_tutorial/setup.py:
--------------------------------------------------------------------------------
1 | ## ! DO NOT MANUALLY INVOKE THIS setup.py, USE CATKIN INSTEAD
2 |
3 | from distutils.core import setup
4 | from catkin_pkg.python_setup import generate_distutils_setup
5 |
6 | # fetch values from package.xml
7 | setup_args = generate_distutils_setup(
8 | packages=['my_lib'],
9 | package_dir={'': 'src'},
10 | )
11 |
12 | setup(**setup_args)
13 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/rospy_tutorial/src/my_lib/GetChar.py:
--------------------------------------------------------------------------------
1 | #! /usr/bin/env python
2 |
3 | import os, time, sys, termios, atexit, tty
4 | from select import select
5 |
6 | # class for checking keyboard input
7 | class GetChar:
8 | def __init__(self):
9 | # Save the terminal settings
10 | self.fd = sys.stdin.fileno()
11 | self.new_term = termios.tcgetattr(self.fd)
12 | self.old_term = termios.tcgetattr(self.fd)
13 |
14 | # New terminal setting unbuffered
15 | self.new_term[3] = (self.new_term[3] & ~termios.ICANON & ~termios.ECHO)
16 | termios.tcsetattr(self.fd, termios.TCSAFLUSH, self.new_term)
17 |
18 | # Support normal-terminal reset at exit
19 | atexit.register(self.set_normal_term)
20 |
21 |
22 | def set_normal_term(self):
23 | termios.tcsetattr(self.fd, termios.TCSAFLUSH, self.old_term)
24 |
25 | def getch(self): # get 1 byte from stdin
26 | """ Returns a keyboard character after getch() has been called """
27 | return sys.stdin.read(1)
28 |
29 | def chk_stdin(self): # check keyboard input
30 | """ Returns True if keyboard character was hit, False otherwise. """
31 | dr, dw, de = select([sys.stdin], [], [], 0)
32 | return dr
33 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/rospy_tutorial/src/my_lib/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/catkin_ws/src/rospy/rospy_tutorial/src/my_lib/__init__.py
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/rospy_tutorial/srv/AddTwoInts.srv:
--------------------------------------------------------------------------------
1 | int64 a
2 | int64 b
3 | ---
4 | int64 sum
5 |
6 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/rospy_tutorial/srv/AngleDistance.srv:
--------------------------------------------------------------------------------
1 | float64 angle
2 | float64 distance
3 |
4 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/tb3_cleaner/package.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | tb3_cleaner
4 | 0.0.0
5 | The tb3_cleaner package
6 |
7 |
8 |
9 |
10 | ground0
11 |
12 |
13 |
14 |
15 |
16 | TODO
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 | catkin
52 | geometry_msgs
53 | nav_msgs
54 | roscpp
55 | rospy
56 | std_msgs
57 | geometry_msgs
58 | nav_msgs
59 | roscpp
60 | rospy
61 | std_msgs
62 | geometry_msgs
63 | nav_msgs
64 | roscpp
65 | rospy
66 | std_msgs
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/tb3_cleaner/scripts/01_straight.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | import rospy
4 | from geometry_msgs.msg import Twist
5 |
6 | def move():
7 | rospy.init_node('tb3_cleaner', anonymous=True)
8 | pub = rospy.Publisher('/cmd_vel', Twist, queue_size=10)
9 | msg = Twist()
10 |
11 | print("input speed within 0.0 ~ 0.22")
12 | speed = input("Input your speed: ")
13 | print("input distance within 0.0 ~ 2.0")
14 | distance = input("Type your distance: ")
15 | print("direction foward:1, backward:0")
16 | isForward = input("Forward?: ") # True or False(1 or 0)
17 |
18 | if(isForward):
19 | msg.linear.x = abs(speed)
20 | else:
21 | msg.linear.x = -abs(speed)
22 |
23 | msg.linear.y = msg.linear.z = 0
24 | msg.angular.x = msg.angular.y = msg.angular.z = 0
25 |
26 | while not rospy.is_shutdown():
27 |
28 | duration = distance / speed
29 | time2end = rospy.Time.now() + rospy.Duration(duration)
30 |
31 | pub.publish(msg)
32 | rospy.sleep(0.001)
33 |
34 | while(rospy.Time.now() < time2end):
35 | pass
36 |
37 | msg.linear.x = 0
38 | pub.publish(msg)
39 |
40 | if __name__ == '__main__':
41 | try:
42 | move()
43 | rospy.spin()
44 | except rospy.ROSInterruptException: pass
45 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/tb3_cleaner/scripts/02_rotate.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | import rospy
4 | from geometry_msgs.msg import Twist
5 | #PI = 3.1415926535897
6 | toRAD = 0.0174533
7 |
8 | def rotate():
9 | # Starts a new node
10 | rospy.init_node('tb3_cleaner', anonymous=True)
11 | pub = rospy.Publisher('/cmd_vel', Twist, queue_size=10)
12 | msg = Twist()
13 |
14 | # Receiveing the user's input
15 | print("input speed within 0.0 ~ 160")
16 | speed = input("Input your speed (degrees/sec):")
17 | print("input speed within 0 ~ 360")
18 | angle = input("Type your distance (degrees):")
19 | print("direction cw:1, ccw:0")
20 | clockwise = input("Clockwise?: ")
21 |
22 | angular_speed = speed * toRAD
23 | relative_angle = angle * toRAD
24 |
25 | msg.linear.x = msg.linear.y = msg.linear.z = 0
26 | msg.angular.x = msg.angular.y = 0
27 |
28 | if clockwise:
29 | msg.angular.z = -abs(angular_speed)
30 | else:
31 | msg.angular.z = abs(angular_speed)
32 |
33 | duration = relative_angle / angular_speed
34 | time2end = rospy.Time.now() + rospy.Duration(duration)
35 |
36 | pub.publish(msg)
37 | rospy.sleep(0.001)
38 |
39 | while(rospy.Time.now() < time2end):
40 | pass
41 |
42 | msg.angular.z = 0
43 | pub.publish(msg)
44 |
45 |
46 | if __name__ == '__main__':
47 | try:
48 | rotate()
49 | rospy.spin()
50 |
51 | except rospy.ROSInterruptException:
52 | pass
53 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/tb3_cleaner/scripts/05_pub_tb3_pose2d.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | import rospy
4 | from turtlesim.msg import Pose
5 | from nav_msgs.msg import Odometry
6 | from math import degrees, pi
7 | from tf.transformations import euler_from_quaternion #, quaternion_from_euler
8 |
9 | class TB3Pose2D:
10 |
11 | def __init__(self):
12 |
13 | rospy.init_node('pub_tb3_pose', anonymous = True)
14 |
15 | rospy.Subscriber('/odom', Odometry, self.get_odom )
16 | self.pub = rospy.Publisher('/tb3pose', Pose, queue_size = 10)
17 |
18 | self.prv_theta = 0.0
19 | self.theta_sum = 0.0
20 | self.rate = rospy.Rate(10)
21 |
22 |
23 | def get_odom(self, dat):
24 |
25 | pos_x, pos_y, theta = self.get_pose(dat)
26 |
27 | pose2d = Pose() # turtlesim.msg.Pose()
28 | pose2d.x = pos_x
29 | pose2d.y = pos_y
30 | # pose2d.theta
31 | pose2d.linear_velocity = dat.twist.twist.linear.x
32 | pose2d.angular_velocity = dat.twist.twist.linear.x
33 |
34 | if (theta - self.prv_theta) > 5.0: # 5.0(rad) = 286.479(deg)
35 | d_theta = (theta - self.prv_theta) - 2 * pi
36 | elif (theta - self.prv_theta) < -5.0: # -5.0(rad) = -286.479(deg)
37 | d_theta = (theta - self.prv_theta) + 2 * pi
38 | else:
39 | d_theta = (theta - self.prv_theta)
40 |
41 | self.theta_sum = self.theta_sum + d_theta
42 | self.prv_theta = theta
43 |
44 | pose2d.theta = self.theta_sum
45 |
46 | self.pub.publish(pose2d)
47 | self.print_pose(pose2d)
48 |
49 |
50 | def get_pose(self, msg):
51 |
52 | q = (msg.pose.pose.orientation.x, msg.pose.pose.orientation.y,
53 | msg.pose.pose.orientation.z, msg.pose.pose.orientation.w)
54 | # quart[0] = roll
55 | quart = euler_from_quaternion(q) # quart[1] = pitch
56 | theta = quart[2] # quart[2] = yaw <----
57 |
58 | # make theta within from 0 to 360 degree
59 | if theta < 0:
60 | theta = theta + pi * 2
61 | if theta > pi * 2:
62 | theta = theta - pi * 2
63 |
64 | pos_x = msg.pose.pose.position.x
65 | pos_y = msg.pose.pose.position.y
66 |
67 | return pos_x, pos_y, theta
68 |
69 |
70 | def print_pose(self, msg):
71 | print("x = %f, y = %f, theta = %f = %f" %(msg.x, msg.y, msg.theta, degrees(msg.theta)))
72 |
73 |
74 | if __name__ == '__main__':
75 | try:
76 | TB3Pose2D()
77 | rospy.spin()
78 |
79 | except rospy.ROSInterruptException: pass
80 |
81 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/tb3_cleaner/scripts/06_straight_by_pose2d.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | import rospy
3 | from turtlesim.msg import Pose
4 | from geometry_msgs.msg import Twist
5 | from math import sqrt
6 |
7 | MAX_LIN_SPEED = 0.22
8 | LIN_SPD = MAX_LIN_SPEED * 0.125
9 |
10 | class TB3Move:
11 |
12 | def __init__(self):
13 | rospy.init_node('rotate_by_pose', anonymous = True)
14 | rospy.Subscriber('/tb3pose', Pose, self.get_pose_cb)
15 | self.pub = rospy.Publisher('/cmd_vel', Twist, queue_size = 10)
16 |
17 | self.tb3pose = Pose() # for subscribe
18 | self.org = Pose() # for store starting point
19 |
20 | def get_pose_cb(self, msg):
21 | # callback function to subscribe "/tb3pose" topic
22 | self.tb3pose = msg
23 |
24 | def update_org(self):
25 | # save current tb3pose.x, y to org.x, y when called this function
26 | self.org = self.tb3pose
27 |
28 | def elapsed_dist(self):
29 | # calcurate and return elapsed distance
30 | return sqrt(pow((self.tb3pose.x - self.org.x), 2) + pow((self.tb3pose.y - self.org.y), 2))
31 |
32 | def straight(self, distance):
33 | # forward or backward until elaped distance is equal to target distance
34 | tw = Twist()
35 |
36 | if distance >= 0: # distance(+): forward
37 | tw.linear.x = LIN_SPD
38 | else: # distance(-): backward
39 | tw.linear.x = -LIN_SPD
40 |
41 | self.update_org()
42 | print "start from (%s, %s)." %(round(self.org.x, 2), round(self.org.y, 2))
43 | self.pub.publish(tw) # start move
44 |
45 | while self.elapsed_dist() < abs(distance): pass
46 | # wait until elapsed distance == target distance
47 | # print "%s(m) of %s(m)" %(round(self.elapsed_dist(),2), round(abs(distance),2))
48 |
49 | tw.linear.x = 0; self.pub.publish(tw) # stop move
50 | print "stop to (%s, %s)." %(round(self.tb3pose.x, 2), round(self.tb3pose.y, 2))
51 |
52 | if __name__ == '__main__':
53 | try:
54 | tb3 = TB3Move()
55 |
56 | dist = float(input("input distance to straight(m): "))
57 | tb3.straight(dist)
58 |
59 | rospy.spin()
60 |
61 | except rospy.ROSInterruptException: pass
62 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/tb3_cleaner/scripts/07_rotate_by_pose2d.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | import rospy
3 | from turtlesim.msg import Pose
4 | from geometry_msgs.msg import Twist
5 | from math import sqrt, degrees, radians
6 |
7 | MAX_ANG_SPEED = 2.84
8 | ANG_SPD = MAX_ANG_SPEED * 0.125
9 |
10 | class TB3Move:
11 |
12 | def __init__(self):
13 | rospy.init_node('rotate_by_pose', anonymous = True)
14 | rospy.Subscriber('/tb3pose', Pose, self.get_pose_cb)
15 | self.pub = rospy.Publisher('/cmd_vel', Twist, queue_size = 10)
16 |
17 | self.tb3pose = Pose() # for subscribe
18 | self.org = Pose() # for store starting point
19 |
20 | def get_pose_cb(self, msg):
21 | # callback function to subscribe "/tb3pose" topic
22 | self.tb3pose = msg
23 |
24 | def update_org(self):
25 | # save current tb3pose.theta to org.theta when called this function
26 | self.org = self.tb3pose
27 |
28 | def elapsed_angle(self):
29 | return abs(self.tb3pose.theta - self.org.theta)
30 |
31 | def rotate(self, angle):
32 | tw = Twist()
33 | self.update_org()
34 | print "start from: %s" %(round(degrees(self.org.theta), 2))
35 |
36 | if angle >= 0: # angle(+): rotate left(ccw)
37 | tw.angular.z = ANG_SPD;
38 | else: # angle(-): rotate right(cw)
39 | tw.angular.z = -ANG_SPD;
40 |
41 | self.pub.publish(tw)
42 | while self.elapsed_angle() < abs(angle): pass
43 | # print "%s of %s" %(round(degrees(self.elapsed_angle()),2) ,round(degrees(abs(angle)),2))
44 |
45 | tw.angular.z = 0; self.pub.publish(tw)
46 | print "stop to : %s" %(round(degrees(self.tb3pose.theta), 2))
47 |
48 | if __name__ == '__main__':
49 | try:
50 | tb3 = TB3Move()
51 |
52 | angle = radians(input("input angle to rotate(deg): "))
53 | tb3.rotate(angle)
54 |
55 | rospy.spin()
56 |
57 | except rospy.ROSInterruptException: pass
58 |
59 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/tb3_cleaner/scripts/08_test_lib_tb3move.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | '''
3 | ##################################################################################
4 | # #
5 | # Be sure the topic("/tb3pose") has to be publishing before start this code!!! #
6 | # #
7 | ##################################################################################
8 | '''
9 | import rospy
10 | from tb3_cleaner.MoveTB3 import MoveTB3
11 | from math import radians
12 |
13 | if __name__ == '__main__':
14 |
15 | try:
16 | tb3 = TB3Move()
17 | angle = radians(input("input angle to rotate(deg): "))
18 | tb3.rotate(angle)
19 | dist = float(input("input distance to stright(m): "))
20 | tb3.straight(dist)
21 | rospy.spin()
22 |
23 | except rospy.ROSInterruptException: pass
24 |
25 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/tb3_cleaner/scripts/align2marker.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | import rospy
4 | from turtlesim.msg import Pose
5 | from math import degrees, pi
6 | from geometry_msgs.msg import Twist
7 | from ar_track_alvar_msgs.msg import AlvarMarkers
8 | from tf.transformations import euler_from_quaternion
9 |
10 | TARGET_ID = 13
11 |
12 | # Turtlebot3 Specification
13 | MAX_LIN_SPEED = 0.22
14 | MAX_ANG_SPEED = 2.84
15 |
16 |
17 | class AlignMarker:
18 |
19 | def __init__(self):
20 |
21 | rospy.init_node('align_to_marker', anonymous = True)
22 | rospy.Subscriber('/tb3pose', Pose, self.get_theta)
23 | rospy.Subscriber('/ar_pose_marker', AlvarMarkers, self.get_marker)
24 | self.pub = rospy.Publisher('/cmd_vel', Twist, queue_size = 10)
25 |
26 | self.tw = Twist()
27 | self.tw.angular.z = MAX_ANG_SPEED * 0.1
28 |
29 | self.curr_th = 0
30 | self.find_th = 0
31 | self.lost_th = 0
32 |
33 | self.is_1st_find = True
34 | self.is_1st_lost = True
35 | self.align_finished = False
36 |
37 |
38 | def get_theta(self, dat):
39 | self.curr_th = dat.theta
40 |
41 |
42 | def get_marker(self, msg):
43 |
44 | self.pub.publish(self.tw)
45 |
46 | if len(msg.markers) > 0:
47 |
48 | for msg in msg.markers:
49 |
50 | if msg.id == TARGET_ID:
51 |
52 | print "found target marker"
53 |
54 | if self.is_1st_find == True:
55 | self.find_th = self.curr_th
56 | print "get theta to start recognize marker."
57 | self.is_1st_find = False
58 | else:
59 | print "id mismatch"
60 |
61 | else: # lost marker
62 |
63 | print "lost marker"
64 |
65 | if self.is_1st_find == False and self.is_1st_lost == True:
66 | self.lost_th = self.curr_th
67 | print "get theta to end recognize marker."
68 | self.is_1st_lost = False
69 |
70 | if self.align_finished == False:
71 | self.align2marker()
72 | self.align_finished = True
73 |
74 |
75 | def align2marker(self):
76 |
77 | self.tw.angular.z = 0
78 | self.pub.publish(self.tw)
79 |
80 | current = self.curr_th
81 | target = current - abs(self.find_th - self.lost_th) * 0.7
82 |
83 | print "get target theta & start rotating."
84 | self.tw.angular.z = -MAX_ANG_SPEED * 0.125
85 | self.pub.publish(self.tw)
86 |
87 | while self.curr_th > target: pass
88 |
89 | self.tw.angular.z = 0
90 | self.pub.publish(self.tw)
91 | print "align complete."
92 |
93 |
94 | if __name__ == '__main__':
95 | try:
96 |
97 | AlignMarker()
98 | rospy.spin()
99 |
100 | except rospy.ROSInterruptException: pass
101 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/tb3_cleaner/scripts/keep_dist2marker.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | import rospy
4 | from turtlesim.msg import Pose
5 | from math import degrees, pi
6 | from geometry_msgs.msg import Twist
7 | from ar_track_alvar_msgs.msg import AlvarMarkers
8 |
9 | # change id of your marker
10 | TARGET_ID = 13
11 |
12 | # Turtlebot3 Specification
13 | MAX_LIN_SPEED = 0.22
14 | MAX_ANG_SPEED = 2.84
15 |
16 | # set parking zone( kind of tolerlance )
17 | MAX_DIST = 0.20
18 | MIN_DIST = 0.15
19 |
20 |
21 | class KeepDist:
22 |
23 | def __init__(self):
24 |
25 | rospy.init_node('tb3_keep_dist', anonymous = True)
26 | rospy.Subscriber('/ar_pose_marker', AlvarMarkers, self.get_marker )
27 | self.pub = rospy.Publisher('/cmd_vel', Twist, queue_size = 10)
28 | self.tw = Twist()
29 | self.dist = 0
30 | self.count = 0
31 | self.lin_speed = MAX_LIN_SPEED * 0.125
32 |
33 |
34 | def get_marker(self, msg):
35 |
36 | if len(msg.markers) > 0:
37 |
38 | for msg in msg.markers:
39 |
40 | if msg.id == TARGET_ID:
41 |
42 | self.dist = msg.pose.pose.position.z
43 | self.move2marker()
44 | else:
45 | print "wrong marker id!"
46 | else:
47 | print "marker not found!"
48 |
49 |
50 |
51 | def move2marker(self):
52 | '''
53 | # marker
54 | # | min max
55 | # | ---> | | <---
56 | # +---------+------+----------------
57 | # backward stop forward
58 | '''
59 | speed = MAX_LIN_SPEED * 0.15
60 |
61 | if self.dist > MAX_DIST:
62 | if self.dist - MAX_DIST > 0.20:
63 | self.tw.linear.x = speed * 1.0
64 | else:
65 | self.tw.linear.x = speed * 0.75
66 | elif self.dist < MIN_DIST:
67 | self.tw.linear.x = speed * 0.45 * -1
68 |
69 | else:
70 | self.tw.linear.x = 0
71 |
72 | self.pub.publish(self.tw)
73 | print "distance to marker = %f(cm)" %(self.dist * 100)
74 |
75 |
76 | if __name__ == '__main__':
77 | try:
78 |
79 | tb3 = KeepDist()
80 | tb3.move2marker()
81 | rospy.spin()
82 |
83 | except rospy.ROSInterruptException: pass
84 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/tb3_cleaner/scripts/pub_ar_pose.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | import rospy
4 | from turtlesim.msg import Pose
5 | from math import degrees, pi
6 | from ar_track_alvar_msgs.msg import AlvarMarkers
7 | from tf.transformations import euler_from_quaternion
8 |
9 | TARGET_ID = 13
10 |
11 | class MarkerPose:
12 |
13 | def __init__(self):
14 |
15 | rospy.init_node('pub_marker_pose', anonymous = True)
16 | rospy.Subscriber('/ar_pose_marker', AlvarMarkers, self.get_marker )
17 | self.pub = rospy.Publisher('/marker_pose', Pose, queue_size = 10)
18 |
19 |
20 | def get_marker(self, msg):
21 |
22 | p = Pose()
23 |
24 | for msg in msg.markers:
25 | if msg.id == TARGET_ID:
26 |
27 | pos_x, pos_y, theta = self.get_ar_pose(msg)
28 |
29 | p.x = pos_x
30 | p.y = pos_y
31 |
32 | if (theta > 5.0):
33 | p.theta = theta - 2 * pi
34 | elif(theta < -5.0):
35 | p.theta = theta + 2 * pi
36 | else:
37 | p.theta = theta
38 |
39 | # self.print_pose(p)
40 | self.pub.publish(p)
41 |
42 | """
43 | y z
44 | ^ x ^
45 | marker | / | robot
46 | (on wall) |/ |
47 | +------> z x <------+
48 | /
49 | /
50 | y
51 |
52 | orientation x,y,z,w --+
53 | +--> 4 +-------------------------+
54 | input orientaion of marker ----->| |
55 | | euler_from_quaternion() |
56 | returnned rpy of marker <--------| |
57 | +-- 3 +-------------------------+
58 | r,p,y angle <---+
59 | +------------+------------+
60 | | marker | robot |
61 | +------------+------------+
62 | r: euler_from_quaternion(q)[0] | roll (x) | (y) pitch |
63 | * p: euler_from_quaternion(q)[1] | pitch (y) | (z) yaw ** | <--
64 | y: euler_from_quaternion(q)[2] | yaw (z) | (x) roll |
65 | +------------+------------+
66 | """
67 |
68 |
69 | def get_ar_pose(self, msg):
70 |
71 | """
72 | x ---> z (yaw )
73 | y ---> -y (pitch)
74 | z ---> x (roll )
75 | """
76 | q = (msg.pose.pose.orientation.x, msg.pose.pose.orientation.y,
77 | msg.pose.pose.orientation.z, msg.pose.pose.orientation.w)
78 |
79 | quart = euler_from_quaternion(q)
80 | theta = quart[1]
81 |
82 | if theta < 0:
83 | theta = theta + pi * 2
84 | if theta > pi * 2:
85 | theta = theta - pi * 2
86 |
87 | pos_x = msg.pose.pose.position.z
88 | pos_y = -msg.pose.pose.position.y
89 |
90 | return pos_x, pos_y, theta
91 |
92 |
93 | def print_pose(self, msg):
94 | print "x = %f, y = %f, theta = %f = %f" %(msg.x, msg.y, msg.theta, degrees(msg.theta))
95 |
96 |
97 | if __name__ == '__main__':
98 | try:
99 |
100 | MarkerPose()
101 | rospy.spin()
102 |
103 | except rospy.ROSInterruptException: pass
104 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/tb3_cleaner/setup.py:
--------------------------------------------------------------------------------
1 | from distutils.core import setup
2 | from catkin_pkg.python_setup import generate_distutils_setup
3 |
4 | setup_args = generate_distutils_setup(
5 | packages=['tb3_cleaner'],
6 | package_dir={'': 'src'},
7 | )
8 |
9 | setup(**setup_args)
10 |
11 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/tb3_cleaner/src/tb3_cleaner/GetChar.py:
--------------------------------------------------------------------------------
1 | #! /usr/bin/env python
2 |
3 | import os, time, sys, termios, atexit, tty
4 | from select import select
5 |
6 | # class for checking keyboard input
7 | class GetChar:
8 | def __init__(self):
9 | # Save the terminal settings
10 | self.fd = sys.stdin.fileno()
11 | self.new_term = termios.tcgetattr(self.fd)
12 | self.old_term = termios.tcgetattr(self.fd)
13 |
14 | # New terminal setting unbuffered
15 | self.new_term[3] = (self.new_term[3] & ~termios.ICANON & ~termios.ECHO)
16 | termios.tcsetattr(self.fd, termios.TCSAFLUSH, self.new_term)
17 |
18 | # Support normal-terminal reset at exit
19 | atexit.register(self.set_normal_term)
20 |
21 |
22 | def set_normal_term(self):
23 | termios.tcsetattr(self.fd, termios.TCSAFLUSH, self.old_term)
24 |
25 | def getch(self): # get 1 byte from stdin
26 | """ Returns a keyboard character after getch() has been called """
27 | return sys.stdin.read(1)
28 |
29 | def chk_stdin(self): # check keyboard input
30 | """ Returns True if keyboard character was hit, False otherwise. """
31 | dr, dw, de = select([sys.stdin], [], [], 0)
32 | return dr
33 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/tb3_cleaner/src/tb3_cleaner/MoveTB3.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | import rospy
3 | from nav_msgs.msg import Odometry
4 | from turtlesim.msg import Pose
5 | from geometry_msgs.msg import Twist
6 | from math import degrees, sqrt, pi
7 |
8 | # define pi, 2pi, pi/2
9 | _2PI = 2.0 * pi
10 | _PI = 1.0 * pi
11 | _R = 0.5 * pi
12 |
13 | # Turtlebot3 Specification
14 | MAX_LIN_SPEED = 0.22
15 | MAX_ANG_SPEED = 2.84
16 |
17 | # make default speed of linear & angular
18 | LIN_SPD = MAX_LIN_SPEED * 0.125
19 | ANG_SPD = MAX_ANG_SPEED * 0.125
20 |
21 | class MoveTB3:
22 |
23 | def __init__(self):
24 | rospy.init_node('rotate_by_pose', anonymous = True)
25 | rospy.Subscriber('/tb3pose', Pose, self.get_pose)
26 | self.pub = rospy.Publisher('/cmd_vel', Twist, queue_size = 10)
27 |
28 | self.tb3pose = self.org = Pose()
29 |
30 |
31 | def get_pose(self, msg):
32 | self.tb3pose = msg
33 |
34 |
35 | def update_org(self):
36 | self.org = self.tb3pose
37 |
38 |
39 | def elapsed_dist(self):
40 | return sqrt(pow((self.tb3pose.x - self.org.x), 2) + pow((self.tb3pose.y - self.org.y), 2))
41 |
42 |
43 | def straight(self, distance):
44 |
45 | self.update_org()
46 | print "start from (%s, %s)" %(round(self.org.x, 2), round(self.org.y, 2))
47 |
48 | tw = Twist()
49 |
50 | if distance >= 0: # +distance
51 | tw.linear.x = LIN_SPD
52 | else: # -distance
53 | tw.linear.x = -LIN_SPD
54 |
55 | self.pub.publish(tw)
56 | while self.elapsed_dist() < abs(distance): pass
57 | #print "%s(m) of %s(m)" %(round(self.elapsed_dist(),2), round(abs(distance),2))
58 |
59 | tw.linear.x = 0; self.pub.publish(tw)
60 | print "stop to (%s, %s)." %(round(self.tb3pose.x, 2), round(self.tb3pose.y, 2))
61 |
62 |
63 | def elapsed_angle(self):
64 | return abs(self.tb3pose.theta - self.org.theta)
65 |
66 | def rotate(self, angle):
67 | tw = Twist()
68 | self.update_org()
69 | print "start from: %s" %(round(degrees(self.org.theta), 2))
70 |
71 | if angle >= 0: # angle(+): rotate left(ccw)
72 | tw.angular.z = ANG_SPD;
73 | else: # angle(-): rotate right(cw)
74 | tw.angular.z = -ANG_SPD;
75 |
76 | self.pub.publish(tw)
77 | while self.elapsed_angle() < abs(angle): pass
78 | # print "%s of %s" %(round(degrees(self.elapsed_angle()),2) ,round(degrees(abs(angle)),2))
79 |
80 | tw.angular.z = 0; self.pub.publish(tw)
81 | print "stop to : %s" %(round(degrees(self.tb3pose.theta), 2))
82 |
83 |
84 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/tb3_cleaner/src/tb3_cleaner/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/catkin_ws/src/rospy/tb3_cleaner/src/tb3_cleaner/__init__.py
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/turtlesim_cleaner/package.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | turtlesim_cleaner
4 | 0.0.0
5 | The turtlesim_cleaner package
6 |
7 |
8 |
9 |
10 | ground0
11 |
12 |
13 |
14 |
15 |
16 | TODO
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 | catkin
52 | geometry_msgs
53 | rospy
54 | geometry_msgs
55 | rospy
56 | geometry_msgs
57 | rospy
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/turtlesim_cleaner/scripts/go2goal.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | import rospy
4 | from geometry_msgs.msg import Twist
5 | from turtlesim.msg import Pose
6 | from math import pow, atan2, sqrt
7 |
8 |
9 | class TurtleBot:
10 |
11 | def __init__(self):
12 | # Creates a node with name 'turtlebot_controller' and make sure it is a
13 | # unique node (using anonymous=True).
14 | rospy.init_node('turtlebot_controller', anonymous=True)
15 |
16 | # Publisher which will publish to the topic '/turtle1/cmd_vel'.
17 | self.pub = rospy.Publisher('/turtle1/cmd_vel', Twist, queue_size=10)
18 |
19 | # A subscriber to the topic '/turtle1/pose'. self.update_pose is called
20 | # when a message of type Pose is received.
21 | self.sub = rospy.Subscriber('/turtle1/pose', Pose, self.update_pose)
22 |
23 | self.pose = Pose()
24 | self.rate = rospy.Rate(10)
25 |
26 | def update_pose(self, data):
27 | """Callback function which is called when a new message of type Pose is
28 | received by the subscriber."""
29 | self.pose = data
30 | self.pose.x = round(self.pose.x, 4)
31 | self.pose.y = round(self.pose.y, 4)
32 |
33 | def euclidean_distance(self, goal_pose):
34 | """Euclidean distance between current pose and the goal."""
35 | return sqrt(pow((goal_pose.x - self.pose.x), 2) +
36 | pow((goal_pose.y - self.pose.y), 2))
37 |
38 | def linear_vel(self, goal_pose, constant = 1.5):
39 | """See video: https://www.youtube.com/watch?v=Qh15Nol5htM."""
40 | return constant * self.euclidean_distance(goal_pose)
41 |
42 | def steering_angle(self, goal_pose):
43 | """See video: https://www.youtube.com/watch?v=Qh15Nol5htM."""
44 | return atan2(goal_pose.y - self.pose.y, goal_pose.x - self.pose.x)
45 |
46 | def angular_vel(self, goal_pose, constant=6):
47 | """See video: https://www.youtube.com/watch?v=Qh15Nol5htM."""
48 | return constant * (self.steering_angle(goal_pose) - self.pose.theta)
49 |
50 | def move2goal(self):
51 | """Moves the turtle to the goal."""
52 | goal_pose = Pose()
53 |
54 | # Get the input from the user.
55 | goal_pose.x = input("Set your x goal: ")
56 | goal_pose.y = input("Set your y goal: ")
57 |
58 | # Please, insert a number slightly greater than 0 (e.g. 0.01).
59 | distance_tolerance = input("Set your tolerance: ")
60 |
61 | msg = Twist()
62 |
63 | while self.euclidean_distance(goal_pose) >= distance_tolerance:
64 |
65 | # Porportional controller.
66 | # https://en.wikipedia.org/wiki/Proportional_control
67 |
68 | # Linear velocity in the x-axis.
69 | msg.linear.x = self.linear_vel(goal_pose)
70 | msg.linear.y = msg.linear.z = 0
71 |
72 | # Angular velocity in the z-axis.
73 | msg.angular.x = msg.angular.y = 0
74 | msg.angular.z = self.angular_vel(goal_pose)
75 |
76 | # Publishing our vel_msg
77 | self.pub.publish(msg)
78 |
79 | # Publish at the desired rate.
80 | self.rate.sleep()
81 |
82 | # Stopping our robot after the movement is over.
83 | msg.linear.x = msg.angular.z = 0
84 | self.pub.publish(msg)
85 |
86 | # If we press control + C, the node will stop.
87 | rospy.spin()
88 |
89 | if __name__ == '__main__':
90 | try:
91 | x = TurtleBot()
92 | x.move2goal()
93 | except rospy.ROSInterruptException:
94 | pass
95 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/turtlesim_cleaner/scripts/move.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | import rospy
4 | from geometry_msgs.msg import Twist
5 |
6 | def move():
7 | # Starts a new node name 'robot_cleaner'
8 | rospy.init_node('robot_cleaner', anonymous=True)
9 | # declair publisher name:pub, topic:'/turtle1/cmd_vel', type:Twist
10 | pub = rospy.Publisher('/turtle1/cmd_vel', Twist, queue_size=10)
11 | # declair Twist type object name 'msg'
12 | msg = Twist()
13 |
14 | # Receiveing the user's input
15 | print("Let's move your robot")
16 | speed = input("Input your speed: ")
17 | distance = input("Type your distance: ")
18 | isForward = input("Foward?: ") # True or False(1 or 0)
19 |
20 | # Checking if the movement is forward or backwards
21 | if(isForward):
22 | msg.linear.x = abs(speed)
23 | else:
24 | msg.linear.x = -abs(speed)
25 |
26 | # Since we are moving just in x-axis
27 | msg.linear.y = msg.linear.z = 0
28 | msg.angular.x = msg.angular.y = msg.angular.z = 0
29 |
30 | while not rospy.is_shutdown():
31 |
32 | # Setting the current time for distance calculus
33 | t0 = rospy.Time.now().to_sec()
34 | current_distance = 0
35 |
36 | # Loop to move the turtle in an specified distance
37 | while(current_distance < distance):
38 | # Publish the velocity
39 | pub.publish(msg)
40 | # Takes actual time to velocity calculus
41 | t1=rospy.Time.now().to_sec()
42 | # Calculates distancePoseStamped
43 | current_distance= speed*(t1-t0)
44 | # After the loop, stops the robot
45 | msg.linear.x = 0
46 | # Force the robot to stop
47 | pub.publish(msg)
48 |
49 | if __name__ == '__main__':
50 | try:
51 | # Testing our function
52 | move()
53 | except rospy.ROSInterruptException: pass
54 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/turtlesim_cleaner/scripts/rotate.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | import rospy
4 | from geometry_msgs.msg import Twist
5 | PI = 3.1415926535897
6 |
7 | def rotate():
8 | # Starts a new node
9 | rospy.init_node('robot_cleaner', anonymous=True)
10 | pub = rospy.Publisher('/turtle1/cmd_vel', Twist, queue_size=10)
11 | msg = Twist()
12 |
13 | # Receiveing the user's input
14 | print("Let's rotate your robot")
15 | speed = input("Input your speed (degrees/sec):")
16 | angle = input("Type your distance (degrees):")
17 | clockwise = input("Clockwise?: ") # True or false
18 |
19 | # Converting from angles to radians
20 | angular_speed = speed*2*PI/360
21 | relative_angle = angle*2*PI/360
22 |
23 | # We wont use linear components
24 | msg.linear.x = msg.linear.y = msg.linear.z = 0
25 | msg.angular.x = msg.angular.y = 0
26 |
27 | # Checking if our movement is CW or CCW
28 | if clockwise:
29 | msg.angular.z = -abs(angular_speed)
30 | else:
31 | msg.angular.z = abs(angular_speed)
32 | # Setting the current time for distance calculus
33 | t0 = rospy.Time.now().to_sec()
34 | current_angle = 0
35 |
36 | while(current_angle < relative_angle):
37 | pub.publish(msg)
38 | t1 = rospy.Time.now().to_sec()
39 | current_angle = angular_speed*(t1-t0)
40 |
41 |
42 | # Forcing our robot to stop
43 | msg.angular.z = 0
44 | pub.publish(msg)
45 | rospy.spin()
46 |
47 | if __name__ == '__main__':
48 | try:
49 | # Testing our function
50 | rotate()
51 | except rospy.ROSInterruptException:
52 | pass
53 |
--------------------------------------------------------------------------------
/ros1_tutorial/catkin_ws/src/rospy/turtlesim_cleaner/scripts/sub_pose.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | import rospy
4 | from turtlesim.msg import Pose
5 | from math import degrees
6 |
7 | def get_pose(dat):
8 | x = round(dat.x, 2)
9 | y = round(dat.y, 2)
10 | th = round(degrees(dat.theta), 2)
11 | rospy.loginfo("x = %s(m), y = %s(m), th = %s(deg)", x, y, th)
12 |
13 | def sub_turtle_pose():
14 | rospy.init_node('sub_turtle_pose')#, anonymous=True)
15 | rospy.Subscriber('/turtle1/pose', Pose, get_pose)
16 | rospy.spin()
17 |
18 | if __name__ == '__main__':
19 | sub_turtle_pose()
20 |
--------------------------------------------------------------------------------
/ros1_tutorial/darknetROS/darknet_ros_connect2github_ssh.md:
--------------------------------------------------------------------------------
1 | ## Connecting to GitHub with SSH
2 |
3 |
4 |
5 | ------
6 |
7 | ## SSH key generation & register to github acount
8 |
9 | **튜토리얼 레벨 :** Intermediate(중급)
10 |
11 | **이 튜토리얼 작성 환경 :** catkin **/** Ubuntu 16.04 **/** Kinetic
12 |
13 | **자료원본(출처) :** [Connecting to GitHub with SSH](https://docs.github.com/en/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent)
14 |
15 | **튜토리얼 목록 :** [README.md](../README.md)
16 |
17 | ------
18 |
19 | Ubuntu 에서 SSH 키를 만들고, 만들어진 SSH 키를 자신의 GitHub 계정에 등록하는 방법을 알아보자.
20 |
21 |
22 |
23 | #### 1. SSH Key 생성
24 |
25 | `Ctrl`+`Alt`+`T` 를 입력하여 터미널 창을 열고 다음 명령을 입력한다. `"your_email@address4github"` 에는 GitHub 사용자 ID 로 사용하는 자신의 이메일 주소를 적는다. 이 명령은 GitHub 계정 사용자 ID 로 사용하는 이메일 주소정보가 포함된 SSH 키를 `~/.ssh` 폴더에 생성해줄 것이다.
26 |
27 | ```bash
28 | $ ssh-keygen -t ed25519 -C "your_email@address"
29 | ```
30 |
31 | 명령을 입력하면 키를 생성한다는 메세지와 함께 키의 경로와 이름을 입력하라는 메세지가 출력된다. 이 때 ( )안에 적혀있는 경로와 이름을 그대로 사용하려면 `Enter` 만 입력한다.
32 |
33 | ```bash
34 | Generating public/private ed25519 key pair.
35 | Enter file in which to save the key (/home/YourUserName/.ssh/id_ed25519):
36 | ```
37 |
38 | 새로 생성될 키의 암호를 정하는 과정으로 암호 없이 사용하기위해 역시 `Enter` 만 입력한다.
39 |
40 | ```bash
41 | Enter passphrase (empty for no passphrase):
42 | ```
43 |
44 | 암호를 확인하는 과정이므로 역시 `Enter` 만 입력한다.
45 |
46 | ```bash
47 | Enter same passphrase again:
48 | ```
49 |
50 | 다음과 같은 메세지와 함께 새로운 SSH 키가 생성된다.
51 |
52 | ```bash
53 | ssh-keygen -t ed25519 -C "your_email@address"
54 | Generating public/private ed25519 key pair.
55 | Enter file in which to save the key (/home/YourUserName/.ssh/id_ed25519):
56 | Enter passphrase (empty for no passphrase):
57 | Enter same passphrase again:
58 | Your identification has been saved in /home/YourUserName/.ssh/id_ed25519.
59 | Your public key has been saved in /home/YourUserName/.ssh/id_ed25519.pub.
60 | The key fingerprint is:
61 | SHA256:FRb8aceVE0kmi+CuC4CT2rMnEvfYGgF4KfJDUqYHvpI your_email@address
62 | The key's randomart image is:
63 | +--[ED25519 256]--+
64 | |. o o+. ..++|
65 | |o= . ..o.. ++.|
66 | |B.= ..o + ..|
67 | |.X+ .. + o |
68 | |E=+. S. . . |
69 | |+.oo. . |
70 | |.o++ . . |
71 | |. o++ . . |
72 | | .o+ . |
73 | +----[SHA256]-----+
74 | ```
75 |
76 | 다음 명령을 실행하여 `ssh-agent` 에 생성된 SSH 의 권한을 변경한다.
77 |
78 | ```bash
79 | $ chmod 600 ~/.ssh/id_ed25519.pub
80 | ```
81 |
82 |
83 |
84 | #### 2. GitHub 계정에 새 SSH 키 추가
85 |
86 | 터미널에서 다음 명령을 실행하여 `xclip` ( 터미널에서 텍스트 파일의 내용을 클립보드에 복사하는 프로그램 )을 설치한다.
87 |
88 | ```bash
89 | $ sudo apt-get install xclip
90 | ```
91 |
92 | 설치가 끝나면 아래의 `xclip` 을 이용한 명령을 실행하여, 새로 만든 SSH 키의 내용을 클립보드로 복사한다.
93 |
94 | ```bash
95 | $ xclip -selection clipboard < ~/.ssh/id_ed25519.pub
96 | ```
97 |
98 | 웹브라우저에서 [**GitHub**](https://github.com) 를 열고 자신의 계정으로 로그인한다.
99 |
100 | 아래 그림과 같이 화면 우측 상단의 로그인한 사용자를 나타내는 이미지를 클릭하여 열린 메뉴에서 **'Setting'** 을 클릭한다.
101 |
102 | 
103 |
104 | 좌측 메뉴항목 중 **'SSH and GPG keys'** 를 클릭한다.
105 |
106 | 
107 |
108 | **'New SSH key'** 버튼을 클릭한다.
109 |
110 | 
111 |
112 | **'Title'** 란에 적당한 제목을 적어주고 **'Key'** 란에는 앞서 `xcliper` 를 이용해 클립보드로 복사한 `~/.ssh/id_ed25519.pub` 키 파일의 내용을 붙혀넣기 한 후, **'Add SSH Key'** 버튼을 클릭한다.
113 |
114 | 
115 |
116 | 다음과 같이 등록된 SSH 키 정보를 확인할 수 있다.
117 |
118 | 
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 | ---
127 |
128 | [튜토리얼 목록](../README.md)
129 |
--------------------------------------------------------------------------------
/ros1_tutorial/img/GPS_info_around_D_Station.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/GPS_info_around_D_Station.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/PNU_google_map1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/PNU_google_map1.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/PNU_google_map2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/PNU_google_map2.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/PNU_google_map3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/PNU_google_map3.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/RollPitchYaw_ARmarker.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/RollPitchYaw_ARmarker.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/Screenshot from 2020-01-21 07-51-55.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/Screenshot from 2020-01-21 07-51-55.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/Screenshot from 2020-01-21 16-54-37.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/Screenshot from 2020-01-21 16-54-37.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/Screenshot from 2020-01-21 16-56-11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/Screenshot from 2020-01-21 16-56-11.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/Screenshot from 2020-01-21 16-57-38.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/Screenshot from 2020-01-21 16-57-38.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/Screenshot from 2020-01-21 17-31-03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/Screenshot from 2020-01-21 17-31-03.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/add_frame.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/add_frame.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ar_marker/marker_id/AR_Marker_03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ar_marker/marker_id/AR_Marker_03.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ar_marker/marker_id/markers0to8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ar_marker/marker_id/markers0to8.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ar_marker/marker_id/markers9to17.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ar_marker/marker_id/markers9to17.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ar_marker/orientation_z/orientation_z_eq0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ar_marker/orientation_z/orientation_z_eq0.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ar_marker/orientation_z/orientation_z_gt0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ar_marker/orientation_z/orientation_z_gt0.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ar_marker/orientation_z/orientation_z_lt0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ar_marker/orientation_z/orientation_z_lt0.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ar_marker/position_x/position_x_eq0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ar_marker/position_x/position_x_eq0.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ar_marker/position_x/position_x_gt0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ar_marker/position_x/position_x_gt0.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ar_marker/position_x/position_x_lt0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ar_marker/position_x/position_x_lt0.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ar_marker/position_z/mesure1m.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ar_marker/position_z/mesure1m.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ar_marker/position_z/mesure2m.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ar_marker/position_z/mesure2m.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ar_marker/position_z/mesure3m.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ar_marker/position_z/mesure3m.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ar_marker/position_z/mesure4m.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ar_marker/position_z/mesure4m.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ar_marker_axis.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ar_marker_axis.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ar_marker_axis.psp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ar_marker_axis.psp
--------------------------------------------------------------------------------
/ros1_tutorial/img/ar_marker_rviz1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ar_marker_rviz1.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ar_marker_rviz2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ar_marker_rviz2.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/attention.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/attention.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/atti_tmp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/atti_tmp.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/bebop_attitude.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/bebop_attitude.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/bebop_attitude.psp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/bebop_attitude.psp
--------------------------------------------------------------------------------
/ros1_tutorial/img/bebop_autonomy_readthedoc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/bebop_autonomy_readthedoc.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/bebop_n_marker3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/bebop_n_marker3.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/bebop_n_marker3.psp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/bebop_n_marker3.psp
--------------------------------------------------------------------------------
/ros1_tutorial/img/calibration/calibrate_monocular_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/calibration/calibrate_monocular_1.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/calibration/calibrate_monocular_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/calibration/calibrate_monocular_2.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/calibration/calibrate_monocular_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/calibration/calibrate_monocular_3.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/calibration/calibrate_monocular_4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/calibration/calibrate_monocular_4.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/calibration/calibrate_monocular_5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/calibration/calibrate_monocular_5.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/calibration/calibrate_monocular_6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/calibration/calibrate_monocular_6.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/chk_chrome_ver.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/chk_chrome_ver.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/chk_chrome_ver2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/chk_chrome_ver2.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/chrome_drv1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/chrome_drv1.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/chrome_drv_down.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/chrome_drv_down.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/chrome_seeting_menu.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/chrome_seeting_menu.gif
--------------------------------------------------------------------------------
/ros1_tutorial/img/cmd4turtlesim.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/cmd4turtlesim.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/complex_multimaster_network.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/complex_multimaster_network.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/cuDNN_8_2_2_x86_64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/cuDNN_8_2_2_x86_64.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/cuda_toolkit_11_4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/cuda_toolkit_11_4.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/cv_bridge.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/cv_bridge.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/cv_bridge_after.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/cv_bridge_after.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/cv_bridge_before.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/cv_bridge_before.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/darknet_ROS/darknet_ros_sample1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/darknet_ROS/darknet_ros_sample1.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/darknet_ROS/darknet_ros_sample2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/darknet_ROS/darknet_ros_sample2.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/darknet_ROS/darknet_ros_uvc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/darknet_ROS/darknet_ros_uvc.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/darknet_ROS/how2register_sshkey2github_01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/darknet_ROS/how2register_sshkey2github_01.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/darknet_ROS/how2register_sshkey2github_02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/darknet_ROS/how2register_sshkey2github_02.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/darknet_ROS/how2register_sshkey2github_03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/darknet_ROS/how2register_sshkey2github_03.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/darknet_ROS/how2register_sshkey2github_04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/darknet_ROS/how2register_sshkey2github_04.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/darknet_ROS/how2register_sshkey2github_05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/darknet_ROS/how2register_sshkey2github_05.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/darknet_ROS/how2register_sshkey2github_06.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/darknet_ROS/how2register_sshkey2github_06.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/download_nodejs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/download_nodejs.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/drone_on_map1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/drone_on_map1.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/drone_on_map2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/drone_on_map2.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/equationTfDemo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/equationTfDemo.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/go2goal_py_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/go2goal_py_1.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/go2goal_py_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/go2goal_py_2.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/gps_bearing_n_attitude.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/gps_bearing_n_attitude.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/gps_cn_korchamhrd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/gps_cn_korchamhrd.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/idea.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/idea.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/image_publisher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/image_publisher.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/info_of_chrome.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/info_of_chrome.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/install_sphinx_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/install_sphinx_1.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/install_sphinx_1_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/install_sphinx_1_1.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/install_sphinx_1_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/install_sphinx_1_2.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/install_sphinx_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/install_sphinx_2.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/install_sphinx_2_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/install_sphinx_2_1.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/install_sphinx_2_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/install_sphinx_2_2.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/install_sphinx_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/install_sphinx_3.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/install_sphinx_3_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/install_sphinx_3_1.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/install_sphinx_3_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/install_sphinx_3_2.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/kakao_api/kakao_api_01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/kakao_api/kakao_api_01.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/kakao_api/kakao_api_02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/kakao_api/kakao_api_02.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/kakao_api/kakao_api_03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/kakao_api/kakao_api_03.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/kakao_api/kakao_api_04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/kakao_api/kakao_api_04.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/kakao_api/kakao_api_05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/kakao_api/kakao_api_05.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/kakao_api/kakao_api_06.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/kakao_api/kakao_api_06.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/kakao_api/kakao_api_07.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/kakao_api/kakao_api_07.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/kakao_api/kakao_api_08.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/kakao_api/kakao_api_08.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/kakao_api/kakao_api_09.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/kakao_api/kakao_api_09.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/kakao_api/kakao_api_10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/kakao_api/kakao_api_10.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/kakao_api/kakao_api_11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/kakao_api/kakao_api_11.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/m_per_lat_lon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/m_per_lat_lon.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/marker5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/marker5.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/marker5_v.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/marker5_v.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/marker_pose1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/marker_pose1.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/marker_pose2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/marker_pose2.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/marker_pose3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/marker_pose3.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/marker_pose_o.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/marker_pose_o.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/marker_pose_x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/marker_pose_x.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/mouse_pointer_1.psp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/mouse_pointer_1.psp
--------------------------------------------------------------------------------
/ros1_tutorial/img/move_py_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/move_py_1.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/move_py_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/move_py_2.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/move_turtle_svc_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/move_turtle_svc_1.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/move_turtle_svc_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/move_turtle_svc_2.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/move_turtle_svc_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/move_turtle_svc_3.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/move_turtle_svc_4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/move_turtle_svc_4.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/multiple_computer_ros_network.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/multiple_computer_ros_network.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/my_1st_pkg_pub_sub.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/my_1st_pkg_pub_sub.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/my_1st_pkg_rqt_graph.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/my_1st_pkg_rqt_graph.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/note4brocken.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/note4brocken.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/open_tf_frames_pdf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/open_tf_frames_pdf.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/pnu_map.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/pnu_map.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/robot_n_marker.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/robot_n_marker.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/robot_n_marker.psp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/robot_n_marker.psp
--------------------------------------------------------------------------------
/ros1_tutorial/img/robot_n_marker1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/robot_n_marker1.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/robot_n_marker2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/robot_n_marker2.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/robot_n_marker2.psd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/robot_n_marker2.psd
--------------------------------------------------------------------------------
/ros1_tutorial/img/robot_n_marker2.psp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/robot_n_marker2.psp
--------------------------------------------------------------------------------
/ros1_tutorial/img/robot_n_marker3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/robot_n_marker3.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/robot_n_marker3.psp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/robot_n_marker3.psp
--------------------------------------------------------------------------------
/ros1_tutorial/img/rotate_py_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/rotate_py_1.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/rotate_py_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/rotate_py_2.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/rqt_graph_turtlesim.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/rqt_graph_turtlesim.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/rqt_tf_tree.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/rqt_tf_tree.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/running_sphinx.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/running_sphinx.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/sav79D1.tmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/sav79D1.tmp
--------------------------------------------------------------------------------
/ros1_tutorial/img/single_computer_ros_network.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/single_computer_ros_network.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/single_computer_ros_network_example.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/single_computer_ros_network_example.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/sphinks_takeoff.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/sphinks_takeoff.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/test_param_0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/test_param_0.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/test_param_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/test_param_1.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/test_param_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/test_param_2.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/tf_axis_color.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/tf_axis_color.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/tf_demo_1of2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/tf_demo_1of2.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/tf_demo_2of2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/tf_demo_2of2.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/tf_frmaes_pdf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/tf_frmaes_pdf.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/tf_marker.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/tf_marker.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/tf_marker_org.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/tf_marker_org.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/tf_rviz.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/tf_rviz.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/time_travel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/time_travel.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/turtlebot3/RPi_GPIO.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/turtlebot3/RPi_GPIO.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/turtlebot3/button_upper_right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/turtlebot3/button_upper_right.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/turtlebot3/hotspot01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/turtlebot3/hotspot01.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/turtlebot3/hotspot02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/turtlebot3/hotspot02.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/turtlebot3/hotspot03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/turtlebot3/hotspot03.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/turtlebot3/hotspot04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/turtlebot3/hotspot04.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/turtlebot3/menu_button.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/turtlebot3/menu_button.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/turtlebot3/sd_boot01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/turtlebot3/sd_boot01.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/turtlebot3/sd_boot02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/turtlebot3/sd_boot02.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/turtlebot3/sd_boot03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/turtlebot3/sd_boot03.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/turtlebot3/sd_card01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/turtlebot3/sd_card01.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/turtlebot3/sd_card02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/turtlebot3/sd_card02.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/turtlebot3/sd_card03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/turtlebot3/sd_card03.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/turtlebot3/sd_card04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/turtlebot3/sd_card04.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/turtlebot3/usb2uart.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/turtlebot3/usb2uart.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/turtlesim_move_py.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/turtlesim_move_py.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/turtlesim_node.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/turtlesim_node.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/turtlesim_node_msg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/turtlesim_node_msg.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/turtlsim_topic_echo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/turtlsim_topic_echo.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/00_grub.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/00_grub.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1604/00_grub.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1604/00_grub.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1604/01_welcome.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1604/01_welcome.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1604/02_connect_wifi_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1604/02_connect_wifi_1.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1604/02_connect_wifi_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1604/02_connect_wifi_2.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1604/02_during_setup.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1604/02_during_setup.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1604/03_setup_where.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1604/03_setup_where.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1604/04_add_partition.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1604/04_add_partition.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1604/05_swap_partition.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1604/05_swap_partition.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1604/05_swap_partition_.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1604/05_swap_partition_.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1604/06_root_partition.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1604/06_root_partition.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1604/07_partition_result.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1604/07_partition_result.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1604/08_apply_partition.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1604/08_apply_partition.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1604/09_where_live.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1604/09_where_live.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1604/10_kb_layout.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1604/10_kb_layout.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1604/11_whoru.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1604/11_whoru.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1604/12_start_install.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1604/12_start_install.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1604/13_finish_install.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1604/13_finish_install.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1604/13_installing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1604/13_installing.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1604/_download_iso.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1604/_download_iso.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1604/_templete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1604/_templete.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1604/disk_mgmt_00.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1604/disk_mgmt_00.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1604/disk_mgmt_01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1604/disk_mgmt_01.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1604/disk_mgmt_02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1604/disk_mgmt_02.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1604/disk_mgmt_03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1604/disk_mgmt_03.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1604/disk_mgmt_04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1604/disk_mgmt_04.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1604/disk_mgmt_05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1604/disk_mgmt_05.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1604/grub_loader.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1604/grub_loader.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1604/system_properties.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1604/system_properties.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1604/system_setting_ico.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1604/system_setting_ico.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1604/upgrade1804_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1604/upgrade1804_1.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1604/upgrade1804_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1604/upgrade1804_2.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_11_36.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_11_36.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_12_11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_12_11.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_12_29.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_12_29.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_14_04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_14_04.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_15_02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_15_02.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_15_11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_15_11.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_15_19.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_15_19.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_15_30.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_15_30.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_16_19.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_16_19.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_16_30.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_16_30.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_17_04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_17_04.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_17_12.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_17_12.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_17_25.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_17_25.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_17_37.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_17_37.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_20_00.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_20_00.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_20_34.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_20_34.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_21_32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_21_32.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_21_42.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_21_42.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_22_06.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_22_06.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_23_27.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_23_27.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_23_43.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_23_43.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_23_48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_23_48.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_27_49.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_22_27_49.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_23_16_43.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/VirtualBox_bionic_04_07_2021_23_16_43.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/_download_iso.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/_download_iso.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/disk01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/disk01.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/disk02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/disk02.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/disk03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/disk03.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/disk04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/disk04.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/disk05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/disk05.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/disk06.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/disk06.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/disk07.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/disk07.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/disk08.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/disk08.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/eject_button.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/eject_button.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/hud.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/hud.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/install_01_welcome.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/install_01_welcome.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/install_02_kb_layout.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/install_02_kb_layout.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/install_03_update_etc_sw.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/install_03_update_etc_sw.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/install_04_how_to_install.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/install_04_how_to_install.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/install_05_write_to_disk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/install_05_write_to_disk.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/install_06_select_timezone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/install_06_select_timezone.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/install_07_who_are_you.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/install_07_who_are_you.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/install_08_copy_files.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/install_08_copy_files.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/menu_button.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/menu_button.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/run_Disks.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/run_Disks.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/1804/system_setting_ico.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/1804/system_setting_ico.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/__win_key.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/__win_key.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/_download_rufus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/_download_rufus.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/_rufus01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/_rufus01.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/_rufus02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/_rufus02.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/_rufus_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/_rufus_1.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/_rufus_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/_rufus_2.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/disk_mgmt_00.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/disk_mgmt_00.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/disk_mgmt_01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/disk_mgmt_01.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/disk_mgmt_02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/disk_mgmt_02.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/disk_mgmt_03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/disk_mgmt_03.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/disk_mgmt_04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/disk_mgmt_04.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/disk_mgmt_05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/disk_mgmt_05.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/grub_loader.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/grub_loader.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu/system_properties.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu/system_properties.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu16/00_grub.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu16/00_grub.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu16/01_welcome.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu16/01_welcome.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu16/02_connect_wifi_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu16/02_connect_wifi_1.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu16/02_connect_wifi_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu16/02_connect_wifi_2.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu16/02_during_setup.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu16/02_during_setup.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu16/03_setup_where.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu16/03_setup_where.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu16/04_add_partition.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu16/04_add_partition.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu16/05_swap_partition.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu16/05_swap_partition.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu16/05_swap_partition_.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu16/05_swap_partition_.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu16/06_root_partition.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu16/06_root_partition.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu16/07_partition_result.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu16/07_partition_result.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu16/08_apply_partition.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu16/08_apply_partition.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu16/09_where_live.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu16/09_where_live.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu16/10_kb_layout.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu16/10_kb_layout.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu16/11_whoru.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu16/11_whoru.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu16/12_start_install.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu16/12_start_install.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu16/13_finish_install.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu16/13_finish_install.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu16/13_installing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu16/13_installing.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu16/__win_key.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu16/__win_key.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu16/_download_iso.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu16/_download_iso.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu16/_download_rufus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu16/_download_rufus.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu16/_rufus01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu16/_rufus01.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu16/_rufus02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu16/_rufus02.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu16/_rufus_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu16/_rufus_1.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu16/_rufus_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu16/_rufus_2.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu16/_templete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu16/_templete.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu16/disk_mgmt_00.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu16/disk_mgmt_00.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu16/disk_mgmt_01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu16/disk_mgmt_01.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu16/disk_mgmt_02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu16/disk_mgmt_02.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu16/disk_mgmt_03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu16/disk_mgmt_03.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu16/disk_mgmt_04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu16/disk_mgmt_04.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu16/disk_mgmt_05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu16/disk_mgmt_05.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu16/grub_loader.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu16/grub_loader.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu16/system_properties.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu16/system_properties.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu16/system_setting_ico.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu16/system_setting_ico.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu16/upgrade1804_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu16/upgrade1804_1.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/ubuntu16/upgrade1804_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/ubuntu16/upgrade1804_2.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/urdf1_1_myfirst_rviz1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/urdf1_1_myfirst_rviz1.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/urdf1_1_myfirst_rviz2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/urdf1_1_myfirst_rviz2.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/urdf1_2_multiple_shape.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/urdf1_2_multiple_shape.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/urdf1_3_origins.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/urdf1_3_origins.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/urdf1_4_materials.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/urdf1_4_materials.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/urdf1_5_visual.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/urdf1_5_visual.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/urdf2_6_flexible.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/urdf2_6_flexible.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/version_of_chrome.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/version_of_chrome.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/web_druver_chrome_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/web_druver_chrome_1.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/xyz_color.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/xyz_color.png
--------------------------------------------------------------------------------
/ros1_tutorial/img/yolo_v2tiny_cuda.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/img/yolo_v2tiny_cuda.png
--------------------------------------------------------------------------------
/ros1_tutorial/multimaster_fkie/ROS-systems.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/multimaster_fkie/ROS-systems.pdf
--------------------------------------------------------------------------------
/ros1_tutorial/multimaster_fkie/fkie_pc1_turtle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/multimaster_fkie/fkie_pc1_turtle.png
--------------------------------------------------------------------------------
/ros1_tutorial/multimaster_fkie/fkie_pc2_turtle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/multimaster_fkie/fkie_pc2_turtle.png
--------------------------------------------------------------------------------
/ros1_tutorial/multimaster_fkie/multiple_computer_ros_network.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/multimaster_fkie/multiple_computer_ros_network.png
--------------------------------------------------------------------------------
/ros1_tutorial/multimaster_fkie/single_computer_ros_network.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/multimaster_fkie/single_computer_ros_network.png
--------------------------------------------------------------------------------
/ros1_tutorial/multimaster_fkie/single_computer_ros_network_example.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/greattoe/ros_tutorial_kr/02096da3a6d77420bbde5635103388c94ad8f9ca/ros1_tutorial/multimaster_fkie/single_computer_ros_network_example.png
--------------------------------------------------------------------------------
/ros1_tutorial/roscpp/nodelet.md:
--------------------------------------------------------------------------------
1 | ## ROS wiki/ Nodelet
2 |
3 |
4 |
5 |
6 |
7 | ---
8 |
9 | ### 1. High Level
10 |
11 | ---
12 |
13 | `nodelet` 은 프로세스 내부에서 메시지 전달 시 copy cost의 발생없이[^1] 단일 프로세스 내에서 하나의 머신에서 여러 알고리즘을 실행하는 방법을 제공하기 위해 설계되었다. `roscpp` 는 같은 노드 내의 publisher 와 subscriber 호출 시 포인터 복사 없이 수행하도록 최적화 되어 왔다. 이를 위해 `nodelet` 은 동일 노드로의 동적 클라스 로딩을 허용하지만, 같은 프로세스 내에서 하나의 같은 `nodelet` 이 별개의 서로 다른 `nodelet` 처럼 동작하도록 간단한 별도의 네임스페이스를 제공한다. 이로 인해 플러그인 라이브러리( [pluginlib](http://wiki.ros.org/pluginlib) )를 사용하는 런타임( runtime )에서 동적으로 `nodelet` 로딩이 가능하도록 그 기능이 확대되었다.
14 |
15 | #### 1.1 Application( 응용분야 )
16 |
17 | - 처리량의 급증으로 인한 데이터 트래픽 문제는 많은 숫자의 `nodelet` 을 구성 후, 동일 프로세스에 로드하여 copying 및 network 트래픽을 피할 수 있다.
18 |
19 | #### 1.2 Design Goals( 설계 목표 )
20 |
21 | - 이미 만들어져 사용되고 있는 C++ ROS 인터페이스 사용
22 | - `nodelet` 들 사이에 zero copy[^1]를 이용한 데이터 교환 허용
23 | - 시간 의존성을 극복하기위한 플러그인으로서의 동적 로딩
24 | - 성능 향상을 위한 경우를 제외한 위치 투명성
25 | - `node` 와 `nodelet` 사이의 최소한의 코드 상이성
26 |
27 | #### 1.3 Technique( 적용기술 )
28 |
29 | - 동적 로딩에 사용될 기본 클래스 `nodelet::Nodelet` 을 정의하라. 모든 `nodelet` 은 이 기본 클래스에서 상속되며 [pluginlib](http://wiki.ros.org/pluginlib)를 사용하여 동적으로 로드될 수 있다.
30 | - 마치 첫번째 클라스의 node처럼 동작할 수 있도록 네임스페이스를 제공하여 자동으로 arguments 와 parameters를 remapping 한다.
31 | - 하나 이상의 `nodelet` 을 로드할 수 있는 `nodelet_manager` 프로세스가 존재한다. `nodelet` 사이의 통신은 boost shared pointer[^2]와 함께 zero copy[^1] 를 이용한 `roscpp` 의 publish 호출을 사용할 수 있다.
32 |
33 | #### 1.4 Basic Usage( 기본 사용법 )
34 |
35 | ```
36 | nodelet usage:
37 | nodelet load pkg/Type manager - Launch a nodelet of type pkg/Type on manager manager
38 | nodelet standalone pkg/Type - Launch a nodelet of type pkg/Type in a standalone node
39 | nodelet unload name manager - Unload a nodelet a nodelet by name from manager
40 | nodelet manager - Launch a nodelet manager node
41 | ```
42 |
43 |
44 |
45 | 작업중...
46 |
47 | ---
48 |
49 | #### 1.5 API( Application Programming Interfaces )
50 |
51 | ##### 1.5.1 Nodelet Base Class
52 |
53 | `nodelet::Nodelet`
54 |
55 | Publish methods:
56 |
57 | ```c++
58 | Nodelet()
59 | void init (const std::string& name, const ros::M_string& remapping_args, const std::vector& my_argv);
60 | ```
61 |
62 | Protected members and methods for use in subclass:
63 |
64 |
65 | ```c++
66 | std::string getName()
67 | ros::NodeHandle& getNodeHandle()
68 | ros::NodeHandle& getPrivateNodeHandle()
69 | ros::NodeHandle& getMTNodeHandle()
70 | ros::NodeHandle& getMTPrivateNodeHandle()
71 | ros::CallbackQueue& getMTCallbackQueue()
72 | std::vector getMyArgv()
73 | ```
74 |
75 | Initialization method used to start ROS API in subclass:
76 |
77 |
78 | ```c++
79 | virtual void onInit () = 0
80 | ```
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 | ---
91 |
92 | [^1]:**zero copy ** **:** TCP/IP 환경에서 클라이언트의 정적파일 요청에 대응하기 위해 서버 어플리케이션의 사용자 영역과 커널 영역 사이에서 **1.** 디스크로 부터 파일데이터 요청 , **2.** 복사된 파일 데이터 반환, **3.** 반환받은 데이터를 소켓에 넣기 요청, **4.** 데이터를 소켓에 복사 등과 같은 과정이 처리된 이 후 비로소 서버가 클라이언트의 요청에 응답하게된다. **zero copy**는 커널영역에서 파일을 읽어서 바로 소켓에 넣어 처리함으로써 불필요한 반복된 복사과정을 생략한 방법이다.
93 | [^2]: **boost shared pointer** **:** 스마트 포인터의 일종으로 복사 동작이 일어날 때는 참조 카운트를 늘리고, 소멸이 일어날 때는 참조 카운트를 줄임으로서 자신이 가리키고 있는 객체에 대한 참조 카운트를 유지한다. ( 이 때 참조 카운트가 0이 되면 가리키고 있는 객체를 소멸시킨다. )
94 |
95 |
--------------------------------------------------------------------------------
/ros1_tutorial/roscpp/spin_n_sleep.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ## ros::spin() 과 rate.sleep() 의 차이
4 |
5 |
6 |
7 | ---
8 |
9 | ### ros::spin()
10 |
11 | 메세지 구독 또는 서비스 처리는 해당 이벤트( 메세지 구독, 서비스 처리 )에 대한 `callback` 함수를 호출에 의해 수행된다. `ros::spin()` 또는 `ros::spinOnce()` 는 이러한 `callback` 처리에 필요한 `roscpp` 함수이다.
12 |
13 | 코드 끝에서 `ros::spin()` 또는 `ros::spinOnce()` 이 호출되면 `Ctrl-C` 입력이 발생할 때 까지 프로그램이 종료되지 않도록 대기시키면서 `subscribe` 할 새 토픽이 `publish` 되거나 처리할 `service` 요청이 발생할 경우 해당 `callback` 함수를 호출한다.
14 |
15 | 따라서 다음에 설명하고 있는 Rate, Duration 하고는 전혀 무관한 개념이다.
16 |
17 | 하지만 간 혹 작성한 노드가 `Ctrl-C` 입력에 응답하지 않는 경우를 방지하는 차원에서 `callback` 처리가 필요 없음에도 코드 마지막에 `ros::spin()` 또는 `ros::spinOnce()` 를 호출하는 경우에는 하는 `callback` 함수를 호출해야 하는 이벤트가 발생할 때까지 특별히 처리하는 작업없이 시간을 보낸다는 점에서만 조금 비슷하다.
18 |
19 |
20 |
21 | ---
22 |
23 | ### ros::Rate::sleep() ###
24 |
25 | 다음 코드에서 Rate 객체 rate는 루프를 초당 24회 반복시키기 위해 선언했다. 루프 1회 수행에 소요되는 시간은 그 내용에 따라 다르지만 루프 마지막의 rate.sleep( ) 에서 1/24초에서 모자란 시간만큼 sleep 한다. ( [ros::Rate::sleep( )](http://docs.ros.org/diamondback/api/rostime/html/classros_1_1Rate.html#ae5664d27cda1b17a103347560259e945) 참조 )
26 |
27 | ```c++
28 | ros::Rate rate(24.); // 24Hz
29 | while(ros::ok())
30 | {
31 | .
32 | .
33 | .
34 | rate.sleep();
35 | }
36 | ```
37 |
38 | 같은 효과를 같는 다른 방법으로는 [ros::Duration::sleep( )](http://docs.ros.org/diamondback/api/rostime/html/classros_1_1Duration.html#a39708cc9b2871f6b3715023ab9610043) 이 있다.
39 |
40 | ### ros::Duration::sleep()
41 |
42 | 이 코드의 Duartion 객체 duration 또한 1/24초 동안 루프를 1회 반복시키기 위해 선언 했다는 점에서는 위 코드의 Rate 객체 rate 와 다를 것이 없다. 다만 rate는 매개변수로 '1초에 몇 번 반복할 것인가?' 라는 주파수 관점의 Hz를 사용하고, duration은 '1회 반복에 얼만큼의 시간이 소요되는가?' 라는 주기를 관점으로 초(sec)를 사용한다는 것이 다를 뿐이다.
43 |
44 | ```c++
45 | ros::Duration duration(1./24.); // 1/24초마다 한 번 ( once on every 1/24 sec )
46 | while(ros::ok())
47 | {
48 | .
49 | .
50 | .
51 | duration.sleep();
52 | }
53 | ```
54 |
55 |
56 |
57 | ---
58 |
59 |
--------------------------------------------------------------------------------
/ros1_tutorial/rospy/bebop2/bb2_1_bebop_autonomy.md:
--------------------------------------------------------------------------------
1 | ## bebop_autonomy / Install
2 |
3 |
4 |
5 | ---
6 |
7 | ## Install bebop_autonomy
8 |
9 | **튜토리얼 레벨 :** Intermediate(중급)(수정)
10 |
11 | **이 튜토리얼 작성 환경 :** catkin **/** Ubuntu 16.04 **/** Kinetic
12 |
13 | **다음 튜토리얼 :** [Parrot-Sphinx](./bb2_2_parrot_sphinx.md)
14 |
15 | **자료원본(출처) :**
16 |
17 | **목록보기:** [README.md](../README.md)
18 |
19 | ---
20 |
21 | 이 문서는 [bebop_autonomy](https://bebop-autonomy.readthedocs.io/en/latest/) 를 참조하여, `catkin_make` 환경에서 `bebop_autonomy` ROS 패키지를 설치하는 방법을 설명한다.
22 |
23 |
24 |
25 | ### 1. 설치 전 요구사항
26 |
27 | * ROS Indigo, jade or Kinetic (우분투 환경에서만 테스트 되었음)
28 |
29 | * ROS 패키지 빌드를 위한 기본적인 지식
30 |
31 | * `build-esstential` , `python-rosdep` , `python-catkin-tools` 우분투 패키지
32 |
33 | ```bash
34 | $ sudo apt-get install build-essential python-rosdep python-catkin-tools
35 | ```
36 |
37 |
38 |
39 | ### 2. 설치( 소스코드로부터 빌드 )
40 |
41 | catkin 워크스페이스의 src 폴더로 작업경로 변경
42 |
43 | ```bash
44 | $ cd ~/catkin_ws/src
45 | ```
46 |
47 | `bebop_autonomy` Github 로부터 소스코드 복제
48 |
49 | ```bash
50 | $ git clone https://github.com/AutonomyLab/bebop_autonomy.git
51 | ```
52 |
53 | catkin 워크스페이스로 작업경로 변경
54 |
55 | ```bash
56 | $ cd ~/catkin_ws
57 | ```
58 |
59 | 빌드
60 |
61 | ```bash
62 | $ catkin_make
63 | ```
64 |
65 | 빌드 중 다음과 같은 에러가 발생할 경우,
66 |
67 | ```bash
68 | -- Could not find the required component 'parrot_arsdk'. The following CMake error indicates that you either need to install the package with the same name or change your environment so that it can be found.
69 | CMake Error at /opt/ros/kinetic/share/catkin/cmake/catkinConfig.cmake:83 (find_package):
70 | Could not find a package configuration file provided by "parrot_arsdk" with
71 | any of the following names:
72 |
73 | parrot_arsdkConfig.cmake
74 | parrot_arsdk-config.cmake
75 |
76 | Add the installation prefix of "parrot_arsdk" to CMAKE_PREFIX_PATH or set
77 | "parrot_arsdk_DIR" to a directory containing one of the above files. If
78 | "parrot_arsdk" provides a separate development package or SDK, be sure it
79 | has been installed.
80 | Call Stack (most recent call first):
81 | bebop_autonomy/bebop_driver/CMakeLists.txt:7 (find_package)
82 |
83 |
84 | -- Configuring incomplete, errors occurred!
85 | See also "/home/username/catkin_ws/build/CMakeFiles/CMakeOutput.log".
86 | See also "/home/username/catkin_ws/build/CMakeFiles/CMakeError.log".
87 | Invoking "cmake" failed
88 | $
89 | ```
90 |
91 | `ros-kinetic-parrot-arsdk` 패키지를 설치 후,
92 |
93 | ```bash
94 | $ sudo apt-get install ros-kinetic-parrot-arsdk
95 | ```
96 |
97 | 다시 빌드한다.
98 |
99 | ```bash
100 | $ cd ~/catkin_ws
101 | $ catkin_make
102 | ```
103 |
104 | 간혹, 아래와 같은 에러가 발생하면,
105 |
106 | ```bash
107 | [ 96%] Generating C++ code from bebop_msgs/Ardrone3PilotingStateAlertStateChanged.msg
108 | [ 96%] Generating C++ code from bebop_msgs/Ardrone3PilotingStateFlatTrimChanged.msg
109 | [ 97%] Generating C++ code from bebop_msgs/CommonChargerStateMaxChargeRateChanged.msg
110 | [ 97%] Generating C++ code from bebop_msgs/CommonMavlinkStateMissionItemExecuted.msg
111 | [ 97%] Generating C++ code from bebop_msgs/CommonCommonStateProductModel.msg
112 | [ 97%] Generating C++ code from bebop_msgs/CommonAnimationsStateList.msg
113 | [ 97%] Generating C++ code from bebop_msgs/CommonCommonStateMassStorageInfoStateListChanged.msg
114 | [ 98%] Built target bebop_msgs_generate_messages_cpp
115 | [ 98%] Linking CXX executable
116 | Makefile:138: recipe for target 'all' failed
117 | make: *** [all] Error 2
118 | Invoking "make -j8 -l8" failed
119 | $
120 | ```
121 |
122 | 다시 한 번 빌드한다.
123 |
124 | ```bash
125 | $ catkin_make
126 | ```
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 | [튜토리얼 목록 열기](../README.md) [다음 튜토리얼](./bb2_2_parrot_sphinx.md)
--------------------------------------------------------------------------------
/ros1_tutorial/rospy/bebop2/bb2_1_bebop_autonomy_noetic.md:
--------------------------------------------------------------------------------
1 | ## bebop_autonomy 설치 (우분투 20.04 LTS + ROS Melodic)
2 |
3 |
4 |
5 | 참고문서 https://developer.parrot.com/docs/SDK3
6 |
7 |
8 |
9 | 우분투 20.04 + ROS Melodic 환경에서 `bebop_autonomy` 를 빌드하려면 `parrot-arsdk` 에대한 의존성 문제가 발생하므로 우선 [`parrot_arsdk`](https://github.com/AutonomyLab/parrot_arsdk) 를 빌드해야한다. 하지만 이 역시 ARDroneSDK3 에 의존성을 가지므로 작업순서는
10 |
11 | 1. ARDroneSDK3 설치
12 | 2. parrot_arsdk 설치
13 | 3. bebop_autonomy 설치
14 |
15 | 와 같은 순서로 이루어진다.
16 |
17 | ### 1. ARDroneSDK3 설치
18 |
19 | ARDroneSDK3 에 대한 자료는 https://developer.parrot.com/docs/SDK3 를 참고한다.
20 |
21 | #### 1.1 미리 설치해 둘 패키지
22 |
23 | ```
24 | sudo apt install git build-essential autoconf libtool libavahi-client-dev libavcodec-dev libavformat-dev libswscale-dev libncurses5-dev mplayer
25 | ```
26 |
27 | #### 1.2 `repo` 설치 및 설정
28 |
29 | ```
30 | mkdir -p ~/.bin
31 | PATH="${HOME}/.bin:${PATH}"
32 | curl https://storage.googleapis.com/git-repo-downloads/repo > ~/.bin/repo
33 | chmod a+rx ~/.bin/repo
34 | ```
35 |
36 | 우분투 20.04 에는 파이썬3 가 기본으로 설정되어 있으므로 파이썬으로 된 소스코드의 `#!/usr/bin/env python` 부분( 셔뱅: shebang )에서 에러가 나지않도록 `python-is-python3` 을 설치해준다.
37 |
38 | ```
39 | sudo apt install python-is-python3
40 | ```
41 |
42 | `repo` 명령 사용을 위해 다음 명령을 통해 자신의 `github` 에서 사용하는 이메일주소와 이름을 등록한다.
43 |
44 | ```
45 | git config --global user.email "your@email.address"
46 | git config --global user.name "yourname"
47 | ```
48 |
49 | #### 1.3 소스코드 다운로드
50 |
51 | ARDroneSDK3 소스코드를 복사할 폴더 생성 및 해당 폴더로 작업경로 변경
52 |
53 | ```
54 | mkdir sdk3
55 | cd sdk3
56 | ```
57 |
58 | `arsdk_manifests.git` 파일의 `url` 에 대해 `repo init` 명령을 실행한다.
59 |
60 | ```
61 | repo init -u https://github.com/Parrot-Developers/arsdk_manifests.git
62 | ```
63 |
64 | 이제 `repo sync` 명령을 실행하면 필요한 여러 다른 `repository` 들을 모두 다운로드한다.
65 |
66 | ```
67 | repo sync
68 | ```
69 |
70 | ```
71 | Fetching: 100% (31/31), done in 18.702s
72 | Garbage collecting: 100% (31/31), done in 0.034s
73 | repo sync has successfully
74 | ```
75 |
76 | #### 1.4 빌드
77 |
78 | 다음 명령을 실행하여 `ARDroneSDK3` 를 빌드한다.
79 |
80 | ```
81 | ./build.sh -p arsdk-native -t build-sdk -j
82 | ```
83 |
84 |
85 |
86 | ### 2. parrot-arsdk 설치
87 |
88 | `~/catkin_ws/src` 로 경로를 변경한다.
89 |
90 | ```
91 | cd ~/catkin_ws/src
92 | ```
93 |
94 | `git clone` 명령으로 `parrot-arsdk` 패키지의 소스코드를 복사한다. ( 원래 https://github.com/AutonomyLab/parrot_arsdk 가 오리지널이지만 우분투 20.04 이 후 파이썬 2.x 지원 중단에 따른 python3 문법으로 변경처리가 되어있지 않으므로 그 처리가 되어 있는 https://github.com/larics/parrot_arsdk.git 의 코드로 빌드한다. )
95 |
96 | ```
97 | git clone https://github.com/larics/parrot_arsdk.git
98 | ```
99 |
100 | 작업 경로를 `~/catkin_ws` 로 변경한다.
101 |
102 | ```
103 | cd ~/catkin_ws
104 | ```
105 |
106 | `catkin_make` 로 빌드한다.
107 |
108 | ```
109 | catkin_make
110 | ```
111 |
112 | `source` 명령으로 `~/catkin_ws/devel/setup.bash` 파일의 변경 사항을 반영한다.
113 |
114 | ```
115 | source ~/catkin_ws/devel/setup.bash
116 | ```
117 |
118 | `rospack profile` 실행
119 |
120 | ```
121 | rospack profile
122 | ```
123 |
124 |
125 |
126 | ### 3. bebop_autonomy 설치
127 |
128 | catkin 워크스페이스의 src 폴더로 작업경로 변경
129 |
130 | ```bash
131 | $ cd ~/catkin_ws/src
132 | ```
133 |
134 | `bebop_autonomy` Github 로부터 소스코드 복제
135 |
136 | ```bash
137 | $ git clone https://github.com/AutonomyLab/bebop_autonomy.git
138 | ```
139 |
140 | gedit 으로 `bebop_driver` 패키지의`bebop_video_decoder.cpp` 파일을 열어 93, 95, 97 행의 코드를 수정한다.
141 |
142 | ```
143 | gedit ~/catkin_ws/src/bebop_autonomy/bebop_driver/src/bebop_video_decoder.cpp
144 | ```
145 | 수정 전
146 | ```c
147 | if (codec_ptr_->capabilities & CODEC_CAP_TRUNCATED)
148 | {
149 | codec_ctx_ptr_->flags |= CODEC_FLAG_TRUNCATED;
150 | }
151 | codec_ctx_ptr_->flags2 |= CODEC_FLAG2_CHUNKS;
152 | ```
153 | 수정 후
154 |
155 | ```c
156 | if (codec_ptr_->capabilities & AV_CODEC_CAP_TRUNCATED)
157 | {
158 | codec_ctx_ptr_->flags |= AV_CODEC_FLAG_TRUNCATED;
159 | }
160 | codec_ctx_ptr_->flags2 |= AV_CODEC_FLAG2_CHUNKS;
161 | ```
162 |
163 | catkin 워크스페이스로 작업경로 변경
164 |
165 | ```bash
166 | $ cd ~/catkin_ws
167 | ```
168 |
169 | 빌드
170 |
171 | ```bash
172 | $ catkin_make
173 | ```
174 |
175 |
176 |
177 |
178 |
179 |
--------------------------------------------------------------------------------
/ros1_tutorial/rospy/mv_tutle_2_RotateLeftRight.md:
--------------------------------------------------------------------------------
1 | ## turtlesim/ Tutorials/ Rotate Left and Right
2 |
3 |
4 |
5 | ---
6 |
7 | ## turtlesim 좌 / 우 회전
8 |
9 | **출처 :**
10 |
11 | **튜토리얼 레벨 :** Intermediate(중급)
12 |
13 | **이 튜토리얼 작성 환경 :** catkin **/** Ubuntu 16.04 **/** Kinetic
14 |
15 | **다음 튜토리얼 :** [목표지점으로 이동](./mv_tutle_3_Go2Goal.md)
16 |
17 | **이전 튜토리얼 :** [직선 이동](./mv_tutle_1_MoveInStraightLine.md)
18 |
19 | **튜토리얼 목록 :** [README.md](../README.md)
20 |
21 | ---
22 |
23 | 이 튜토리얼 시리즈에서는 ROS 기본을 익히기 위한 turtlesim 노드의 거북이를 움직이는 파이썬 스크립트를 작성한다. 다음 링크에서 전체 소스코드를 찾을 수 있다.
24 |
25 |
26 |
27 | ### 1. 준비작업
28 |
29 | 앞서 [이 전 튜토리얼](./mv_tutle_1_MoveInStraightLine.md)에서 만든 `turtlesim_cleaner` 패키지의 `scripts` 폴더로 경로를 변경한다.
30 |
31 | ```bash
32 | $ cd ~/catkin_ws/src/turtlesim_cleaner/scripts
33 | ```
34 |
35 | `rotate.py` 파일을 만들고 실행 속성을 부여한다.
36 |
37 | ```bash
38 | $ touch rotate.py
39 | $ chmod +x rotate.py
40 | ```
41 |
42 |
43 |
44 | ### 2. 구현할 기능
45 |
46 | 회전 속도, 회전 각도, 회전 방향( 좌/우회전 )을 입력받아 입력값들의 형식 및 단위를 적절히 변환 후, 회전시간을 계산하여 `turtlesim_node` 에서 subscribe 하는 `'/turtle1/cmd_vel'` 토픽으로 publish 한다.
47 |
48 |
49 |
50 | ### 3. 코드
51 |
52 | `~/catkin_ws/src/turtlesim_cleaner/scripts` 폴더에 `rotate.py` 파일을 작성한다.
53 |
54 | ```bash
55 | $ gedit rotate.py &
56 | ```
57 |
58 | ```python
59 | #!/usr/bin/env python
60 |
61 | import rospy
62 | from geometry_msgs.msg import Twist
63 | PI = 3.1415926535897
64 |
65 | def rotate():
66 | # Starts a new node
67 | rospy.init_node('robot_cleaner', anonymous=True)
68 | pub = rospy.Publisher('/turtle1/cmd_vel', Twist, queue_size=10)
69 | msg = Twist()
70 |
71 | # Receiveing the user's input
72 | print("Let's rotate your robot")
73 | speed = input("Input your speed (degrees/sec):")
74 | angle = input("Type your distance (degrees):")
75 | clockwise = input("Clockwise?: ") # True or false
76 |
77 | # Converting from angles to radians
78 | angular_speed = speed*2*PI/360
79 | relative_angle = angle*2*PI/360
80 |
81 | # We wont use linear components
82 | msg.linear.x = msg.linear.y = msg.linear.z = 0
83 | msg.angular.x = msg.angular.y = 0
84 |
85 | # Checking if our movement is CW or CCW
86 | if clockwise:
87 | msg.angular.z = -abs(angular_speed)
88 | else:
89 | msg.angular.z = abs(angular_speed)
90 | # Setting the current time for distance calculus
91 | t0 = rospy.Time.now().to_sec()
92 | current_angle = 0
93 |
94 | while(current_angle < relative_angle):
95 | pub.publish(msg)
96 | t1 = rospy.Time.now().to_sec()
97 | current_angle = angular_speed*(t1-t0)
98 |
99 |
100 | # Forcing our robot to stop
101 | msg.angular.z = 0
102 | pub.publish(msg)
103 | rospy.spin()
104 |
105 | if __name__ == '__main__':
106 | try:
107 | # Testing our function
108 | rotate()
109 | except rospy.ROSInterruptException:
110 | pass
111 | ```
112 |
113 |
114 |
115 | ### 4. 실행
116 |
117 | `roscore` 실행
118 |
119 | ```
120 | $ roscore
121 | ```
122 |
123 | `Ctrl+Alt+T` 를 입력하여 새 터미널을 열고 `turtlesim` 노드를 실행한다.
124 |
125 | ```
126 | $ rosrun turtlesim turtlesim_node
127 | ```
128 |
129 | 
130 |
131 |
132 |
133 | `Ctrl+Alt+T` 를 입력하여 새 터미널을 열고 작성한 `rotate.py` 를 실행한다.
134 |
135 | ```
136 | $ rosrun turtlesim_cleaner move.py
137 | Let's move your robot
138 | Input your speed (degrees/sec):20
139 | Type your distance (degrees):120
140 | Clockwise?: 0
141 | ```
142 |
143 | 
144 |
145 |
146 |
147 | [튜토리얼 목록 열기](../README.md)
148 |
149 | [다음 튜토리얼](./mv_tutle_3_Go2Goal.md)
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
--------------------------------------------------------------------------------
/ros1_tutorial/rospy/tf_5_time_travel.md:
--------------------------------------------------------------------------------
1 | ## tf/ Tutorials/ Time travel with tf(Python)
2 |
3 |
4 |
5 | ------
6 |
7 | ## tf 와의 시간여행(Python)
8 |
9 | **튜토리얼 레벨 :** Intermediate(중급)
10 |
11 | **이 튜토리얼 작성 환경 :** catkin **/** Ubuntu 16.04 **/** Kinetic
12 |
13 | **이전 튜토리얼 :** [tf and Time](./tf_4_tf_n_time.md)
14 |
15 | **튜토리얼 목록 :** [README.md](../README.md)
16 |
17 | **튜토리얼 원문 :**
18 |
19 | ------
20 |
21 | 이 전 튜토리얼에서 tf 와 Time 의 기본 컨셉에 대해 알아봤다. 이 번 튜토리얼은 거기서 한 걸음 더 나아가, 가장 강력한 tf 트릭을 경험하게 할 것이다.
22 |
23 |
24 |
25 | ### 1. 시간 여행
26 |
27 | 지난 튜토리얼을 마친 시점으로 되돌아 가보자.
28 |
29 | ```
30 | user@computer:~$ cd ~/catkin_ws/src/learning_tf/nodes
31 | ```
32 |
33 | 이제 두 번 째 거북이가 첫 번 째 거북이가 현재 있는 곳으로 가도록 하지않고, 5초 전의 첫 번 째 거북이가 있었던 곳으로 가도록 만들자. 이를 위해 `~/catkin_ws/src/learning_tf/nodes/turtle_tf_listener` 를 편집한다.
34 |
35 | ```python
36 | try:
37 | now = rospy.Time.now() - rospy.Duration(5.0)
38 | listener.waitForTransform("/turtle2", "/turtle1", now, rospy.Duration(1.0))
39 | (trans, rot) = listener.lookupTransform("/turtle2", "/turtle1", now)
40 | except (tf.Exception, tf.LookupException, tf.ConnectivityException):
41 | ```
42 |
43 | 이제 이 코드를 실행해 볼 수 있다. 무엇을 보게 될 것이라 기대하는가? 당연히 처음 5초간 두 번 째 거북이는 어디로 가야하는 지 조차 모른다. 아직 첫 번 째 거북이에게는 5초 전이라는 과거가 존재하지 않기 때문이다. 하지만 5초 후에는? 일단 시작해 보자.
44 |
45 | ```
46 | user@computer:~$ cd ~/catkin_ws
47 | user@computer:~/catkin_ws$ catkin_make
48 | user@computer:~/catkin_ws$ roslaunch learning_tf start_demo.launch
49 | ```
50 |
51 |
52 |
53 | 당신의 거북이도 이 캡쳐 화면처럼 정신없이 통제불능으로 움직이는가? 그렇다면 무슨 일이 일어난 것인가?
54 |
55 | * tf 에게 5초 이전 `/turtle1` 의 pose를 요구 했다. 이것은 우리가 5 초 전의 위치와 5 초 전의 첫 번째 거북이의 위치에 따라 두 번째 거북이를 제어하고 있음을 의미한다.
56 | * 실제 요구는 현재 두 번 째 거북이의 위치에 대한 5초 전의 첫 번 째 거북이의 상대적인 위치는 어느 지점인가 하는 것이다.
57 |
58 |
59 |
60 | ### 2. Advanced API for lookupTransforms
61 |
62 | 그럼 어떻게 tf 에게 그와 같은 요청을 할 수 있을까? 이 API는 우리에게 각 프레임이 transform 되었을 때 명시적으로 그 같은 요구를 할 수 있는 권한을 주었다. 아래의 코드가 바로 그것이다. 무슨 코드 처럼 보이는가?
63 |
64 | ```python
65 | try:
66 | now = rospy.Time.now()
67 | past = now - rospy.Duration(5.0)
68 | listener.waitForTransformFull("/turtle2", now,
69 | "/turtle1", past,
70 | "/world", rospy.Duration(1.0))
71 | (trans, rot) = listener.lookupTransformFull("/turtle2", now,
72 | "/turtle1", past,
73 | "/world")
74 | ```
75 |
76 | `waitForTransform()` 함수를 위한 고급 API는 6개의 인수(argument)가 필요하다.
77 |
78 | 1. 이 프레임부터의 transform 과,
79 | 2. 이 시간의,
80 | 3. 이 프레임까지,
81 | 4. 이 시간의,
82 | 5. 이 번 경우 "/world"프레임에 해당하는 시간 초과 시에도 변하지 않는 프레임의 특정,
83 | 6. 결과를 넣어 둘 변수.
84 |
85 | **주의: **`waitForTransform()` 은 마치 `lookupTransform()` 처럼 basic API 와 advanced API 두 가지 API를 가지고 있다.
86 |
87 |
88 |
89 | 이 그림은 tf 가 background 에서 무얼 하는 가를 보여준다. 과거에는 첫 번 째 거북이로부터 'world' 프레임으로의 transform을 계산하고, 'world' 프레임 안에서 과거로부터 현재까지 tf 시간 여행을 한다. 그리고 지금 tf 는 'world' 프레임으로 부터 두 번 째 거북이로의 transform을 계산한다.
90 |
91 |
92 |
93 | ### 3. 결과 확인
94 |
95 | 이 번에는 고급 시간여행 API를 통해 다시 한 번 시뮬레이터를 구동해보자.
96 |
97 | ```
98 | user@computer:~$ roslaunch learning_tf start_demo.launch
99 | ```
100 |
101 | 그렇다. 두 번 째 거북이는 첫 번 째 거북이의 5초전 위치로 바로 이동한다!
102 |
103 |
104 |
105 | [튜토리얼 목록 열기](../README.md)
106 |
107 |
108 |
109 | [이전 튜토리얼](./tf_4_tf_n_time.md)
--------------------------------------------------------------------------------
/ros1_tutorial/rospy/turtlebot3/tb3_10_search_ar_marker.md:
--------------------------------------------------------------------------------
1 | ## Turtlebot3/ Tutorials/ search_ar_marker
2 |
3 |
4 |
5 | ---
6 |
7 | ## AR 마커 찾기
8 |
9 | **튜토리얼 레벨 :** Intermediate(중급)
10 |
11 | **이 튜토리얼 작성 환경 :** catkin **/** Ubuntu 18.04 **/** Melodic
12 |
13 | **이전 튜토리얼 :** [목표지점으로 이동 3](./tb3_9_move2xy.md)
14 |
15 | **다음 튜토리얼 :**
16 |
17 | **튜토리얼 목록 :** [README.md](../../../README.md)
18 |
19 | ------
20 |
21 | **선행되어야 할 학습**
22 |
23 | 1. [카메라 Calibration](../../camera_calibration/how_to_calibrate_monocular_camera.md)
24 |
25 | 2. [ar_track_alvar 구동](../ar_1_ar_track_alvar.md)
26 | 3. [ AR 마커 정보 해석](../ar_2_analysis_marker.md)
27 |
28 | 위 3가지 튜토리얼을 수행했다면 PC 에는 `ar_track_alvar` 패키지가 설치되어 있고, `catkin_ws/src/` 에는 `launch` 파일만 존재하는 `ar_marker` 패키지와 `uvc_track_marker.launch` 파일이 작성되어 있을 것이다.
29 |
30 | **필요한 작업**
31 |
32 | 1.
33 | 2.
34 |
35 | **`tb3_searching_marker.py` 작성**
36 |
37 | ```
38 | roscd tb3_cleaner/scripts
39 | ```
40 |
41 | ```
42 | touch tb3_searching_marker.py
43 | ```
44 |
45 | ```
46 | chmod +x tb3_searching_marker.py
47 | ```
48 |
49 | ```
50 | gedit tb3_searching_marker.py &
51 | ```
52 |
53 | ```python
54 | #!/usr/bin/env python
55 | import rospy
56 | from tb3_cleaner.MoveTB3 import MoveTB3
57 | from math import degrees, sqrt, atan2
58 |
59 | class MoveTo_XY:
60 |
61 | def __init__(self):
62 | self.move = MoveTB3()
63 |
64 | def move2xy(self, x, y):
65 |
66 | angle = atan2(y, x)
67 | dist = sqrt(pow(x, 2) + pow(y, 2))
68 |
69 | print "rotate %s(deg), and than straight %s(m)" %(degrees(angle), dist)
70 |
71 | self.move.rotate(angle)
72 | self.move.straight(dist)
73 | self.move.rotate(-angle)
74 |
75 |
76 | if __name__ == '__main__':
77 |
78 | try:
79 | rospy.init_node('move_to_xy', anonymous = True)
80 | xy = MoveTo_XY()
81 |
82 | while not rospy.is_shutdown():
83 | dist_x = float(input("input distance x(m): "))
84 | dist_y = float(input("input distance y(m): "))
85 | xy.move2xy(dist_x, dist_y)
86 |
87 | rospy.spin()
88 |
89 | except rospy.ROSInterruptException: pass
90 |
91 | ```
92 |
93 |
94 |
95 | **작성 코드 테스트**
96 |
97 | 1. PC 에서 `roscore` 실행
98 |
99 | 2. 터틀봇3 SBC 에 `ssh` 연결
100 |
101 | 3. 터틀봇3 에서 `roslaunch turtlebot3_bringup turtlebot3_robot.launch` 실행
102 |
103 | 4. PC 에서 `rosrun tb3_cleaner pub_tb3_pose2d.py` 실행
104 |
105 | 5. PC 에서 `rosrun tb3_cleaner tb3_move2xy.py` 실행
106 |
107 | - x 축 방향 이동거리 입력
108 | - y 축 방향 이동거리 입력
109 |
110 | ```
111 | $ rosrun tb3_cleaner tb3_move2xy.py
112 | input distance x(m): 0.5
113 | input distance y(m): 0.5
114 | rotate 45.0(deg), and than straight 0.707106781187(m)
115 | start from: -1.1
116 | stop to : 43.91
117 | start from (0.51, 0.5)
118 | stop to (0.99, 1.02)
119 | start from: 47.23
120 | stop to : 1.67
121 | ```
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 | [튜토리얼 목록 열기](../../../README.md)
132 |
133 |
--------------------------------------------------------------------------------
/ros1_tutorial/rospy/turtlebot3/tb3_2_Rotate_Left_n_Right.md:
--------------------------------------------------------------------------------
1 | ## Turtlebot3/ Tutorials/ Rotate Left and Right
2 |
3 |
4 |
5 | ---
6 |
7 | ## Turtlebot3 좌 / 우 회전
8 |
9 | **튜토리얼 레벨 :** Intermediate(중급)
10 |
11 | **이 튜토리얼 작성 환경 :** catkin **/** Ubuntu 16.04 **/** Kinetic
12 |
13 | **다음 튜토리얼 :** [목표지점으로 이동](./tb3_3_Go2Goal.md)
14 |
15 | **이전 튜토리얼 :** [직선이동](./tb3_1_Move_in_Straight_Line.md)
16 |
17 | **튜토리얼 목록 :** [README.md](../../README.md)
18 |
19 | ---
20 |
21 | 이 튜토리얼에서는 사용자 입력을 받아, Turtlebot3 로봇을 원하는 각도 만큼 좌, 우로 이동하는 노드를 작성할 것이다. 이 코드는 [turtlsim_cleaner](https://github.com/clebercoutof/turtlesim_cleaner) 코드를 참고하여 만들었음을 밝힌다.
22 |
23 |
24 |
25 | ### 1. 준비작업
26 |
27 | 앞서 [이 전 튜토리얼](./tb3_1_Move_in_Straight_Line.md)에서 만든 `tb3_cleaner` 패키지의 `scripts` 폴더로 경로를 변경한다.
28 |
29 | ```bash
30 | $ cd ~/catkin_ws/src/tb3_cleaner/scripts
31 | ```
32 |
33 | `rotate.py` 파일을 만들고 실행 속성을 부여한다.
34 |
35 | ```bash
36 | $ touch rotate.py
37 | $ chmod +x rotate.py
38 | ```
39 |
40 |
41 |
42 | ### 2. 구현할 기능
43 |
44 | 회전 속도, 회전 각도, 회전 방향( 좌/우회전 )을 입력받아 입력값들의 형식 및 단위를 적절히 변환 후, 회전시간을 계산하여 `tb3_node` 에서 subscribe 하는 `'/cmd_vel'` 토픽으로 publish 한다.
45 |
46 |
47 |
48 | ### 3. 코드
49 |
50 | `~/catkin_ws/src/tb3_cleaner/scripts` 폴더에 다음 내용으로 `rotate.py` ( 또는 원하는 이름의 파일 )파일을 작성한다.
51 |
52 | ```python
53 | #!/usr/bin/env python
54 |
55 | import rospy
56 | from geometry_msgs.msg import Twist
57 | toRAD = 0.0174533
58 |
59 | def rotate():
60 | # Starts a new node
61 | rospy.init_node('tb3_cleaner', anonymous=True)
62 | pub = rospy.Publisher('/cmd_vel', Twist, queue_size=10)
63 | msg = Twist()
64 |
65 | # Receiveing the user's input
66 | print("input speed within 0.0 ~ 160")
67 | speed = input("Input your speed (degrees/sec):")
68 |
69 | print("input speed within 0 ~ 360")
70 | angle = input("Type your distance (degrees):")
71 |
72 | print("direction cw:1, ccw:0")
73 | clockwise = input("Clockwise?: ")
74 |
75 | angular_speed = speed * toRAD
76 | relative_angle = angle * toRAD
77 |
78 | msg.linear.x = msg.linear.y = msg.linear.z = 0
79 | msg.angular.x = msg.angular.y = 0
80 |
81 | if clockwise:
82 | msg.angular.z = -abs(angular_speed)
83 | else:
84 | msg.angular.z = abs(angular_speed)
85 |
86 | duration = relative_angle / angular_speed
87 | time2end = rospy.Time.now() + rospy.Duration(duration)
88 |
89 | pub.publish(msg)
90 | rospy.sleep(0.001)
91 |
92 | while(rospy.Time.now() < time2end):
93 | pass
94 |
95 | msg.angular.z = 0
96 | pub.publish(msg)
97 |
98 |
99 | if __name__ == '__main__':
100 | try:
101 | rotate()
102 | rospy.spin()
103 |
104 | except rospy.ROSInterruptException:
105 | pass
106 | ```
107 |
108 |
109 |
110 | ### 4. 실행
111 |
112 | `roscore` 실행
113 |
114 | ```bash
115 | $ roscore
116 | ```
117 |
118 |
119 |
120 | `Ctrl+Alt+T` 를 입력하여 새 터미널을 열고 Turtlebot3 의 라즈베리파이로 ssh 를 통해 원격 연결한다.
121 |
122 | ```bash
123 | $ ssh pi@xxx.xxx.xxx.xxx
124 | ```
125 |
126 |
127 |
128 | 라즈베리파이에서 ```turtlebot3_bringup``` 패키지의 `turtlebot3_robot.launch` 파일을 실행한다.
129 |
130 | ```bash
131 | pi@raspberrypi:~$ roslaunch turtlebot3_bringup turtlebot3_robot.launch
132 | ```
133 |
134 |
135 |
136 | `Ctrl+Alt+T` 를 입력하여 새 터미널을 열고 작성한 `rotate.py` 를 실행한다.
137 |
138 | ```bash
139 | $ rosrun turtlesim_cleaner move.py
140 | Let's move your robot
141 | Input your speed (degrees/sec):20
142 | Type your distance (degrees):120
143 | Clockwise?: 0
144 | ```
145 |
146 | Turtlebot3( buger ) 로봇이 위에 입력한 정보와 같이 동작하는 지 확인한다.
147 |
148 |
149 |
150 |
151 |
152 | [튜토리얼 목록 열기](../../README.md)
153 |
154 | [목표지점으로 이동](./tb3_3_Go2Goal.md)
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
--------------------------------------------------------------------------------
/ros1_tutorial/rospy/turtlebot3/tb3_9_move2xy.md:
--------------------------------------------------------------------------------
1 | ## Turtlebot3/ Tutorials/ Straight by 2D Pose
2 |
3 |
4 |
5 | ---
6 |
7 | ## 2D Pose 값(odom)을 이용한 이동
8 |
9 | **튜토리얼 레벨 :** Intermediate(중급)
10 |
11 | **이 튜토리얼 작성 환경 :** catkin **/** Ubuntu 16.04 **/** Kinetic
12 |
13 | **이전 튜토리얼 :** [2D Pose 값을 이용한 회전 및 직선이동 라이브러리](./tb3_8_Rotate_n_Straight_Library.md)
14 |
15 | **다음 튜토리얼 :**
16 |
17 | **튜토리얼 목록 :** [README.md](../../../README.md)
18 |
19 | ------
20 |
21 | 이 튜토리얼에서는 현재 위치를 기준으로 x 축 방향으로의 거리와 y 축 방향으로의 거리를 입력받아 해당 위치로 이동하는 기능을 이전 튜토리얼에서 작성한 `MoveTB3.py` 라이브러리를 사용하여 구현한다.
22 |
23 | **구현할 기능**
24 |
25 | 1. 시작 위치의 tb3pose2d 값 저장 ( x, y, theta )
26 | 2. x 축 방향 이동거리 입력 받기( 양수 입력은 +x 방향, 음수 입력은 -x 방향으로 이동 )
27 | 3. y 축 방향 이동거리 입력 받기( 양수 입력은 +y 방향, 음수 입력은 -y 방향으로 이동 )
28 | 4. 현재의 2d_pose 값을 기준으로 회전각 및 이동거리 산출
29 | 5. 산출된 회전각만큼 회전
30 | 6. 산출된 거리만큼 전진
31 | 7. 산출된 -회전각 만큼 회전( 시작 pose 로 복귀 **)**
32 |
33 | **`tb3_move2xy.py` 작성**
34 |
35 | ```
36 | roscd tb3_cleaner/scripts
37 | ```
38 |
39 | ```
40 | touch tb3_move2xy.py
41 | ```
42 |
43 | ```
44 | chmod +x tb3_move2xy.py
45 | ```
46 |
47 | ```
48 | gedit tb3_move2xy.py &
49 | ```
50 |
51 | ```python
52 | #!/usr/bin/env python
53 | import rospy
54 | from tb3_cleaner.MoveTB3 import MoveTB3
55 | from math import degrees, sqrt, atan2
56 |
57 | class MoveTo_XY:
58 |
59 | def __init__(self):
60 | self.move = MoveTB3()
61 |
62 | def move2xy(self, x, y):
63 |
64 | angle = atan2(y, x)
65 | dist = sqrt(pow(x, 2) + pow(y, 2))
66 |
67 | print "rotate %s(deg), and than straight %s(m)" %(degrees(angle), dist)
68 |
69 | self.move.rotate(angle)
70 | self.move.straight(dist)
71 | self.move.rotate(-angle)
72 |
73 |
74 | if __name__ == '__main__':
75 |
76 | try:
77 | rospy.init_node('move_to_xy', anonymous = True)
78 | xy = MoveTo_XY()
79 |
80 | while not rospy.is_shutdown():
81 | dist_x = float(input("input distance x(m): "))
82 | dist_y = float(input("input distance y(m): "))
83 | xy.move2xy(dist_x, dist_y)
84 |
85 | rospy.spin()
86 |
87 | except rospy.ROSInterruptException: pass
88 |
89 | ```
90 |
91 |
92 |
93 | **작성 코드 테스트**
94 |
95 | 1. PC 에서 `roscore` 실행
96 |
97 | 2. 터틀봇3 SBC 에 `ssh` 연결
98 |
99 | 3. 터틀봇3 에서 `roslaunch turtlebot3_bringup turtlebot3_robot.launch` 실행
100 |
101 | 4. PC 에서 `rosrun tb3_cleaner pub_tb3_pose2d.py` 실행
102 |
103 | 5. PC 에서 `rosrun tb3_cleaner tb3_move2xy.py` 실행
104 |
105 | - x 축 방향 이동거리 입력
106 | - y 축 방향 이동거리 입력
107 |
108 | ```
109 | $ rosrun tb3_cleaner tb3_move2xy.py
110 | input distance x(m): 0.5
111 | input distance y(m): 0.5
112 | rotate 45.0(deg), and than straight 0.707106781187(m)
113 | start from: -1.1
114 | stop to : 43.91
115 | start from (0.51, 0.5)
116 | stop to (0.99, 1.02)
117 | start from: 47.23
118 | stop to : 1.67
119 | ```
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 | [튜토리얼 목록 열기](../../../README.md)
130 |
131 |
--------------------------------------------------------------------------------
/ros1_tutorial/temp/templet.md:
--------------------------------------------------------------------------------
1 | ## Turtlebot3/ Tutorials/ Rotate Left and Right(수정)
2 |
3 |
4 |
5 | ---
6 |
7 | ## Turtlebot3 좌 / 우 회전(제목 수정)
8 |
9 | **튜토리얼 레벨 :** Intermediate(중급)(수정)
10 |
11 | **이 튜토리얼 작성 환경 :** catkin **/** Ubuntu 16.04 **/** Kinetic
12 |
13 | **다음 튜토리얼 :** [링크 수정]()
14 |
15 | **이전 튜토리얼 :** [링크 수정]()
16 |
17 | **튜토리얼 목록 :** [README.md](../README.md)
18 |
19 | ---
20 |
21 |
22 |
23 | 디스크립션 수정 - 이 튜토리얼에서는.... 사용자 입력을 .....
24 |
25 |
26 |
27 | ### 1. 준비작업(수정)
28 |
29 | 앞서 [이 전 튜토리얼](./mv_tutle_1_MoveInStraightLine.md)에서 만든 `tb3_cleaner` 패키지의 `scripts` 폴더로 경로를 변경한다.
30 |
31 | ```
32 | user@computer:~$ cd ~/catkin_ws/src/tb3_cleaner/scripts
33 | ```
34 |
35 | `rotate.py` 파일을 만들고 실행 속성을 부여한다.
36 |
37 | ```
38 | user@computer:~/catkin_ws/src/tb3_cleaner/scripts$ touch rotate.py
39 | user@computer:~/catkin_ws/src/tb_cleaner/scripts$ chmod +x rotate.py
40 | ```
41 |
42 |
43 |
44 | ### 2. 구현할 기능(수정)
45 |
46 | 회전 속도, 회전 각도, 회전 방향( 좌/우회전 )을 입력받아 입력값들의 형식 및 단위를 적절히 변환 후, 회전시간을 계산하여 `tb3_node` 에서 subscribe 하는 `'/cmd_vel'` 토픽으로 publish 한다.
47 |
48 |
49 |
50 | ### 3. 코드(수정)
51 |
52 | `~/catkin_ws/src/tb3_cleaner/scripts` 폴더에 다음 내용으로 `rotate.py` ( 또는 원하는 이름의 파일 )파일을 작성한다.
53 |
54 | ```python
55 | #!/usr/bin/env python
56 |
57 | import rospy
58 | from geometry_msgs.msg import Twist
59 | toRAD = 0.0174533
60 |
61 | def rotate():
62 | # Starts a new node
63 | rospy.init_node('tb3_cleaner', anonymous=True)
64 | pub = rospy.Publisher('/cmd_vel', Twist, queue_size=10)
65 | msg = Twist()
66 |
67 | # Receiveing the user's input
68 | print("input speed within 0.0 ~ 160")
69 | speed = input("Input your speed (degrees/sec):")
70 |
71 | print("input speed within 0 ~ 360")
72 | angle = input("Type your distance (degrees):")
73 |
74 | print("direction cw:1, ccw:0")
75 | clockwise = input("Clockwise?: ")
76 |
77 | angular_speed = speed * toRAD
78 | relative_angle = angle * toRAD
79 |
80 | msg.linear.x = msg.linear.y = msg.linear.z = 0
81 | msg.angular.x = msg.angular.y = 0
82 |
83 | if clockwise:
84 | msg.angular.z = -abs(angular_speed)
85 | else:
86 | msg.angular.z = abs(angular_speed)
87 |
88 | duration = relative_angle / angular_speed
89 | time2end = rospy.Time.now() + rospy.Duration(duration)
90 |
91 | pub.publish(msg)
92 | rospy.sleep(0.001)
93 |
94 | while(rospy.Time.now() < time2end):
95 | pass
96 |
97 | msg.angular.z = 0
98 | pub.publish(msg)
99 |
100 |
101 | if __name__ == '__main__':
102 | try:
103 | rotate()
104 | rospy.spin()
105 |
106 | except rospy.ROSInterruptException:
107 | pass
108 | ```
109 |
110 |
111 |
112 | ### 4. 실행(수정)
113 |
114 | `roscore` 실행
115 |
116 | ```
117 | user@computer:~/catkin_ws$ roscore
118 | ```
119 |
120 |
121 |
122 | `Ctrl+Alt+T` 를 입력하여 새 터미널을 열고 Turtlebot3 의 라즈베리파이로 ssh 를 통해 원격 연결한다.
123 |
124 | ```
125 | user@computer:~$ ssh pi@xxx.xxx.xxx.xxx
126 | ```
127 |
128 |
129 |
130 | 라즈베리파이에서 ```turtlebot3_bringup``` 패키지의 `turtlebot3_robot.launch` 파일을 실행한다.
131 |
132 | ```
133 | pi@raspberrypi:~$ roslaunch turtlebot3_bringup turtlebot3_robot.launch
134 | ```
135 |
136 |
137 |
138 | `Ctrl+Alt+T` 를 입력하여 새 터미널을 열고 작성한 `rotate.py` 를 실행한다.
139 |
140 | ```
141 | user@computer:~$ rosrun turtlesim_cleaner move.py
142 | Let's move your robot
143 | Input your speed (degrees/sec):20
144 | Type your distance (degrees):120
145 | Clockwise?: 0
146 | ```
147 |
148 | Turtlebot3( buger ) 로봇이 위에 입력한 정보와 같이 동작하는 지 확인한다.
149 |
150 |
151 |
152 |
153 |
154 | [튜토리얼 목록 열기](../README.md)
155 |
156 | [이 링크도 수정]()
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
--------------------------------------------------------------------------------
/ros1_tutorial/ubuntu/install_ubuntu_1804_lts.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ### Ubuntu 18.04 LTS 설치
4 |
5 | 본 문서는 우분투 16.04 가 설치되어있는 Intel x64 또는 AMD64 시스템을 기준으로 작성되었다.
6 |
7 | ---
8 |
9 | #### 1. 설치전 준비
10 |
11 | 우분투 설치전 준비할 작업은 '설치 파일 다운로드', '설치 USB 디스크 작성' 이다. 현재 설치되어 있는 우분투 16.04 를 지우고 그 위치에 우분투 18.04 를 설치할 것이므로 따로 '설치할 PC 의 하드디스크 공간확보' 를 할 필요는 없다.
12 |
13 |
14 |
15 | **설치 ISO 파일 다운로드 웹 페이지 :** https://releases.ubuntu.com/18.04/
16 |
17 | 아래 화면에 표시된 링크를 클릭하여 `ubuntu-18.04.5-desktop-amd64.iso` 파일을 다운로드한다.
18 |
19 |
20 |
21 |
22 |
23 | **설치디스크 작성**
24 |
25 | 우분투 18.04 설치디스크로 사용할 4GB 이상의 USB 메모리를 PC에 연결하고,
아이콘을 클릭한 후 'disk' 를 입력하여 검색된 프로그램 아이콘 중 다음 그림의 'Disks' 를 실행한다.
26 |
27 |
28 |
29 | 설치디스크로 만들 USB 드라이브를 선택 후, 우측 상단
버튼을 클릭하여 열린 메뉴에서 'Restore Disk Image' 를 클릭한다.
30 |
31 |
32 |
33 | 우분투 18.04 설치 ISO 이미지를 선택 후 [Open] 버튼을 클릭한다. 다음 화면에서 [Start Restoring] 버튼을 클릭한다.
34 |
35 |
36 |
37 | 대상 드라이브와 이미지 확인 팝업에서 [Restore] 버튼을 클릭하면, 관리자권한(sudo) 실행을 위한 패스워드를 입력한다.
38 |
39 |
40 |
41 | 진행 상태가 100%가 되면 'Disks' 를 종료하고, 시스템을 재시작하여 시스템 설정으로 진입한다.
42 |
43 |
44 |
45 |
46 |
47 | #### 2. 설치
48 |
49 | PC 의 시스템 셋업( System Setup )의 부트 순서( Boot Priority ) 중 USB Disk 를 최우선 순서로 변경한 후, 앞에서 제작한 우분투 설치 디스크를 삽입하고 시스템을 재시작한다.
50 |
51 | 설치디스크로 부팅이 이루어지면 다음 화면이 나타난다. 이 때 두번째 메뉴 **'Install Ubunt'** 를 선택하고 **Enter** 를 입력한다.
52 |
53 |
54 |
55 | **'환영합니다'** 화면에서 **'한국어'** 선택 후 **[ 계속하기 ]** 버튼을 클릭한다.
56 |
57 | **'키보드 레이아웃'** 화면에서 **'한국어'** 선택 후 **[ 계속하기 ]** 버튼을 클릭한다.
58 |
59 |
60 |
61 | **'업데이트 및 기타 소프트웨어'** 화면에서 **'일반설치'** 선택 후 **[ 계속하기 ]** 버튼을 클릭한다.
62 |
63 | **'설치 형식'** 화면에서 **'Ubuntu 16.04.7 LTS 지우고 다시 설치'** 선택 후 **[ 지금설치(i) ]** 버튼을 클릭한다.
64 |
65 |
66 |
67 | **바뀐 점을 디스크에 쓰시겠습니까?** 화면에서 **[계속하기]** 버튼을을 클릭한다.
68 |
69 | **어디에 거주하고 계십니까?** 화면에서 **'Seoul'** 을 선택 후, **[계속하기]** 버튼을을 클릭한다.
70 |
71 |
72 |
73 | **당신은 누구십니까?** 화면에서 다음 사항들을 설정한다.
74 |
75 | **이름**(Name)은 크게 중요하지 않다. 단지 로그인 화면에 표시되는 이름이다. 심지어 비워 두어도 된다.
76 |
77 | **컴퓨터 이름**(Host Name)은 네트워크에 연결된 단말명으로 표시되는 이름이다. 영문 대소문자, 숫자, 하이픈( - )만을 사용할 수 있으며, 숫자로 시작할 수 없다.
78 |
79 | **사용자 이름**(User Name)은 해당 계정을 대표하는 명칭으로 **사용자 ID** 에 해당한다. 역시 영문 대소문자, 숫자, 하이픈( - )만을 사용할 수 있으며, 숫자로 시작할 수 없다.
80 |
81 | **'암호'**(Password)는 숫자, 특수문자, 대, 소문자를 섞어 보안에 취약하지 않도록 정하는 것이 원칙이지만, 중요한 순간에 생각이 나지 않는다면 낭패이므로, 이를 염두에 두어 신중하게 정하도록하자. ( **'암호 선택'** 입력시 옆에 나타나는 '짧은 암호', '약한 암호' 같은 메세지는 무시해도 상관없다. )
82 |
83 | **[계속하기]** 버튼을을 클릭한다.
84 |
85 |
86 |
87 | 이제부터 **'설치 완료'** 대화상자가 나타날 때까지 기다린다.
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 | [튜토리얼 목록](../../README.md)
100 |
--------------------------------------------------------------------------------