Compare commits

...

2 Commits

Author SHA1 Message Date
chyoo 14580aaa88 Align MKMini Gazebo steering and world scale 2026-08-19 09:53:09 +09:00
chyoo eb52af430b Align MKMini simulator steering and lidar model 2026-08-12 14:05:59 +09:00
3 changed files with 17 additions and 6 deletions
@@ -44,7 +44,18 @@ public:
"/cmd_vel", rclcpp::QoS(10), "/cmd_vel", rclcpp::QoS(10),
[this](const geometry_msgs::msg::Twist::SharedPtr message) { [this](const geometry_msgs::msg::Twist::SharedPtr message) {
std::lock_guard<std::mutex> lock(mutex_); std::lock_guard<std::mutex> lock(mutex_);
target_angle_ = std::clamp(message->angular.z, -0.5, 0.5); // Twist.angular.z is yaw rate, not steering angle. Convert it using
// the signed vehicle speed so reverse Reeds-Shepp segments keep the
// same physical curvature as their planned path.
if (std::abs(message->linear.x) >= 0.01) {
target_angle_ = std::clamp(
std::atan(wheelbase_ * message->angular.z / message->linear.x),
-0.5,
0.5);
} else {
// Preserve the direct angle fallback used by manual J/L steering.
target_angle_ = std::clamp(message->angular.z, -0.5, 0.5);
}
has_target_ = true; has_target_ = true;
}); });
update_connection_ = gazebo::event::Events::ConnectWorldUpdateBegin( update_connection_ = gazebo::event::Events::ConnectWorldUpdateBegin(
@@ -33,7 +33,7 @@ LOCAL_SUN_LIGHT = ''' <light type="directional" name="sun">
<cast_shadows>false</cast_shadows><pose>0 0 10 0 0 0</pose><diffuse>0.8 0.8 0.8 1</diffuse><specular>0.2 0.2 0.2 1</specular><direction>-0.5 0.1 -0.9</direction> <cast_shadows>false</cast_shadows><pose>0 0 10 0 0 0</pose><diffuse>0.8 0.8 0.8 1</diffuse><specular>0.2 0.2 0.2 1</specular><direction>-0.5 0.1 -0.9</direction>
</light>''' </light>'''
MKMINI_WORLD_SPACING_SCALE = 1.6 MKMINI_WORLD_SPACING_SCALE = 1.0
def replace_house_visual_meshes_with_boxes(house_model): def replace_house_visual_meshes_with_boxes(house_model):
@@ -177,7 +177,7 @@ def create_flat_house_world(gazebo_dir):
def create_mkmini_world(gazebo_dir): def create_mkmini_world(gazebo_dir):
"""Expand the TurtleBot3 obstacle layout without changing obstacle sizes.""" """Create the MKMini world variant without changing map-scale coordinates."""
source_model_path = os.path.join(gazebo_dir, 'models', 'turtlebot3_world', 'model.sdf') source_model_path = os.path.join(gazebo_dir, 'models', 'turtlebot3_world', 'model.sdf')
models_dir = os.path.join(tempfile.gettempdir(), 'nav2_mkmini_models') models_dir = os.path.join(tempfile.gettempdir(), 'nav2_mkmini_models')
model_dir = os.path.join(models_dir, 'turtlebot3_world_mkmini') model_dir = os.path.join(models_dir, 'turtlebot3_world_mkmini')
@@ -190,8 +190,8 @@ def create_mkmini_world(gazebo_dir):
raise RuntimeError('turtlebot3_world model is missing from model.sdf') raise RuntimeError('turtlebot3_world model is missing from model.sdf')
model.attrib['name'] = 'turtlebot3_world_mkmini' model.attrib['name'] = 'turtlebot3_world_mkmini'
# Only object positions change. Keeping their geometry unchanged widens the # Keep object geometry and coordinates aligned with the base world. MKMini
# driving lanes for the larger MKMini collision footprint. # clearance comes from its footprint and inflation configuration.
for pose in model.findall('.//pose'): for pose in model.findall('.//pose'):
values = pose.text.split() values = pose.text.split()
if len(values) != 6: if len(values) != 6:
@@ -31,7 +31,7 @@
<link name="os_lidar"><pose>0.15 0 0.578 0 0 0</pose><inertial><mass>0.2</mass><inertia><ixx>0.001</ixx><iyy>0.001</iyy><izz>0.001</izz></inertia></inertial><visual name="visual"><geometry><cylinder><radius>0.061</radius><length>0.081</length></cylinder></geometry><material><ambient>0.85 0.12 0.10 1</ambient><diffuse>0.85 0.12 0.10 1</diffuse></material></visual><sensor name="lidar_2d" type="ray"><always_on>true</always_on><update_rate>10</update_rate><visualize>true</visualize><ray><scan><horizontal><samples>360</samples><resolution>1</resolution><min_angle>-3.14159</min_angle><max_angle>3.14159</max_angle></horizontal><vertical><samples>1</samples><resolution>1</resolution><min_angle>0</min_angle><max_angle>0</max_angle></vertical></scan><range><min>0.20</min><max>18.0</max><resolution>0.02</resolution></range></ray><plugin name="mkmini_lidar" filename="libgazebo_ros_ray_sensor.so"><ros><remapping>~/out:=/raw/lidar</remapping></ros><output_type>sensor_msgs/PointCloud2</output_type><frame_name>os_lidar</frame_name></plugin></sensor></link> <link name="os_lidar"><pose>0.15 0 0.578 0 0 0</pose><inertial><mass>0.2</mass><inertia><ixx>0.001</ixx><iyy>0.001</iyy><izz>0.001</izz></inertia></inertial><visual name="visual"><geometry><cylinder><radius>0.061</radius><length>0.081</length></cylinder></geometry><material><ambient>0.85 0.12 0.10 1</ambient><diffuse>0.85 0.12 0.10 1</diffuse></material></visual><sensor name="lidar_2d" type="ray"><always_on>true</always_on><update_rate>10</update_rate><visualize>true</visualize><ray><scan><horizontal><samples>360</samples><resolution>1</resolution><min_angle>-3.14159</min_angle><max_angle>3.14159</max_angle></horizontal><vertical><samples>1</samples><resolution>1</resolution><min_angle>0</min_angle><max_angle>0</max_angle></vertical></scan><range><min>0.20</min><max>18.0</max><resolution>0.02</resolution></range></ray><plugin name="mkmini_lidar" filename="libgazebo_ros_ray_sensor.so"><ros><remapping>~/out:=/raw/lidar</remapping></ros><output_type>sensor_msgs/PointCloud2</output_type><frame_name>os_lidar</frame_name></plugin></sensor></link>
<joint name="os_lidar_joint" type="fixed"><parent>base_link</parent><child>os_lidar</child></joint> <joint name="os_lidar_joint" type="fixed"><parent>base_link</parent><child>os_lidar</child></joint>
<plugin name="mkmini_tricycle" filename="libgazebo_ros_tricycle_drive.so"><ros><remapping>cmd_vel:=/cmd_vel</remapping><remapping>odom:=/odom</remapping></ros><steering_joint>front_steering_joint</steering_joint><actuated_wheel_joint>front_drive_joint</actuated_wheel_joint><encoder_wheel_left_joint>rear_left_joint</encoder_wheel_left_joint><encoder_wheel_right_joint>rear_right_joint</encoder_wheel_right_joint><wheel_separation>0.51</wheel_separation><encoder_wheel_diameter>0.24</encoder_wheel_diameter><actuated_wheel_diameter>0.24</actuated_wheel_diameter><max_wheel_torque>120.0</max_wheel_torque><max_wheel_acceleration>1.5</max_wheel_acceleration><max_steering_speed>1.2</max_steering_speed><publish_odom>true</publish_odom><publish_wheel_tf>true</publish_wheel_tf><publish_wheel_joint_state>true</publish_wheel_joint_state><odometry_frame>odom</odometry_frame><robot_base_frame>base_link</robot_base_frame></plugin> <plugin name="mkmini_tricycle" filename="libgazebo_ros_tricycle_drive.so"><ros><remapping>cmd_vel:=/cmd_vel</remapping><remapping>odom:=/odom</remapping></ros><steering_joint>front_steering_joint</steering_joint><actuated_wheel_joint>front_drive_joint</actuated_wheel_joint><encoder_wheel_left_joint>rear_left_joint</encoder_wheel_left_joint><encoder_wheel_right_joint>rear_right_joint</encoder_wheel_right_joint><wheel_separation>0.51</wheel_separation><encoder_wheel_diameter>0.24</encoder_wheel_diameter><actuated_wheel_diameter>0.24</actuated_wheel_diameter><max_wheel_torque>120.0</max_wheel_torque><max_wheel_acceleration>1.5</max_wheel_acceleration><max_steering_speed>0.0</max_steering_speed><publish_odom>true</publish_odom><publish_wheel_tf>true</publish_wheel_tf><publish_wheel_joint_state>true</publish_wheel_joint_state><odometry_frame>odom</odometry_frame><robot_base_frame>base_link</robot_base_frame></plugin>
<plugin name="mkmini_visual_steering" filename="/modules/[lms-nav2-gazebo-simulator]nav2-simulator_v1.0.0_ws/install/mkmini_gazebo_steering_plugin/lib/libmkmini_gazebo_steering_plugin.so"><topic>/mkmini/steering_command</topic><left_joint>front_left_visual_steering_joint</left_joint><right_joint>front_right_visual_steering_joint</right_joint><wheelbase>0.60</wheelbase><track_width>0.51</track_width><steering_speed>1.2</steering_speed></plugin> <plugin name="mkmini_visual_steering" filename="/modules/[lms-nav2-gazebo-simulator]nav2-simulator_v1.0.0_ws/install/mkmini_gazebo_steering_plugin/lib/libmkmini_gazebo_steering_plugin.so"><topic>/mkmini/steering_command</topic><left_joint>front_left_visual_steering_joint</left_joint><right_joint>front_right_visual_steering_joint</right_joint><wheelbase>0.60</wheelbase><track_width>0.51</track_width><steering_speed>1.2</steering_speed></plugin>
</model> </model>
</sdf> </sdf>