A mobile robot modelled in Gazebo environment. Object detection using camera and lidar which is visualized using Rviz. A demo of this project is shown below.
Robot and object | World | Rvix visualization |
---|---|---|
Created two ROS packages inside your catkin_ws/src
: the drive_bot
and the ball_chaser
. Here are the steps to design the robot, house it inside your world, and program it to chase white-colored balls:
drive_bot
:
- Create a
my_robot
ROS package to hold your robot, the white ball, and the world. - Design a differential drive robot with the Unified Robot Description Format. Add two sensors to your robot: a lidar and a camera. Add Gazebo plugins for your robot’s differential drive, lidar, and camera. The robot you design should be significantly different from the one presented in the project lesson. Implement significant changes such as adjusting the color, wheel radius, and chassis dimensions. Or completely redesign the robot model! After all you want to impress your future employers :-D
- House your robot inside the world you built in the Build My World project.
- Add a white-colored ball to your Gazebo world and save a new copy of this world.
- The
world.launch
file should launch your world with the white-colored ball and your robot.
ball_chaser
:
- Create a
ball_chaser
ROS package to hold your C++ nodes. - Write a
drive_bot
C++ node that will provide aball_chaser/command_robot
service to drive the robot by controlling its linear x and angular z velocities. The service should publish to the wheel joints and return back the requested velocities. - Write a
process_image
C++ node that reads your robot’s camera image, analyzes it to determine the presence and position of a white ball. If a white ball exists in the image, your node should request a service via a client to drive the robot towards it. - The
ball_chaser.launch
should run both thedrive_bot
and theprocess_image
nodes.
- Gazebo >= 7.0
- ROS Kinetic
- make >= 4.1(mac, linux), 3.81(Windows)
- Linux: make is installed by default on most Linux distros
- Mac: install Xcode command line tools to get make
- Windows: Click here for installation instructions
- gcc/g++ >= 5.4
- Linux: gcc / g++ is installed by default on most Linux distros
- Mac: same deal as make - [install Xcode command line tools]((https://developer.apple.com/xcode/features/)
- Windows: recommend using MinGW
-
Install Gazebo and ROS on Linux.
-
Install
sudo apt-get install ros-${ROS_DISTRO}-gazebo-ros-pkgs
(If you are using gazebo11 it should besudo apt-get install ros-${ROS_DISTRO}-gazebo11-ros-pkgs
) -
Cmake and gcc/g++
-
Build and run your code.
Directory Structure
.Project # Go Chase It Project
├── my_robot # my_robot package
│ ├── launch # launch folder for launch files
│ │ ├── robot_description.launch
│ │ ├── world.launch
│ ├── meshes # meshes folder for sensors
│ │ ├── hokuyo.dae
│ ├── urdf # urdf folder for xarco files
│ │ ├── my_robot.gazebo
│ │ ├── my_robot.xacro
│ ├── world # world folder for world files
│ │ ├── UdacityOffice.world
│ ├── CMakeLists.txt # compiler instructions
│ ├── package.xml # package info
├── ball_chaser # ball_chaser package
│ ├── launch # launch folder for launch files
│ │ ├── ball_chaser.launch
│ ├── src # source folder for C++ scripts
│ │ ├── drive_bot.cpp
│ │ ├── process_images.cpp
│ ├── srv # service folder for ROS services
│ │ ├── DriveToTarget.srv
│ ├── CMakeLists.txt # compiler instructions
│ ├── package.xml # package info
- Clone and initialize project with a catkin workspace
$ mkdir catkin_ws && cd catkin_ws
$ git clone https://github.com/dipinknair/Object_follower_robot_using_camera.git
$ mv Object_follower_robot_using_camera src
$ cd src && catkin_init_workspace
- Move back to
catkin_ws\
and build
$ cd ..
$ catkin_make
- Launch the world
$ source devel/setup.bash
$ roslaunch my_robot world.launch
- Open another terminal (Ctrl+Shift+T), and launch the
ball_chaser
package
$ source devel/setup.bash
$ roslaunch ball_chaser ball_chaser.launch
- Play around! Pick up the white ball and place in front of the mobile robot. The robot will follow the ball. Footer