Difference between revisions of "HeRo"
(→Create ROS Package for HeRo) |
(→Create ROS Package for HeRo) |
||
| Line 108: | Line 108: | ||
</pre> | </pre> | ||
| − | Now, create a python file to start writing our node, we will call it tutorial.py, you might need to do | + | Now, create a python file to start writing our node, we will call it tutorial.py, you might need to do <code>chmod +x tutorial.py</code>. Use rostopic list for a ideia to which topics you want to change. In our case, we want to move the robot, therefore, we will use the <code>vellocity_controller/cmd_vel</code> topic to send velocity commands to the robot. First, lets import rospy, create our main function and initialize our new node <code>hero_walk</code>. |
| − | < | ||
| − | + | <pre> | |
| + | #!/usr/bin/env python | ||
| + | import rospy | ||
| + | |||
| + | if __name__ == '__main__': | ||
| + | rospy.init_node('hero_walk') | ||
| + | </pre> | ||
| + | |||
| + | Now, we create a new function with a publisher, to publish constantly a velocity of 0.01 in the x direction. We want to publish in the <code>/hero_i/vellocity_controller/cmd_vel</code> topic, changing "i" with the number of your HeRo. To publish in a topic, it is needed to create the type of message expected, to see which message type the topic expects: | ||
| + | |||
| + | <code>rostopic info /hero_i/position_controller/cmd_vel</code> | ||
| + | |||
| + | And to see how this type of message is structured: | ||
| − | + | <code>rosmsg show geometry_msgs/Twist</code> | |
| + | Now we can build our code, importing the correct message type and we will publish one time every second, or 1 Hz. | ||
<pre> | <pre> | ||
| + | #!/usr/bin/env python | ||
| + | |||
| + | import rospy | ||
| + | from geometry_msgs.msg import Twist | ||
| + | |||
| + | def mandaVelocidade(): | ||
| + | pub = rospy.Publisher('hero_3/velocity_controller/cmd_vel', Twist, queue_size=1) | ||
| + | msg = Twist() | ||
| + | rate = rospy.Rate(1) | ||
| + | |||
| + | while not rospy.is_shutdown(): | ||
| + | msg.linear.x = 0.01 | ||
| + | msg.angular.z = 0.0 | ||
| + | pub.publish(msg) | ||
| + | rate.sleep() | ||
| + | if __name__ == '__main__': | ||
| + | rospy.init_node('hero_walk') | ||
| + | mandaVelocidade() | ||
| + | |||
</pre> | </pre> | ||
Revision as of 16:04, 19 November 2024
Contents
HeRo
This project contributes to an open source ROS-based framework for swarm robotics. We propose an low cost, high availability swarm system that could be printed and assembled multiple times without special knowledge or hardware skills.
Main Page: https://verlab.github.io/hero_common/ros/
GitHub: https://github.com/verlab/hero_common/
HeRo ROS Tutorial
In this tutorial, we will create a new script to navigate the HeRo and utilize its sensors to avoid obstacles. To follow along, you must have ROS installed; for this tutorial, I will be using ROS Noetic.
The HeRo main page already has excellent tutorials for setting up the HeRo. You can follow the steps here:
Alternatively, you can follow this tutorial, which will focus primarily on the ROS setup and development aspects. For the purposes of this tutorial, we will configure HeRo as we would with any other ROS package
Set up ROS Workspace
Create a new ROS workspace. Notice you can use catkin build or catkin_make commands, choose one.
mkdir -p ~ ws_hero/src cd ws_hero catkin build
Download the package to ws_hero/src and build it from source. This is common to do for installing ROS packages.
cd ~/ws_hero/src git clone https://github.com/verlab/hero_common.git cd .. rosdep install --from-paths src/hero_common --ignore-src -r -y catkin build source devel/setup.bash
If you encounter issues in later steps, you may need to select the repository branch of your ROS distribution, see HeRo Installation Guide. You also may need to install the NVIDIA Container Toolkit. To test if the package is correctly installed, try launch the bringup:
roslaunch hero_bringup hero_bringup.launch
Because we haven’t configured the HeRo robot yet, it will currently search for TCP connections without successfully connecting. However, the launch process itself should still succeed. If everything was set up correctly, you should see the following output in the terminal:
You can exit the terminal.
Connect with HeRo
The HeRo ROS Setup Guide on the main HeRo page provides detailed instructions on connecting your computer to the robot. We summarize the main steps below for quick reference.
- Create a network Hotspot on your PC
- Set SSID and Password as desired, by default HeRo should connect in a network with SSID = rezeck, password = s3cr3tp4ss.
- If necessary, set these other Hotspot informations:
- mode: access point;
- band: automatic;
- wifi-security: WPA/WPA2 Personal - store password for all users (not encrypted);
- ipv4 shared to other computers;
- ipv6 automatic.
- Configure HeRo network
- Turn on HeRo in configuration mode: cover all sensors and flip the switch to turn it on. HeRo will blink in purple;
- Connect any device to the HeRo wi-fi network, password should be s3cr3tp4ss;
- Open in a browser 192.168.4.1 to open the HeRo configuration page;
- Set the SSID and Password that you gave to your Hotspot, HeRo will try to connect to this network;
- Save and turn-off HeRo.
Now turn it on the HeRo, it should connect automatically in the network. The robot will blink blue for 2 seconds if it is connected to the network, otherwise it will keep blink in red.
HeRo Teleoperation
Once the HeRo is connected to the network, you can launch the bringup and check the list of topics to ensure everything is configured correctly.
source devel/setup.bash roslaunch hero_bringup hero_bringup.launch rostopic list
If the topics appear as expected, you can proceed to launch teleoperation mode and begin controlling HeRo directly. Make sure to adjust the id to match your HeRo’s ID.
source devel/setup.bash roslaunch hero_bringup hero_teleop.launch id:=0
Create ROS Package for HeRo
In this tutorial, we will create a package with one node. We will replicate the random walk, HeRo will randomly move and deviate from obstacles, already implemented in the HeRo package. The ROS main page also provides a step-by-step guide in how to create packages Create ROS Package.
You may want to create a new package or node for HeRo. To create a node quickly, navigate to /ws_hero/src/hero_common/hero_examples/scripts/, copy an example script similar to what you want to achieve, modify it as needed, and save it with a new name. Once saved, you can call your node, and it should function properly. To keep your custom work separate from the original package, consider creating an entirely new package for your nodes. This approach keeps your workspace organized and makes it easier to manage changes independently of the original package.
Create a new package
cd src catkin_create_pkg tutorial_hero std_msgs rospy roscpp cd .. catkin_build
Alternatively you can also create a new package inside the hero_common. Those commands will create a new src folder inside your new tutorial_hero, you can create your new scripts inside this folder or create a new folder called scripts.
cd src/tutorial_hero mkdir scripts cd scripts
Now, create a python file to start writing our node, we will call it tutorial.py, you might need to do chmod +x tutorial.py. Use rostopic list for a ideia to which topics you want to change. In our case, we want to move the robot, therefore, we will use the vellocity_controller/cmd_vel topic to send velocity commands to the robot. First, lets import rospy, create our main function and initialize our new node hero_walk.
#!/usr/bin/env python
import rospy
if __name__ == '__main__':
rospy.init_node('hero_walk')
Now, we create a new function with a publisher, to publish constantly a velocity of 0.01 in the x direction. We want to publish in the /hero_i/vellocity_controller/cmd_vel topic, changing "i" with the number of your HeRo. To publish in a topic, it is needed to create the type of message expected, to see which message type the topic expects:
rostopic info /hero_i/position_controller/cmd_vel
And to see how this type of message is structured:
rosmsg show geometry_msgs/Twist
Now we can build our code, importing the correct message type and we will publish one time every second, or 1 Hz.
#!/usr/bin/env python
import rospy
from geometry_msgs.msg import Twist
def mandaVelocidade():
pub = rospy.Publisher('hero_3/velocity_controller/cmd_vel', Twist, queue_size=1)
msg = Twist()
rate = rospy.Rate(1)
while not rospy.is_shutdown():
msg.linear.x = 0.01
msg.angular.z = 0.0
pub.publish(msg)
rate.sleep()
if __name__ == '__main__':
rospy.init_node('hero_walk')
mandaVelocidade()
