コンテンツにスキップ

ROS 2 インターフェース

English · README

実機と同じく名前空間は /kachaka です。

Topic 型 周期
manual_control/cmd_vel geometry_msgs/Twist(購読)、最高 0.3 m/s
goal_pose geometry_msgs/PoseStamped(購読): MOVE_TO_POSE
odometry/odometry nav_msgs/Odometry 20 Hz
wheel_odometry/wheel_odometry nav_msgs/Odometry 20 Hz
lidar/scan sensor_msgs/LaserScan 10 Hz
imu/imu sensor_msgs/Imu 100 Hz
front_camera/image_raw、back_camera/image_raw sensor_msgs/Image(rgb8、640×480)+ camera_info 10 Hz
tof_camera/image_raw sensor_msgs/Image(16UC1、mm)+ camera_info 10 Hz
object_detection/result kachaka_interfaces/ObjectDetectionListStamped、物体検出を参照(object_detection_relay) 10 Hz
joint_states、robot_description
robot_info/battery_state sensor_msgs/BatteryState(残量、充電中または放電中、電圧、電流。バッテリーを参照) 1 Hz
robot_info/version スタブ
sim/ground_truth nav_msgs/Odometry(シミュレータのみ) 20 Hz
sim/charger_pose geometry_msgs/PoseStamped(シミュレータのみ、latched)
sim/charger_detection geometry_msgs/PoseStamped、1.5 m 以内のときロボットから見た充電器の位置(シミュレータのみ) 20 Hz
sim/layout std_msgs/String、シェルフと追加の場所の JSON(シミュレータのみ、latched)
sim/shelf_poses geometry_msgs/PoseArray、map 座標のシェルフ位置(シミュレータのみ) 2 Hz
sim/shelf_detection geometry_msgs/PoseArray、ロボットから見たシェルフ位置(シミュレータのみ) 20 Hz
sim/shelf_docked std_msgs/String、牽引中のシェルフ ID か空文字(シミュレータのみ、latched)
sim/shelf_dock std_srvs/SetBool サービス、ピンの上げ下げ(シミュレータのみ)
sim/autonomous/cmd_vel geometry_msgs/Twist(購読)、nav_bridge と command_server からの自律走行の指令、最高 0.8 m/s(シミュレータのみ、速度上限)
sim/speech std_msgs/String、SPEAK と tts_on_success のテキスト(シミュレータのみ)
sim/front_stop/state std_msgs/String、前方障害物停止の状態 JSON {"enabled", "muted", "blocked"}(シミュレータのみ、latched、変化時)
sim/cliff std_msgs/String、段差センサーの状態 JSON {"enabled", "paused", "over"}(シミュレータのみ、latched、変化時)
sim/collision std_msgs/String、本体の衝突ごとの JSON {"stamp", "count", "with", "pose"}(シミュレータのみ)
sim/errors std_msgs/String、GetError が返すエラーコードの JSON リスト(シミュレータのみ、latched、変化時)
sim/power_button std_srvs/Trigger サービス: 段差や衝突による一時停止から復帰(シミュレータのみ)
sim/object_detection std_msgs/String、前方カメラの画像ごとの検出結果の JSON(シミュレータのみ) 10 Hz
sim/torch std_msgs/String、トーチの明るさ 0〜255 の JSON {"front", "back"}(シミュレータのみ、latched)
sim/reset std_srvs/SetBool サービス、開始時の状態に戻す。data: true で SLAM の地図も消す(シミュレータのみ、シミュレータのリセットを参照)
sim/reset/event std_msgs/String、リセットのたびに JSON {"id", "clear_map"}(シミュレータのみ)
sim/movers std_msgs/String、JSON {"stamp", "frame_id", "movers": [...], "closest"}: 動く人と箱の正解位置(シミュレータのみ、20 Hz、動く人と箱を参照)
sim/doors std_msgs/String、JSON {"doors": [...]}: 各ドアの状態(シミュレータのみ、latched、変化時とパネルが動いている間は 0.1 秒ごと、ドアを参照)
sim/doors/<id>/set_open std_srvs/SetBool サービス: ドアを開ける(true)/閉める(シミュレータのみ)
sim/front_stop/set_enabled、sim/front_stop/mute std_srvs/SetBool サービス。前方障害物停止の ON/OFF(アプリの設定に相当)と、コマンド実行中の一時無効化(command_server が使う)(シミュレータのみ)
sim/command/start、sim/command/cancel std_msgs/String、JSON。kachaka-api サーバーから command_server へのコマンド(シミュレータのみ)
sim/command/state std_msgs/String、JSON。実行中のコマンドと最後の結果(シミュレータのみ、latched)

実機が自分で提供している機能は kachaka_sim_bringup の command_server が提供します。 kachaka_command/execute action、goal_pose、 layout/locations/list と layout/shelves/list、auto_homing/set_enabled サービスです。実機と一緒には起動しないでください (command_server:=false)。

/clock と /tf はトップレベルに出ます。ROS 2 側では use_sim_time:=true を使ってください。 詳細と設計判断は docs/design.md にあります(英語)。

ROS 2 パッケージを実機で使う

ros2_ws/src/kachaka_sim_bringup は /kachaka の topic にしか依存しないので、実機 (use_sim_time:=false、command_server:=false)でも動くはずです。ただし未確認です。 このとき nav_bridge は Nav2 の指令を manual_control/cmd_vel に送り、実機のブリッジは 0.3 m/s で頭打ちにします。 nav2_params.yaml の MPPI の vx_max と velocity smoother の max_velocity(シミュレータ向けに 0.8 m/s)を合わせて下げてください。