Dobot MG400 の各jointへ数値を送信 実践編【ROS2-Foxy】

ROS2
スポンサーリンク

スポンサーリンク

はじめに

前回は、launch ファイルの作成と URDF ファイルの修正を行いました。

今回は、各 joint の値を指定して、MG400 を動かしていきます。

前提条件

前提条件は、以下の通りです。

  • 前回の記事までが完了している

MG400 を動かす

早速、動かしていきましょう。

cd ~/mg400_workspace
colcon build --packages-select mg400_training
source ~/.bashrc
ros2 launch mg400_training controller.launch.py

以下のような画面が立ち上がります。

別のターミナルを開いて、publish_trajectory.py を実行します。

ros2 run mg400_training publish_trajectory

以下のように MG400 が動くのを確認できると思います。

いくつかついてきていない部品がありますが、無視します。
この辺は fixed や revolute を変更すればできそうな気がします。

動作範囲の変更

動作する範囲の変更は publish_trajectory.py を変更します。

こちらのページで説明していますが、再掲しておきます。

import rclpy
from rclpy.node import Node
from builtin_interfaces.msg import Duration
from trajectory_msgs.msg import JointTrajectory, JointTrajectoryPoint

class Trajectory_publisher(Node):
    def __init__(self):
        super().__init__("trajectory_publisher_node")
        publisher_topic = "/joint_trajectory_controller/joint_trajectory"
        self.trajectory_publisher = self.create_publisher(JointTrajectory, publisher_topic, 10)
        timer_period = 1
        self.timer = self.create_timer(timer_period, self.timer_callback)
        self.joints = ["joint_1", "joint_2", "joint_4", "joint_6", "joint_10"]
        self.goal_positions = [-1.3, 0.3, -0.3, 0.3, -0.3]

    def timer_callback(self):
        bazu_trajectory_msg = JointTrajectory()
        bazu_trajectory_msg.joint_names = self.joints
        point = JointTrajectoryPoint()
        point.positions = self.goal_positions
        point.time_from_start = Duration(sec=2)
        bazu_trajectory_msg.points.append(point)
        self.trajectory_publisher.publish(bazu_trajectory_msg)
        print("callback ...", point, self.trajectory_publisher)

def main(args=None):
    rclpy.init(args=args)
    joint_trajectory_object = Trajectory_publisher()

    rclpy.spin(joint_trajectory_object)
    joint_trajectory_object.destroy_node()
    rclpy.shutdown()


if __name__ == "__main__":
    main()

この中の

self.joints = ["joint_1", "joint_2", "joint_4", "joint_6", "joint_10"]
self.goal_positions = [-1.3, 0.3, -0.3, 0.3, -0.3]

この 2 行をいろいろな数値に変更してみてください。

ログの確認

ros2 run mg400_training publish_trajectory

を実行したターミナルに表示されるログを確認します。

callback ... 
trajectory_msgs.msg.JointTrajectoryPoint(
positions=[-1.3, 0.3, -0.3, 0.3, -0.3], 
velocities=[], 
accelerations=[], 
effort=[], 
time_from_start=builtin_interfaces.msg.Duration(sec=2, nanosec=0)
)

数値は異なりますが、この形式で出力されているはずです。

中身の説明はこちらの記事です。

positions 以外でテストしてみたい場合は、上記ログに反映されるようにプログラムを変更していけば、動作の確認ができます。

おわりに

今回は MG400 を実際に動かしました。

短いですが、区切りとします。

次回は逆運動学を用いて (x, y, z) 座標で MG400 の動作を制御する方法について説明します。

コメント

タイトルとURLをコピーしました