Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions core/src/cost_terms.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -298,7 +298,7 @@ double Clearance::operator()(const SubTrajectory& s, std::string& comment) const
} };

auto collision_comment = [=](const auto& distance) {
return fmt::format(PREFIX + "allegedly valid solution collides between '{}' and '{}'", distance.link_names[0],
return fmt::format(fmt::runtime(PREFIX + "allegedly valid solution collides between '{}' and '{}'"), distance.link_names[0],
distance.link_names[1]);
};

Expand All @@ -313,10 +313,10 @@ double Clearance::operator()(const SubTrajectory& s, std::string& comment) const
}
distance = distance_data.distance;
if (!cumulative)
comment = fmt::format(PREFIX + "distance {} between '{}' and '{}'", distance, distance_data.link_names[0],
comment = fmt::format(fmt::runtime(PREFIX + "distance {} between '{}' and '{}'"), distance, distance_data.link_names[0],
distance_data.link_names[1]);
else
comment = fmt::format(PREFIX + "cumulative distance {}", distance);
comment = fmt::format(fmt::runtime(PREFIX + "cumulative distance {}"), distance);
} else { // check trajectory
for (size_t i = 0; i < s.trajectory()->getWayPointCount(); ++i) {
auto distance_data = check_distance(state, s.trajectory()->getWayPoint(i));
Expand All @@ -327,7 +327,7 @@ double Clearance::operator()(const SubTrajectory& s, std::string& comment) const
distance += distance_data.distance;
}
distance /= s.trajectory()->getWayPointCount();
comment = fmt::format(PREFIX + "average{} distance: {}", (cumulative ? " cumulative" : ""), distance);
comment = fmt::format(fmt::runtime(PREFIX + "average{} distance: {}"), (cumulative ? " cumulative" : ""), distance);
}

return distance_to_cost(distance);
Expand Down
4 changes: 2 additions & 2 deletions core/src/stage.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -909,8 +909,8 @@ bool Connecting::compatible(const InterfaceState& from_state, const InterfaceSta
const planning_scene::PlanningSceneConstPtr& from = from_state.scene();
const planning_scene::PlanningSceneConstPtr& to = to_state.scene();

auto false_with_debug = [](auto... args) {
RCLCPP_DEBUG_STREAM(rclcpp::get_logger("Connecting"), fmt::format(args...));
auto false_with_debug = [](auto fmt_str, auto&&... args) {
RCLCPP_DEBUG_STREAM(rclcpp::get_logger("Connecting"), fmt::format(fmt::runtime(fmt_str), std::forward<decltype(args)>(args)...));
return false;
};

Expand Down
23 changes: 20 additions & 3 deletions visualization/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,27 @@ find_package(rviz_ogre_vendor REQUIRED)
add_definitions(-DBOOST_MATH_DISABLE_FLOAT128)

# Qt Stuff
find_package(Qt5 REQUIRED COMPONENTS Core Widgets)
set(QT_LIBRARIES Qt5::Widgets)
# rviz switched to Qt6 in 15.1.14 (ros2/rviz#1635 merged 2025-12-08 but did not
# land until that patch release; 15.1.13 and earlier are still Qt5). Gate on
# rviz's version rather than Qt6 availability -- Ubuntu 24.04 ships both Qt5 and
# Qt6, and linking a Qt6 build against a Qt5 rviz is an ABI mismatch.
if(rviz_common_VERSION VERSION_GREATER_EQUAL 15.1.14)
find_package(Qt6 REQUIRED COMPONENTS Core Widgets)
set(QT_VERSION_MAJOR 6)
# Hint for transitive deps that use find_package(QT NAMES Qt6 Qt5 ...) which
# may incorrectly resolve to Qt5 due to CMake's ascending path order
set(QT_DIR "${Qt6_DIR}")
else()
find_package(Qt5 REQUIRED COMPONENTS Core Widgets)
set(QT_VERSION_MAJOR 5)
endif()
set(QT_LIBRARIES Qt${QT_VERSION_MAJOR}::Widgets)
macro(qt_wrap_ui)
qt5_wrap_ui(${ARGN})
if(QT_VERSION_MAJOR EQUAL 5)
qt5_wrap_ui(${ARGN})
else()
qt6_wrap_ui(${ARGN})
endif()
endmacro()

set(CMAKE_INCLUDE_CURRENT_DIR ON)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -526,7 +526,7 @@ QVariant RemoteSolutionModel::data(const QModelIndex& index, int role) const {
return item.creation_rank;
case 1:
if (std::isinf(item.cost))
return tr(u8"∞");
return tr(reinterpret_cast<const char*>(u8"∞"));
if (std::isnan(item.cost))
return QVariant();
return QLocale().toString(item.cost, 'f', 4);
Expand Down
13 changes: 13 additions & 0 deletions visualization/motion_planning_tasks/src/task_display.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
*/

#include "task_display.h"
#include <rclcpp/version.h>
#include "task_panel.h"
#include "task_list_model.h"
#include "meta_task_list_model.h"
Expand Down Expand Up @@ -184,12 +185,24 @@ void TaskDisplay::calculateOffsetPosition() {
scene_node_->setOrientation(orientation);
}

#if RCLCPP_VERSION_GTE(30, 0, 0)
void TaskDisplay::update(std::chrono::nanoseconds wall_dt, std::chrono::nanoseconds ros_dt) {
requestPanel();
Display::update(wall_dt, ros_dt);
calculateOffsetPosition();
using namespace std::chrono;
float wall_dt_s = duration_cast<duration<float>>(wall_dt).count();
float ros_dt_s = duration_cast<duration<float>>(ros_dt).count();
trajectory_visual_->update(wall_dt_s, ros_dt_s);
}
#else
void TaskDisplay::update(float wall_dt, float ros_dt) {
requestPanel();
Display::update(wall_dt, ros_dt);
calculateOffsetPosition();
trajectory_visual_->update(wall_dt, ros_dt);
}
#endif

void TaskDisplay::changedRobotDescription() {
if (isEnabled())
Expand Down
6 changes: 6 additions & 0 deletions visualization/motion_planning_tasks/src/task_display.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@
#pragma once

#include <rviz_common/display.hpp>
#include <rclcpp/version.h>
#include <chrono>
#include <rviz_common/ros_integration/ros_client_abstraction_iface.hpp>
#include <moveit/visualization_tools/task_solution_visualization.h>

Expand Down Expand Up @@ -83,7 +85,11 @@ class TaskDisplay : public rviz_common::Display

void loadRobotModel();

#if RCLCPP_VERSION_GTE(30, 0, 0)
void update(std::chrono::nanoseconds wall_dt, std::chrono::nanoseconds ros_dt) override;
#else
void update(float wall_dt, float ros_dt) override;
#endif
void reset() override;
void save(rviz_common::Config config) const override;
void load(const rviz_common::Config& config) override;
Expand Down
4 changes: 2 additions & 2 deletions visualization/motion_planning_tasks/src/task_list_model.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,9 @@ QVariant TaskListModel::horizontalHeader(int column, int role) {
case 0:
return tr("name");
case 1:
return tr(u8"✓");
return tr(reinterpret_cast<const char*>(u8"✓"));
case 2:
return tr(u8"✗");
return tr(reinterpret_cast<const char*>(u8"✗"));
case 3:
return tr("time");
}
Expand Down
2 changes: 1 addition & 1 deletion visualization/package.xml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
<buildtool_depend>ament_cmake</buildtool_depend>

<depend>fmt</depend>
<build_depend>qtbase5-dev</build_depend>
<build_depend>qt-base-dev</build_depend>
<depend>moveit_core</depend>
<depend>moveit_task_constructor_msgs</depend>
<depend>moveit_task_constructor_core</depend>
Expand Down
Loading