Skip to content

Conversation

@marahalhessn4-droid
Copy link

Code ros2

Code ros2
@marahalhessn4-droid
Copy link
Author

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
source /opt/ros/humble/setup.bash
cd ~/ros2_ws/src
ros2 pkg create --build-type ament_cmake mimic --dependencies rclcpp geometry_msgs turtlesim
#include "rclcpp/rclcpp.hpp"
#include "geometry_msgs/msg/twist.hpp"

using std::placeholders::_1;

class Mimic2 : public rclcpp::Node
{
public:
Mimic2() : Node("turtle_mimic_2")
{
publisher_ = this->create_publisher<geometry_msgs::msg::Twist>("turtle3/cmd_vel", 10);
subscription_ = this->create_subscription<geometry_msgs::msg::Twist>(
"turtle2/cmd_vel", 10, std::bind(&Mimic2::topic_callback, this, _1));
}

private:
void topic_callback(const geometry_msgs::msg::Twist::SharedPtr msg)
{
publisher_->publish(*msg);
}
rclcpp::Publisher<geometry_msgs::msg::Twist>::SharedPtr publisher_;
rclcpp::Subscription<geometry_msgs::msg::Twist>::SharedPtr subscription_;
};

int main(int argc, char * argv[])
{
rclcpp::init(argc, argv);
rclcpp::spin(std::make_shared());
rclcpp::shutdown();
return 0;
}
add_executable(mimic_2 src/mimic_2.cpp)
ament_target_dependencies(mimic_2 rclcpp geometry_msgs)

install(TARGETS mimic_2
DESTINATION lib/${PROJECT_NAME})
rclcpp
geometry_msgs
turtlesim
from launch import LaunchDescription
from launch_ros.actions import Node

def generate_launch_description():
return LaunchDescription([
Node(
package='turtlesim',
namespace='turtlesim',
executable='turtlesim_node',
name='sim'
),
Node(
package='turtlesim',
executable='turtle_teleop_key',
name='teleop',
prefix='xterm -e'
),
Node(
package='mimic',
executable='mimic',
name='mimic',
remappings=[
('/input/input_pose', '/turtle1/pose'),
('/output/cmd_vel', '/turtle2/cmd_vel')
]
),
Node(
package='mimic',
executable='mimic_2',
name='mimic_2',
remappings=[
('/turtle2/cmd_vel', '/turtle2/cmd_vel'),
('/turtle3/cmd_vel', '/turtle3/cmd_vel')
]
)
])
cd ~/ros2_ws
colcon build --packages-select mimic
source install/setup.bash
ros2 launch mimic mimic_launch.py
turtle_teleop_key (velocity commands)
|
v
turtle1 (publisher)
|
v
mimic_node (subscriber -> publisher)
| |
v v
turtle2 (mimic1) mimic2_node (subscriber -> publisher)
|
v
turtle3 (mimic2)
void topic_callback(const geometry_msgs::msg::Twist::SharedPtr msg)
{
auto new_msg = *msg;
new_msg.linear.x *= -1; // عكس الاتجاه
new_msg.angular.z *= -1; // عكس الدوران
publisher_->publish(new_msg);
}

@marahalhessn4-droid
Copy link
Author

`mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
source /opt/ros/humble/setup.bash
cd ~/ros2_ws/src
ros2 pkg create --build-type ament_cmake mimic --dependencies rclcpp geometry_msgs turtlesim
#include "rclcpp/rclcpp.hpp"
#include "geometry_msgs/msg/twist.hpp"

using std::placeholders::_1;

class Mimic2 : public rclcpp::Node
{
public:
Mimic2() : Node("turtle_mimic_2")
{
publisher_ = this->create_publisher<geometry_msgs::msg::Twist>("turtle3/cmd_vel", 10);
subscription_ = this->create_subscription<geometry_msgs::msg::Twist>(
"turtle2/cmd_vel", 10, std::bind(&Mimic2::topic_callback, this, _1));
}

private:
void topic_callback(const geometry_msgs::msg::Twist::SharedPtr msg)
{
publisher_->publish(*msg);
}
rclcpp::Publisher<geometry_msgs::msg::Twist>::SharedPtr publisher_;
rclcpp::Subscription<geometry_msgs::msg::Twist>::SharedPtr subscription_;
};

int main(int argc, char * argv[])
{
rclcpp::init(argc, argv);
rclcpp::spin(std::make_shared());
rclcpp::shutdown();
return 0;
}
add_executable(mimic_2 src/mimic_2.cpp)
ament_target_dependencies(mimic_2 rclcpp geometry_msgs)

install(TARGETS mimic_2
DESTINATION lib/${PROJECT_NAME})
rclcpp
geometry_msgs
turtlesim
from launch import LaunchDescription
from launch_ros.actions import Node

def generate_launch_description():
return LaunchDescription([
Node(
package='turtlesim',
namespace='turtlesim',
executable='turtlesim_node',
name='sim'
),
Node(
package='turtlesim',
executable='turtle_teleop_key',
name='teleop',
prefix='xterm -e'
),
Node(
package='mimic',
executable='mimic',
name='mimic',
remappings=[
('/input/input_pose', '/turtle1/pose'),
('/output/cmd_vel', '/turtle2/cmd_vel')
]
),
Node(
package='mimic',
executable='mimic_2',
name='mimic_2',
remappings=[
('/turtle2/cmd_vel', '/turtle2/cmd_vel'),
('/turtle3/cmd_vel', '/turtle3/cmd_vel')
]
)
])
cd ~/ros2_ws
colcon build --packages-select mimic
source install/setup.bash
ros2 launch mimic mimic_launch.py
turtle_teleop_key (velocity commands)
|
v
turtle1 (publisher)
|
v
mimic_node (subscriber -> publisher)
| |
v v
turtle2 (mimic1) mimic2_node (subscriber -> publisher)
|
v
turtle3 (mimic2)
void topic_callback(const geometry_msgs::msg::Twist::SharedPtr msg)
{
auto new_msg = *msg;
new_msg.linear.x *= -1; // عكس الاتجاه
new_msg.angular.z *= -1; // عكس الدوران
publisher_->publish(new_msg);
}
`

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant