diff --git a/bioloid_apps/launch/ceabot/ceabot_base.launch b/bioloid_apps/launch/ceabot/ceabot_base.launch
index 7b7006a9a917047469bad69e7704479201cdf818..066615b6768aed1b2cebe13ed0334e757669d91b 100644
--- a/bioloid_apps/launch/ceabot/ceabot_base.launch
+++ b/bioloid_apps/launch/ceabot/ceabot_base.launch
@@ -24,5 +24,16 @@
   <node name="rqt_reconfigure" pkg="rqt_reconfigure" type="rqt_reconfigure" respawn="false"
     output="screen"/>
 
+  <node name="gazebo_image_to_video_dev"
+        pkg="gazebo_image_to_video_dev"
+        type="gazebo_image_to_video_dev"
+        output="screen">
+    <remap from="~/camera_in/image_raw"
+           to="/bioloid/camera/image_raw"/>
+    <remap from="~/camera_in/camera_info"
+           to="/bioloid/camera/camera_info"/>
+    <param name="video_dev" value="/dev/video0"/>
+  </node>
+
 </launch>
 
diff --git a/bioloid_control/config/bioloid_ceabot.yaml b/bioloid_control/config/bioloid_ceabot.yaml
index abfe8b697ee5ff6f8003cf56a6f12a829039803b..3dd9fb51c94595a36f568e6603ababbf7e0ec4ef 100644
--- a/bioloid_control/config/bioloid_ceabot.yaml
+++ b/bioloid_control/config/bioloid_ceabot.yaml
@@ -18,7 +18,7 @@ bioloid:
     exp_gpio3_frame: right_front_fwd_ir_link
     exp_gpio4_frame: right_front_dwn_ir_link
     exp_gpio5_frame: right_lateral_dwn_ir_link
-    serial_console_device: /dev/ttyS100
+    serial_console_device: /dev/pts/18
     joints:
       - j_shoulder_r
       - j_shoulder_l
diff --git a/bioloid_control/config/bioloid_ceabot_pan_tilt.yaml b/bioloid_control/config/bioloid_ceabot_pan_tilt.yaml
index 7be26e0a916c3601b55750d5ea516dc62a2f6911..c69bdd309482667419835c6e6fe225e060964333 100644
--- a/bioloid_control/config/bioloid_ceabot_pan_tilt.yaml
+++ b/bioloid_control/config/bioloid_ceabot_pan_tilt.yaml
@@ -20,7 +20,7 @@ bioloid:
     exp_gpio5_frame: right_lateral_dwn_ir_link
     pan_servo_id: 19
     tilt_servo_id: 20
-    serial_console_device: /dev/pts/19
+    serial_console_device: /dev/pts/18
     joints:
       - j_shoulder_r
       - j_shoulder_l
diff --git a/bioloid_controller_cm510/CMakeLists.txt b/bioloid_controller_cm510/CMakeLists.txt
index 9f5b8f8a3911d7b0ad501054ea55f3e96922a29d..a4289ee1cb8b90b7a4c68d67cd21d289c31d9170 100644
--- a/bioloid_controller_cm510/CMakeLists.txt
+++ b/bioloid_controller_cm510/CMakeLists.txt
@@ -92,7 +92,7 @@ catkin_package(
 ###########
 
 SET(BIOLOID_FW_PATH ~/humanoids/cm510_controller_fw)
-SET(ProjectPath ~/humanoids/cm510_controller_fw/examples/pan_tilt)
+SET(ProjectPath ~/humanoids/cm510_controller_fw/examples/vision)
 
 ## Specify additional locations of header files
 ## Your package locations should be listed before other locations
@@ -130,7 +130,7 @@ add_library(${PROJECT_NAME} src/bioloid_controller_cm510.cpp
                             # communications modules
                             ${BIOLOID_FW_PATH}/communications/src/dynamixel.c
                             # main application module
-                            ${ProjectPath}/pan_tilt.c
+                            ${ProjectPath}/cm510_vision.c
                             # AVR simulation modules
                             src/sim/avr_delay.c
                             src/sim/avr_registers.c
diff --git a/bioloid_controller_cm510/src/sim/serial_console.cpp b/bioloid_controller_cm510/src/sim/serial_console.cpp
index c3ba420ba9b392107407ce04279fcf90739beac5..676bae7394fa7263708b0ecbe65c5742b2e20e12 100644
--- a/bioloid_controller_cm510/src/sim/serial_console.cpp
+++ b/bioloid_controller_cm510/src/sim/serial_console.cpp
@@ -6,8 +6,11 @@
 #include "rs232.h"
 
 extern "C" int vsprintf (char * s, const char * format, va_list arg );
-extern "C" int vfprintf ( FILE * stream, const char * format, va_list arg );
+extern "C" int vfprintf (FILE * stream, const char * format, va_list arg );
+extern "C" int vsscanf (const char * s, const char * format, va_list arg );
+extern "C" int vfscanf ( FILE * stream, const char * format, va_list arg );
 extern FILE *stdout;
+extern FILE *stdin;
 
 // private variables
 CRS232 serial_console("bioloid_serial_port");
@@ -39,12 +42,11 @@ int serial_console_getchar(FILE *dev)
   return byte;
 }
 
-/*int printf(const char *fmt, ...)
+int cm510_printf(const char *fmt, ...)
 {
   va_list ap;
   int i;
 
-  std::cout << "printf" << std::endl;
   if(rs232_enabled)
   {
     char out_buff[256];
@@ -60,7 +62,44 @@ int serial_console_getchar(FILE *dev)
     va_end(ap);
   }
   return i;
-}*/
+}
+
+int cm510_scanf(const char *fmt, ...)
+{
+  va_list ap;
+  int done,num;;
+
+  if(rs232_enabled)
+  {
+    char *out_buff=NULL;
+    CEventServer *event_server=CEventServer::instance();
+    std::list<std::string> events;
+
+    try{
+      events.push_back(serial_console.get_rx_event_id());
+      event_server->wait_first(events,1000);
+      num=serial_console.get_num_data();
+      out_buff=new char[num];
+      serial_console.read((unsigned char *)out_buff,num);
+      va_start(ap,fmt);
+      done=vsscanf(out_buff,fmt,ap);
+      va_end(ap);
+      delete[] out_buff;
+    }catch(CException &e){
+      std::cout << e.what() << std::endl;
+      if(out_buff!=NULL)
+        delete[] out_buff;
+    }
+  }
+  else
+  {
+    va_start (ap, fmt);
+    done = vfscanf (stdin, fmt, ap);
+    va_end (ap);
+  }
+  return done;
+
+}
 
 /* pubic functions */
 void serial_console_init(uint32_t baudrate)
@@ -80,3 +119,13 @@ void serial_console_init(uint32_t baudrate)
     rs232_enabled=false;
   }
 }
+
+uint8_t serial_console_get_num_data(void)
+{
+  if(rs232_enabled)
+    return serial_console.get_num_data();
+  else
+  {
+    return 0;
+  }
+}