You are on page 1of 6

Installation

December 18, 2022

1 Ubuntu
1.0.1 Add the ROS 2 apt repository
You will need to add the ROS 2 apt repositories to your system. To do so, first authorize our GPG
key with apt like this:
sudo apt update && sudo apt install curl gnupg2 lsb-release

sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/ke


And then add the repository to your sources list:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.

1.0.2 Download and unpack


Go the releases page
mkdir -p ~/ros2_foxy

cd ~/ros2_foxy

tar xf ~/Downloads/ros2-package-linux-x86_64.tar.bz2

1.0.3 Installing and initializing rosdep


sudo apt update

sudo apt install -y python3-rosdep

sudo rosdep init

rosdep update

1.0.4 Installing the missing dependencies


Set your rosdistro according to the release you downloaded.
rosdep install --from-paths ~/ros2_foxy/ros2-linux/share --ignore-src --rosdistro foxy -y --ski
sudo apt install -q -y \
rti-connext-dds-5.3.1 # from packages.ros.org/ros2/ubuntu

1
1.0.5 Installing the python3 libraries
sudo apt install -y libpython3-dev python3-pip

pip3 install -U argcomplete


. ~/ros2_foxy/ros2-linux/setup.bash
. ~/ros2_foxy/ros2-linux/setup.bash
ros2 run demo_nodes_cpp talker
. ~/ros2_foxy/ros2-linux/setup.bash
ros2 run demo_nodes_py listener
Add source ~/ros2_foxy/ros2-linux/setup.bash to ~/.bashrc
sudo apt install python3-colcon-common-extensions
cd /usr/share/colcon_argcomplete/hook/

ls

>>colcon-argcomplete.bash colcon-argcomplete.zsh

source /usr/share/colcon_argcomplete/hook/colcon-argcomplete.bash
mkdir ros2_ws
cd ros2_ws
mkdir src
colcon build

cd install

source local_setup.bash

source setup.bash
cd ros2_ws/src

ros2 pkg create my_py_pkg --build-type ament_python --dependencies rclpy

ros2 pkg create my_cpp_pkg --build-type ament_cmake --dependencies rclcpp

colcon build --packeges-select my_py_pkg


colcon build --packeges-select my_cpp_pkg
# Optional
export RMW_IMPLEMENTATION=rmw_fastrtps_cpp
export RMW_IMPLEMENTATION=rmw_opensplice_cpp
export RMW_IMPLEMENTATION=rmw_connext_cpp
/opt/rti.com/rti_connext_dds-5.3.1/setenv_ros2rti.bash

2
[ ]: # my_first_node.py

#!/usr/bin/python3

import rclpy
from rclpy.node import Node

def main(args=None):
rclpy.init(args=args) #initialize ros2
print("---testing---")
node = Node("py_test") # create a Node
node.get_logger().info("Hello ROS2") # Print
rclpy.spin(node)
rclpy.shutdown()

if __name__ == "__main__":
main()

[ ]: # setup.py
# change or edit
entry_points={
'console_scripts': [
"py_node = my_py_pkg.my_first_node:main" #py_node is the executable
],
}

Run in terminal, but make sure that all the envirnment varialble are set
ros2 run my_py_pkg py_node
#!/usr/bin/env python3
import rclpy
from rclpy.node import Node

class MyCustomNode(Node): # MODIFY NAME


def __init__(self):
super().__init__("node_name") # MODIFY NAME

def main(args=None):
rclpy.init(args=args)
node = MyCustomNode() # MODIFY NAME
rclpy.spin(node)
rclpy.shutdown()

if __name__ == "__main__":

3
main()
[ ]: #!/usr/bin/python3
import rclpy
from rclpy.node import Node

class MyNode(Node):
def __init__(self) -> None:
super().__init__("py_test")
self.counter_ = 0
self.get_logger().info("Hello Wencome to ROS2") # Print
self.create_timer(0.5, self.timer_callback) #Time = 2Hz= 0.5 seconds

def timer_callback(self):
self.counter_ += 1
self.get_logger().info(f"Hello counter={self.counter_}") # Print

def main(args=None):
rclpy.init(args=args) #initialize ros2
print("---testing---")
node = MyNode() # create a Node
rclpy.spin(node)
rclpy.shutdown()

if __name__ == "__main__":
main()

#include "rclcpp/rclcpp.hpp"

using namespace std;

int main(int argc, char **argv)


{
rclcpp::init(argc, argv); //initialize ROS2

auto node = std::make_shared<rclcpp::Node>("cpp_test"); //create a node

RCLCPP_INFO(node->get_logger(), "Hello Cpp Node in ROS2");

rclcpp::spin(node);
rclcpp::shutdown(); //Shutdown ROS2
return 0;
}

1.0.6 OOP
#include "rclcpp/rclcpp.hpp"

4
using namespace std;

class MyNode: public rclcpp::Node


{
public:
MyNode(): Node("cpp_test")
{
RCLCPP_INFO(this->get_logger(), "Hello Cpp Node in ROS2");
}
};

int main(int argc, char **argv)


{
rclcpp::init(argc, argv); //initialize ROS2

auto node = std::make_shared<MyNode>(); //create a node

rclcpp::spin(node);
rclcpp::shutdown(); //Shutdown ROS2
return 0;
}

1.1 Counter Timer


#include "rclcpp/rclcpp.hpp"

using namespace std;

class MyNode: public rclcpp::Node


{
public:
MyNode(): Node("cpp_test"), counter_(0)
{
RCLCPP_INFO(this->get_logger(), "Hello Cpp Node in ROS2");

timer_ = this->create_wall_timer(std::chrono::seconds(1),
std::bind(&MyNode::timer_callback, this));
}

private:
void timer_callback()
{
counter_ += 1;
RCLCPP_INFO(this->get_logger(), "Hello %d", counter_);
}

rclcpp::TimerBase::SharedPtr timer_;
int counter_;

5
};

int main(int argc, char **argv)


{
rclcpp::init(argc, argv); //initialize ROS2

auto node = std::make_shared<MyNode>(); //create a node

rclcpp::spin(node);
rclcpp::shutdown(); //Shutdown ROS2
return 0;
}
[ ]:

You might also like