├── 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 | ![](../img/darknet_ROS/how2register_sshkey2github_01.png) 103 | 104 | 좌측 메뉴항목 중 **'SSH and GPG keys'** 를 클릭한다. 105 | 106 | ![](../img/darknet_ROS/how2register_sshkey2github_02.png) 107 | 108 | **'New SSH key'** 버튼을 클릭한다. 109 | 110 | ![](../img/darknet_ROS/how2register_sshkey2github_03.png) 111 | 112 | **'Title'** 란에 적당한 제목을 적어주고 **'Key'** 란에는 앞서 `xcliper` 를 이용해 클립보드로 복사한 `~/.ssh/id_ed25519.pub` 키 파일의 내용을 붙혀넣기 한 후, **'Add SSH Key'** 버튼을 클릭한다. 113 | 114 | ![](../img/darknet_ROS/how2register_sshkey2github_05.png) 115 | 116 | 다음과 같이 등록된 SSH 키 정보를 확인할 수 있다. 117 | 118 | ![](../img/darknet_ROS/how2register_sshkey2github_06.png) 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 | ![](../img/rotate_py_1.png) 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 | ![](../img/rotate_py_2.png) 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 | --------------------------------------------------------------------------------