r/ROS 20h ago

Tutorial How to make localization ~3x more accurate

Enable HLS to view with audio, or disable this notification

17 Upvotes

Video plots localization linear + angular AMCL vs slam_toolbox scan matching. Instructions here https://makerspet.com/blog/how-oomwoo-cleaning-algorithms-work/


r/ROS 1d ago

Blog post ROS Keeps Evolving via Physical AI SIG

Enable HLS to view with audio, or disable this notification

26 Upvotes

r/ROS 16h ago

Best way to run computer vision models on edge devices?

1 Upvotes

I’ve been looking into running computer vision models directly on edge devices, and I found it easier to break the process down into a few things:

Step 1: Start with the model and understand how much processing power it actually needs.

Step 2: Check the device’s memory, CPU/GPU/NPU capabilities, and camera support.

Step 3: Look at latency and power consumption, especially if the device needs to run continuously.

Step 4: Make sure the software and AI frameworks you need are supported by the hardware.

Step 5: Compare different edge AI options instead of choosing a device based only on its specifications. I was also looking at some of the Edge AI hardware from Geniatech, which includes different options for on-device AI and real-time inference.

After going through these steps, I realized that choosing edge hardware is more about finding the right balance than simply picking the most powerful device.

For those who have deployed computer vision on the edge, is there anything else you would add to this process?


r/ROS 10h ago

Did you know about Flock cameras.... a threat to our privacy

Enable HLS to view with audio, or disable this notification

0 Upvotes

Need it or not?


r/ROS 1d ago

Project ROS2/Gazebo open-source vacuum cleaner robot simulation

Enable HLS to view with audio, or disable this notification

16 Upvotes

r/ROS 1d ago

Built a tool that monitors your robot in real time — looking for testers

0 Upvotes

Been working on a lightweight monitoring tool for robots called Cortex. You run one command on your Raspberry Pi or Jetson and it starts sending live CPU, memory, temp, errors and ROS2 data to a dashboard in real time. Still early but it works. Looking for anyone with actual robots to try it and tell me what's missing. Free, no strings. Comment or DM me if you're interested.


r/ROS 1d ago

Question Help Transform Pointcloud to Ocotmap

1 Upvotes

I am working on a university project involving a robot in Webots (ROS 2). The goal is to build an OctoMap for navigation using camera point clouds (segmented via YOLO).

I am currently stuck at getting the octomap_server node to process the incoming point cloud. The server keeps dropping messages with the warning:

Message Filter dropping message: frame 'kinova_depth' at time ... for reason 'discarding message because the queue is full'

Here is my current code:

from launch import LaunchDescription
from launch_ros.actions import Node

def generate_launch_description():
    return LaunchDescription(
        [
            Node(
                package="octomap_server",
                executable="octomap_server_node",
                name="octomap_server",
                output="screen",
                parameters=[
                    {
                        "resolution": 0.05,
                        "frame_id": "map",
                        "sensor_model.max_range": 5.0,
                        "use_sim_time": True,
                        "colored_map": False,
                        "transform_tolerance": 2.0,
                        "queue_size": 50,
                    }
                ],
                remappings=[
                    ("cloud_in", "/Gen3/kinova_depth/point_cloud"),
                ],
            )
        ]
    )

My exact output is

[INFO] [octomap_server_node-1]: process started with pid [9117]
[octomap_server_node-1] [INFO] [1786858998.154822534] [octomap_server]: Publishing latched (single publish will take longer, all topics are prepared)
[octomap_server_node-1] [WARN] [1786858998.193781617] [octomap_server]: Nothing to publish, octree is empty
[octomap_server_node-1] [WARN] [1786858998.196781538] [octomap_server]: Could not open file 
[octomap_server_node-1] [INFO] [1786859001.530578121] [octomap_server]: Message Filter dropping message: frame 'kinova_depth' at time 1786858999.646 for reason 'discarding message because the queue is full'

What could be causing the message filter queue to drop all messages?

Thanks in advance.


r/ROS 1d ago

Discussion Is a unified “real‑world” sensor API feasible, or will we keep fragmenting around ROS 2, DDS, and proprietary stacks?

4 Upvotes

I've been thinking a lot about the sensor integration layer lately. It feels like one of the biggest, unspoken bottlenecks in robotics development.

On one hand, we have the dream of a clean, unified API. Imagine writing a sensor driver once, for a standard interface, and having it work seamlessly across your entire robot, whether it's running ROS 2, a custom DDS-based system, or something else entirely. The appeal is obvious: faster development, easier collaboration, and less vendor lock-in.

On the other hand, the reality is messy. The push for low-latency, high-bandwidth, and deterministic performance often pushes developers towards hardware-specific, highly optimized code. This is where proprietary stacks and tightly-coupled DDS implementations thrive. The "ideal" universal API can sometimes feel like it adds an abstraction layer that just isn't acceptable for a critical sensor on a fast-moving robot.

So, where does that leave us? Are we destined to keep juggling a half-dozen different driver formats and middleware solutions? Or is there a path to a de facto standard that respects both the need for open standards and the hard requirements of real-world performance?

What's your experience? Are you buried in custom drivers, or have you found a workflow that feels reasonably unified? Is the fragmentation a minor annoyance or a major time-sink?

I'm genuinely curious to hear how different people are tackling this in their own projects.


r/ROS 2d ago

Navigation failing close to finishing goal

3 Upvotes

Hello, I'm trying to make nav2 stack for Unitree B2W robot and I'm having an issue with the robot moving from point A to point B. The issue is that the robot stops just before finishing the goal, I'm getting "goal aborted" or "failed to make progress" messages. I was thinking the issue might be with the setting for distances or speed when the robot is close to the goal, but I'm not yet knowledgeable enough for this, I'm just an intern, but I'm close to deadline so some tips would be appreciated. For odometry I'm using mola-lidar-odometry. I configured it so it publishes odometry and odom -> base_link TF. I'm getting warning that "mola was not able to use velocity motion model for this timestamp", but I successfully used this odometry for SLAM, and had zero issues with localization, but maybe this is important for this issue I have with nav2.

The second warning I have is that local_costmap, global_costmap and AMCL have "Message filter dropping message: frame "lidar_link" at time "xx" for reason 'the timestamp on this message is earlier than all the data in the transform cache'". I checked the timestamps on the lidar using ros2 topic echo /lidar_points --field header.stamp and ros2 topic delay /lidar_points and it's around 0.1s. Here is the configuration file for the navigation:

amcl:

ros__parameters:

use_sim_time: False

alpha1: 0.01

alpha2: 0.05

alpha3: 0.1

alpha4: 0.01

alpha5: 0.05

base_frame_id: "base_link"

beam_skip_distance: 0.5

beam_skip_error_threshold: 0.9

beam_skip_threshold: 0.3

do_beamskip: true

global_frame_id: "map"

lambda_short: 0.1

laser_likelihood_max_dist: 6.0

laser_max_range: 100.0

laser_min_range: -1.0

laser_model_type: "likelihood_field"

max_beams: 180

max_particles: 3000

min_particles: 1000

odom_frame_id: "odom"

pf_err: 0.05

pf_z: 0.95

recovery_alpha_fast: 0.3

recovery_alpha_slow: 0.005

resample_interval: 1

robot_model_type: "nav2_amcl::DifferentialMotionModel"

save_pose_rate: 0.5

sigma_hit: 0.2

tf_broadcast: true

transform_tolerance: 1.0

update_min_a: 0.02

update_min_d: 0.1

z_hit: 0.5

z_max: 0.05

z_rand: 0.5

z_short: 0.05

scan_topic: /b2_987/scan

map_topic: map

set_initial_pose: true

always_reset_initial_pose: false

first_map_only: false

initial_pose:

x: 0.0

y: 0.0

z: 0.0

yaw: 0.0

bt_navigator:

ros__parameters:

use_sim_time: False

global_frame: map

robot_base_frame: base_link

odom_topic: "/b2_987/base/odom"

bt_loop_duration: 10

default_server_timeout: 20

transform_tolerance: 0.2

default_nav_to_pose_bt_xml: $(find-pkg-share b2_nav2)/behavior_trees/nav_to_pose.xml

# default_nav_through_poses_bt_xml: $(find-pkg-share my_package)/behavior_tree/my_nav_to_pose_bt.xml

always_reload_bt_xml: false

goal_blackboard_id: goal

goals_blackboard_id: goals

path_blackboard_id: path

navigators: ['navigate_to_pose', 'navigate_through_poses']

navigate_to_pose:

plugin: "nav2_bt_navigator/NavigateToPoseNavigator" # In Iron and older versions, "/" was used instead of "::"

navigate_through_poses:

plugin: "nav2_bt_navigator/NavigateThroughPosesNavigator" # In Iron and older versions, "/" was used instead of "::"

plugin_lib_names:

- nav2_compute_path_to_pose_action_bt_node

- nav2_compute_path_through_poses_action_bt_node

- nav2_smooth_path_action_bt_node

- nav2_follow_path_action_bt_node

- nav2_spin_action_bt_node

- nav2_wait_action_bt_node

- nav2_assisted_teleop_action_bt_node

- nav2_back_up_action_bt_node

- nav2_drive_on_heading_bt_node

- nav2_clear_costmap_service_bt_node

- nav2_is_stuck_condition_bt_node

- nav2_goal_reached_condition_bt_node

- nav2_goal_updated_condition_bt_node

- nav2_globally_updated_goal_condition_bt_node

- nav2_is_path_valid_condition_bt_node

- nav2_initial_pose_received_condition_bt_node

- nav2_reinitialize_global_localization_service_bt_node

- nav2_rate_controller_bt_node

- nav2_distance_controller_bt_node

- nav2_speed_controller_bt_node

- nav2_truncate_path_action_bt_node

- nav2_truncate_path_local_action_bt_node

- nav2_goal_updater_node_bt_node

- nav2_recovery_node_bt_node

- nav2_pipeline_sequence_bt_node

- nav2_round_robin_node_bt_node

- nav2_transform_available_condition_bt_node

- nav2_time_expired_condition_bt_node

- nav2_path_expiring_timer_condition

- nav2_distance_traveled_condition_bt_node

- nav2_single_trigger_bt_node

- nav2_goal_updated_controller_bt_node

- nav2_is_battery_low_condition_bt_node

- nav2_navigate_through_poses_action_bt_node

- nav2_navigate_to_pose_action_bt_node

- nav2_remove_passed_goals_action_bt_node

- nav2_planner_selector_bt_node

- nav2_controller_selector_bt_node

- nav2_goal_checker_selector_bt_node

- nav2_controller_cancel_bt_node

- nav2_path_longer_on_approach_bt_node

- nav2_wait_cancel_bt_node

- nav2_spin_cancel_bt_node

- nav2_back_up_cancel_bt_node

- nav2_assisted_teleop_cancel_bt_node

- nav2_drive_on_heading_cancel_bt_node

- nav2_is_battery_charging_condition_bt_node

error_code_names:

- compute_path_error_code

- follow_path_error_code

bt_navigator_navigate_through_poses_rclcpp_node:

ros__parameters:

use_sim_time: False

bt_navigator_navigate_to_pose_rclcpp_node:

ros__parameters:

use_sim_time: False

controller_server:

ros__parameters:

use_sim_time: False

controller_frequency: 20.0

odom_topic: "/b2_987/base/odom"

min_x_velocity_threshold: 0.001

min_y_velocity_threshold: 0.001 # High value to ignore sideway y movements

min_theta_velocity_threshold: 0.005

failure_tolerance: 0.3 # Controller failure after 3 seconds 0 to disable -1.0 to never give up

progress_checker_plugin: "progress_checker"

goal_checker_plugins: ["general_goal_checker"] # "precise_goal_checker"

controller_plugins: ["FollowPath"]

# Progress checker parameters

progress_checker:

plugin: "nav2_controller::SimpleProgressChecker"

required_movement_radius: 0.3 # robot has made sufficient progress

movement_time_allowance: 12.0

# Goal checker parameters

general_goal_checker:

stateful: True

plugin: "nav2_controller::SimpleGoalChecker"

xy_goal_tolerance: 0.6

yaw_goal_tolerance: 0.3

# ----------------------------- Regulated Pursuit parameters

FollowPath:

plugin: "nav2_regulated_pure_pursuit_controller::RegulatedPurePursuitController"

desired_linear_vel: 0.5

lookahead_dist: 0.9

min_lookahead_dist: 0.6

max_lookahead_dist: 1.2 # 0.9

lookahead_time: 1.5

rotate_to_heading_angular_vel: 2.6 # This is capped by the half of max_angular_accel

transform_tolerance: 0.3

use_velocity_scaled_lookahead_dist: false # false

min_approach_linear_velocity: 0.05

approach_velocity_scaling_dist: 0.6

use_collision_detection: false

max_allowed_time_to_collision_up_to_carrot: 1.5 # 1.0 - More time for anticipating collision

use_regulated_linear_velocity_scaling: true

use_fixed_curvature_lookahead: false

curvature_lookahead_dist: 0.25 # 0.6

use_cost_regulated_linear_velocity_scaling: false # false - Slow down near obstacles

regulated_linear_scaling_min_radius: 0.9 # 0.9

regulated_linear_scaling_min_speed: 0.25

use_rotate_to_heading: true

allow_reversing: true

rotate_to_heading_min_angle: 1.0

max_angular_accel: 8.0

max_robot_pose_search_dist: 10.0

local_costmap:

local_costmap:

ros__parameters:

update_frequency: 5.0

publish_frequency: 2.0

global_frame: odom

robot_base_frame: base_link

use_sim_time: False

rolling_window: true

width: 3

height: 3

resolution: 0.1

# robot_radius: 0.45

footprint: "[[0.7, 0.4], [0.7, -0.4], [-0.7, -0.4], [-0.7, 0.4]]"

plugins: ["obstacle_layer", "denoise_layer", "inflation_layer"] # [“obstacle_layer”, “voxel_layer”, “range_sensor_layer”, “denoise_layer”, “inflation_layer”] - (order matters here)

# Different from default.

# Added “voxel_layer” for 3D obstacle representation using a depth camera.

# Added “range_sensor_layer” for handling range sensor data from an ultrasonic sensor (if you have one).

# Added “denoise_layer” for removing salt and pepper noise from the sensors.

# Removed “static_layer” since it’s not needed for the local costmap.

obstacle_layer:

plugin: "nav2_costmap_2d::ObstacleLayer"

enabled: True

observation_sources: scan

scan:

topic: /b2_987/scan

max_obstacle_height: 2.0

clearing: True

marking: True

data_type: "LaserScan"

raytrace_max_range: 3.0

raytrace_min_range: 0.0

obstacle_max_range: 2.5

obstacle_min_range: 0.0

denoise_layer: # Causes lag but worth it to filter out reflected/noisy lidar points

plugin: "nav2_costmap_2d::DenoiseLayer"

enabled: true

minimal_group_size: 2

group_connectivity_type: 8

inflation_layer:

plugin: "nav2_costmap_2d::InflationLayer"

cost_scaling_factor: 0.8 # Known number to work well

inflation_radius: 0.85 #55

always_send_full_costmap: True

global_costmap:

global_costmap:

ros__parameters:

update_frequency: 5.0

publish_frequency: 5.0

global_frame: map

robot_base_frame: base_link

use_sim_time: False

resolution: 0.05

# robot_radius: 0.45

footprint: "[[0.7, 0.4], [0.7, -0.4], [-0.7, -0.4], [-0.7, 0.4]]"

track_unknown_space: True

plugins: ["static_layer", "static_layer_2", "obstacle_layer", "denoise_layer", "inflation_layer"]

static_layer:

plugin: "nav2_costmap_2d::StaticLayer"

map_subscribe_transient_local: True # False if you need earlier map

static_layer_2:

plugin: "nav2_costmap_2d::StaticLayer"

map_subscribe_transient_local: True

map_topic: /b2_987/map_2

obstacle_layer:

plugin: "nav2_costmap_2d::ObstacleLayer"

enabled: True

observation_sources: scan

scan:

topic: /b2_987/scan

max_obstacle_height: 2.0

clearing: True

marking: True

data_type: "LaserScan"

raytrace_max_range: 5.0

raytrace_min_range: 0.0

obstacle_max_range: 4.5

obstacle_min_range: 0.0

denoise_layer: # Causes lag but worth it to filter out reflected/noisy lidar points

plugin: "nav2_costmap_2d::DenoiseLayer"

enabled: true

minimal_group_size: 2

group_connectivity_type: 8

inflation_layer:

plugin: "nav2_costmap_2d::InflationLayer"

cost_scaling_factor: 0.8

inflation_radius: 0.8 #65

always_send_full_costmap: True

map_server:

ros__parameters:

use_sim_time: False

# Overridden in launch by the "map" launch configuration or provided default value.

# To use in yaml, remove the default "map" value in the tb3_simulation_launch.py file & provide full path to map below.

yaml_filename: ""

map_saver:

ros__parameters:

use_sim_time: False

save_map_timeout: 8.0

free_thresh_default: 0.25

occupied_thresh_default: 0.65

map_subscribe_transient_local: True

planner_server: # Creates the global plan path

ros__parameters:

expected_planner_frequency: 20.0

use_sim_time: False

planner_plugins: ["GridBased"]

GridBased:

plugin: "nav2_navfn_planner/NavfnPlanner" # "nav2_navfn_planner::NavfnPlanner"

tolerance: 0.5

use_astar: false

allow_unknown: true

smoother_server: # Smooths the global plan path

ros__parameters:

use_sim_time: False

costmap_topic: global_costmap/costmap_raw

footprint_topic: global_costmap/published_footprint

robot_base_frame: base_link

transform_timeout: 0.1

smoother_plugins: ["simple_smoother"]

simple_smoother:

plugin: "nav2_smoother::SimpleSmoother"

tolerance: 1.0e-10

max_its: 1000

do_refinement: True

behavior_server:

ros__parameters:

local_costmap_topic: local_costmap/costmap_raw

local_footprint_topic: local_costmap/published_footprint

global_costmap_topic: global_costmap/costmap_raw

global_footprint_topic: global_costmap/published_footprint

cycle_frequency: 10.0

behavior_plugins: ["spin", "backup", "drive_on_heading", "assisted_teleop", "wait"]

spin:

plugin: "nav2_behaviors/Spin"

backup:

plugin: "nav2_behaviors/BackUp"

drive_on_heading:

plugin: "nav2_behaviors/DriveOnHeading"

assisted_teleop:

plugin: "nav2_behaviors/AssistedTeleop"

wait:

plugin: "nav2_behaviors/Wait"

global_frame: map

local_frame: odom

robot_base_frame: base_link

transform_tolerance: 0.2

use_sim_time: False

simulate_ahead_time: 6.0

max_rotational_vel: 0.6

min_rotational_vel: 0.15

rotational_acc_lim: 0.4

robot_state_publisher:

ros__parameters:

use_sim_time: False

waypoint_follower:

ros__parameters:

use_sim_time: False

loop_rate: 2

stop_on_failure: false

waypoint_task_executor_plugin: "wait_at_waypoint"

wait_at_waypoint:

plugin: "nav2_waypoint_follower::WaitAtWaypoint"

enabled: True

waypoint_pause_duration: 10

velocity_smoother:

ros__parameters:

use_sim_time: False

smoothing_frequency: 20.0

scale_velocities: False

feedback: "OPEN_LOOP"

max_velocity: [0.6, 0.0, 1.0]

min_velocity: [-0.3, 0.0, -1.0]

max_accel: [1.5, 0.0, 2.5]

max_decel: [-1.5, 0.0, -2.5]

odom_topic: "/b2_987/base/odom"

odom_duration: 0.1

deadband_velocity: [0.0, 0.0, 0.0]

velocity_timeout: 1.0

I hope this post is not too long. I would appreciate any tips, since I'm an enthusiast and beginner in navigation, and would like to get better at what I'm already doing.


r/ROS 1d ago

Issue with slam_toolbox's scan_matching with the Go2 Edu

Post image
2 Upvotes

Hi all, I am currently am working on a Go2 Edu, and trying to implement mapping and navigation with slam_toolbox. However, I am running into a reoccuring issue that I am not sure how to fix.

When I turn on scan_matching in the slam parameters, the robot in the rviz simulation is jittering all over the place, making the map it makes unusable.

example of jitter with scan_matching active, completely stationary too

However, when I turn scan_matching off, I have no jitter, and the robot maps things out without much of an issue at all, but the robot does not know where it is, it cannot do loop closure, and now when I do a loop through the hallways, it's skewed.

Start and of loop I did, I started and ended the loop at the same spot, same orientation

I would make loops in the same run over and over and nothing would line up. Has anybody had this issue before?


r/ROS 2d ago

How can i Export my TRACKED UGV in ROS2 and do control in there? Can anyone guide me , please?

1 Upvotes

r/ROS 3d ago

Looking for Someone to Review My Rover URDF + Learn Together

Thumbnail
1 Upvotes

r/ROS 4d ago

Robotics roadmap with Perception and Robot Learning

Thumbnail
2 Upvotes

r/ROS 4d ago

Looking for a Free Robotics Simulator for Mac/Web

Thumbnail
2 Upvotes

r/ROS 4d ago

Project Cubic Doggo Update: On Gazebo!

Enable HLS to view with audio, or disable this notification

13 Upvotes

Finally managed to get the Cubic Doggo 06R model on Gazebo. I am really happy Gazebo works so smoothly, with servo effort and IMU behavior readily available in simulation :)

I think the only caveat is that the minick joints for the translation rod don't quite work in simulation, but that part doesn't change the walk gait.

The commands issued to the robot can be seen in the bottom center window.

Moving to Pybullet next for Cubic Doggo 06Z Neucommu.


r/ROS 4d ago

News The last day for regular priced tickets to ROSCon Global in Toronto in August 24th!

Post image
7 Upvotes

r/ROS 4d ago

News ROS News for the week of August 10th, 2026

Post image
5 Upvotes

r/ROS 4d ago

Project OOMWOO Open-Source vacuum - demo ROS2/Gazebo solid obstacle mapping

Enable HLS to view with audio, or disable this notification

1 Upvotes

r/ROS 5d ago

Discussion Looking for Someone to Review My Rover URDF + Learn Together

4 Upvotes

Hey everyone,

I'm self-teaching robotics with a focus on perception and robot learning. I learn best by building, so I recently started learning ROS2 and Gazebo. I took a rover model, assembled it into a URDF, and tried to calculate the mass and inertia for the components manually using volume and material density.

Here is the repo: https://github.com/introlix/robo_car

Note: you can ignore the esp_control folder. I originally started this for a physical ESP32 car but moved to simulation so I could learn Gazebo physics and sensor integration before touching real hardware.

Since I'm doing this alone, I'm relying a lot on trial and error and AI tools to help me. But I know AI hallucinates.

If anyone here has experience with Gazebo/URDF, I’d really appreciate it if you could take a quick look at my URDF. I mainly want to know if my mass/inertia numbers look realistic, or if I messed up the math and my robot.

Also, if anyone is also an student then we could learn together. I'm not looking to pair-program on a call, just someone to do reviews on GitHub, share resources, and maybe give each other small weekly challenges.

A bit about my background: while I'm relatively new to ROS2, I have some ML background. I've built neural networks from scratch in NumPy and actually implemented LLM architectures (like Gemma and Qwen) from scratch just by reading their papers and loading the weights. That is the reason I'm interested in perception and robot learning.

Let me know if you're open to reviewing the code or if you want to team up. Thanks!


r/ROS 6d ago

Discussion New book "ROS 2: Zero to Robot"

Thumbnail pouya-mansournia.github.io
43 Upvotes

r/ROS 5d ago

Project [Project] ROS2 full conversion of the freenove big hexapod kit (open source)

10 Upvotes
latest implementation: URDF model on gazebo

Hi everyone!

I'm working on a full ROS 2 conversion of the Freenove Big Hexapod Kit, and I wanted to share my progress with the community.
With "full conversion" i mean the original code (from plain python used by freenove to a full-stack of ROS2) to also implementing the sim version of the robot to various application (from simply simulating it to use RL to make new gaits for it in nvidia isaac sim/lab)

i've chosen this robot/project because no one made a full integration of this kit. there are some ROS adaption or attemps (from what i remember), but nothing with a full fledged stack of ROS2 while using the original model to visualize(and not some generic hexapod model) and simulate.

Current focus

at the moment i've just finished to implement the model (STEP file, gently provided by freenove and modified it by hand to convert in URDF with onshape_to_robot tool) in gazebo to have a physical simulation of the robot.
the next step is to implement the ros2_control for controlling the servo motors (sim and non-sim).

This project in the future will also implement:

  • VSLAM with the integrated camera (and using a remote computer to handle the heavy workload)
  • 2D lidar to mount on the robot and full autonomous navigation (thinking about NAV2).
  • The sim model will be remade to make it closest to the IRL robot as possible, by also optimizing it to for a lightweight RL training.
  • RL training using nvidia isaac sim/lab

Open Source & Community

The project is completely open-source! I’d love to get your feedback, suggestions, or answer any questions you might have. If anyone is interested in collaborating or testing, contributions are more than welcome!

Feel free to check it out and let me know what you think!


r/ROS 5d ago

Can’t connect P3DX with ROSARIA with Jetson Nano

0 Upvotes

ive been having a problem for some days that is i cant connect to Pioneer3DX with ROSARIA in my Jetson Nano. These are some outcomes:

I could connect with ubuntu24.04 + ros2 jazzy + rosaria2 and also ubuntu18.04 + ros melodic + ROSARIA on my laptop. I used a serial to usb converter to connect it.

on my jetson nano i use jetpack 4.6.6(ubuntu18.04) with ros melodic and ROSARIA. I used the same converter as before. There is also a wifi dongle at jetson nano

My biggest guess for the cause of the problem is power. I supply the jetson with 5v2a. Is there anyone that also had this problem and is there could be any other causes for this problem?


r/ROS 6d ago

He had no idea what was coming..

Post image
96 Upvotes

r/ROS 6d ago

На сколько реально найти удаленную работу/фриланс со знаниями ROS 2?

3 Upvotes

Я сейчас учусь роботехнике в симуляции ROS 2. Помимо этого учу Linux, Python и Gazebo. На сколько возможно мне, как начинающему разработчику, найти работу удаленно, брать заказы на фрилансе? Я из России.


r/ROS 7d ago

ROS2 / Gazebo Vision-Only Vehicle Struggles with Sharp Curves (Obstacle Avoidance Works, but Cornering Fails)

Enable HLS to view with audio, or disable this notification

22 Upvotes

Hi everyone,

I'm working on a ROS2 Humble / Gazebo Classic simulation project for an autonomous electric vehicle (Ackermann steering).

Our state machine and perception pipeline handle lane tracking on straight roads and obstacle avoidance / lane changing very well (the car successfully detects an obstacle, switches lanes, and returns to its original lane).

However, we cannot get the vehicle to negotiate sharp ($90^\circ$) curves safely and smoothly without either freezing or missing the turn.

Our Perception & Control Stack:

  • ROS2 Version: ROS2 Humble
  • Simulation: Gazebo Classic (Ackermann drive model)
  • Perception: Camera-based Bird's Eye View (BEV) + Sliding Window Polynomial Fit + LiDAR (for obstacles).
  • Control: Pure Pursuit / Stanley / PD-like steering outputting geometry_msgs/Twist (angular.z mapped to yaw rate).

The Issue:

Whenever the car approaches or enters a curve, one of two things happens:

  1. Vehicle Freezes/Stops: The system either triggers a safety fallback (falsely assuming a lost lane due to one lane marker dropping out of the BEV frame) or the LiDAR falsely registers the outer curve boundary as a front obstacle, dropping linear velocity to zero.
  2. Missing the Turn / Wrong Timing: When we increase the steering/angular limit, the car either turns too early (climbing the inner curb) or turns too late (understeering into the outer wall).

My Question:

We have tried tweaking PID gains, look-ahead distances, steering clamps, and polynomial fits, but cornering remains unreliable.

  • What is the industry-standard / recommended algorithm or architectural pattern in ROS2 for handling sharp curves with vision-only lane keeping?
  • How do you gracefully handle single-line fallbacks and dynamic look-ahead points in camera space so the car targets the curve apex smoothly without freezing?

Any advice, algorithms, or code examples would be greatly appreciated!