Back to [[gazebo:main|Gazebo Main Page]] Though it's possible to use gazebo alone to define and simulate the dynamic model of a robot, it is more convenient to directly consider making this model is the ROS environment, so that, afterwards, we can benefit from all ROS packages to control our robot. So the approach described here considers a tight link between ROS and gazebo. The first thing to create is a ROS workspace : mkdir -p ws/src cd ws catkin_make We will model a simple robotic arm. It is wise to separate the model in different ROS packages. There is no imposed way to do it, but one way could to have 3 packages for : **robot description**, **robot control** and **gazebo interface**. Let's do it: cd src catkin_create_pkg simple_arm_description std_msgs catkin_create_pkg simple_arm_gazebo std_msgs rospy roscpp catkin_create_pkg simple_arm_control std_msgs rospy roscpp cd .. catkin_make source devel/setup.bash The model is described using **xacro** format on top of **urdf** format. We might have use **sdf** format, but **xacro** with his macro and variables features will make modeling more effective when dealing with more complex robots. For example, with **xacro**, you can define one leg in a macro and use this macro 6 times to model an hexapod. We start from an existing mesh provided by the CAD model of the robotic arm. It's a good way to start from the CAD files , either you can use the 3D design of an existing robot or you can design your own robot. here we will use the [[https://grabcad.com/library/kr6-kr10-kuka-rboto-1|CAD file]] of a Kuka Kr6 robotic arm taken from the [[https://grabcad.com/library|grabcad library]].