The goal of the robot is to traverse a maze by reading QR codes, then pick a can using the on-board gripper. The robot will extract direction commands from the QR codes to navigate the maze and using color detection will locate the position of the can relative to the robot in order to pick it.
The forward and inverse kinematics model of the robot according to the following article:
The Raspberry pi, PC, and ESP8266 are connected to the same access point.
The raspicam_node Ros node is running on the raspberry pi and publishing sensor_msgs/CompressedImage
message type on the topic /raspicam_node/image/compressed
.
Roscore is running on the pc, in order to connect the Ros node running on the pi to the Ros running on the pc run the following on the pi before launching the camera node export ROS_MASTER_URI=http://PC Ip address:11311
The Image_republisher node converts the sensor_msgs/CompressedImage
message to sensor_msgs/Image
message type.
The Vision_node processes the images and distance data from the /distance
topic and publishes geometry_msgs/Twist
messages on the /cmd_vel
topic to order the robot to move.
The serial_node is running on the ESP8266 it offers the following custom services:
gripper_srv
:service to open and close the gripper.servo_srv
:service to set the servo attached to the camera and ultrasonic sensor to a specific angle.
and publishes the distance read from the ultrasonic sensor over the topic /distance
.
Raspberry pi ubuntu 16.04 disk image with Ros already installed from Ubiquity Robotics