はじめに
前回は、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 の動作を制御する方法について説明します。
コメント