|Note: This tutorial assumes you already completed the getting started tutorial.|
|Please ask about problems and questions regarding this tutorial on answers.ros.org. Don't forget to include in your question the link to this page, the versions of your OS & ROS, and also add appropriate tags.|
Creating a full robot in NXT-ROSDescription: This tutorial shos you how to create an nxt_ros.yaml file for you nxt robot and launch it to view the data.
Tutorial Level: BEGINNER
Next Tutorial: Creating a simple robot model using lxf2urdf.py
For this tutorial, let's add some more sensors and motors: plug in a touch sensor, a color sensor, an ultrasonic sensor, and a servo motor.
- PORT1: intensity sensor
- PORT2: ultrasonic sensor
- PORT3: touch sensor
- PORTA: servo
The yaml file
First, create learning_nxt/robot.yaml in your favorite editor, and place the following inside it:
1 nxt_robot: 2 - type: motor 3 name: l_motor_joint 4 port: PORT_A 5 desired_frequency: 10.0 6 - type: touch 7 frame_id: r_touch_link 8 name: touch_sensor 9 port: PORT_3 10 desired_frequency: 10.0 11 - type: ultrasonic 12 frame_id: r_ultrasonic_link 13 name: ultrasonic_sensor 14 port: PORT_2 15 spread_angle: 0.2 16 min_range: 0.01 17 max_range: 2.5 18 desired_frequency: 10.0 19 - type: intensity 20 frame_id: l_intensity_link 21 name: intensity_sensor 22 port: PORT_1 23 color_r: 1.0 24 color_g: 0.0 25 color_b: 0.0 26 desired_frequency: 10.0
The yaml explained
Now, let's break down the ymal piece by piece.
Here we are putting everything in the nxt_robot namespace.
These lines creates a motor object with name L_motor_joint that are connected to PORT_A with a pulling frequency of 10Hz.
These lines creates a touch object with name touch_sensor and a frame_id r_touch_link of that is connected to PORT_3. The pulling frequency in this case is 10Hz.
These lines creates an ultrasonic sensor with a spread angle of 0.2m, a min range of 0.01m, and a max range of 2.5m that is connected to PORT_2.
These lines creates a intensity object with name intensity_sensor and a frame_id l_intensity_link of that is connected to PORT_1 with the red LED on.
Launch the yaml File
Now we need to create a launch file to launch the robot.yaml file. Create learning_nxt/robot.launch in your favorite editor, and place the following inside it:
<launch> <node pkg="nxt_ros" type="nxt_ros.py" name="nxt_ros" output="screen" respawn="true"> <rosparam command="load" file="$(find learning_nxt)/robot.yaml" /> </node> <node pkg="nxt_ros" type="joint_states_aggregator.py" name="joint_state_publisher" output="screen" /> </launch>
Turn on your nxt brick and connect it to the computer via USB. Now roslaunch:
$ roslaunch robot.launch
You should see something similar to:
SUMMARY ======== PARAMETERS * /nxt_ros/nxt_robot NODES / nxt_ros (nxt_ros/nxt_ros.py) joint_state_publisher (nxt_ros/joint_states_aggregator.py) starting new master (master configured for auto start) process[master]: started with pid  ROS_MASTER_URI=http://bvo:11311/ setting /run_id to 281dd58e-afb1-11df-98e9-00251148e8cf process[rosout-1]: started with pid  started core service [/rosout] process[nxt_ros-3]: started with pid  process[joint_state_publisher-4]: started with pid  [INFO] 1282676127.009863: Creating motor with name l_motor_joint on PORT_A [INFO] 1282676127.016516: Creating touch with name touch_sensor on PORT_3 [INFO] 1282676127.022412: Creating ultrasonic with name ultrasonic_sensor on PORT_2 [INFO] 1282676127.127735: Creating intensity with name intensity_sensor on PORT_1
Now you can list all the topics:
$ rostopic list
Now you can see all the sensor and joint data:
/intensity_sensor /joint_command /joint_state /joint_states /rosout /touch_sensor /ultrasonic_sensor
You will see topics for each sensor and state/command topics for the joints in this case (motor1 and motor2).
$ rostopic echo joint_states