Raspberry Pi Mouse(移行中)

Gazeboで走るRasPiMouse その4

こんにちは。佐藤です。

前回はGazeboでまっすぐにRasPiMouseが走ることができるようになりました。

概要

今回は制御用のコントローラを設計します。

前回動かしたモデルをもっと簡単に制御できるようにするため、publisherのスクリプトを用意します。

スクリプトの作成

raspimouse_controlのパッケージの中にscriptsディレクトリを作成します。

cd ~/catkin_ws/src/raspimouse_control
mkdir scripts
cd scripts

その中にvel_publisher.pyを作成します。

#!/usr/bin/env python

import rospy
from geometry_msgs.msg import Twist

rospy.init_node('vel_publisher')
pub = rospy.Publisher('/raspimouse/diff_drive_controller/cmd_vel', Twist, queue_size=10)
while not rospy.is_shutdown():
    vel = Twist()
    direction = raw_input('w: forward, s: backward, a: left, d: right > ')
    if 'w' in direction:
        vel.linear.x = 0.5
    if 's' in direction:
        vel.linear.x = -0.5
    if 'a' in direction:
        vel.angular.z = 1.0
    if 'd' in direction:
        vel.angular.z = -1.0
    if 'q' in direction:
        break
    print vel
    pub.publish(vel)

送っているコマンドは以下のコマンドとほぼ同じです。

rostopic pub -1 /raspimouse/diff_drive_controller/cmd_vel geometry_msgs/Twist  '{linear:  {x: 0.5, y: 0.0, z: 0.0}, angular: {x: 0.0,y: 0.0,z: 0.0}}'

実行できるようにするためには実行権限を与える必要があります。

chmod +x vel_publisher.py

キーボードのw/sで前進/後進、a/dで超信地旋回ができます。

Gazeboを起動した後、このスクリプトを別ウィンドウで実行します。

roslaunch raspimouse_gazebo raspimouse_with_emptyworld.lauch
rosrun raspimouse_control vel_publisher.py 

このように動かすことができました!

次回はこのセンサの話についても触れていきます。

補足

Gazebo+ROSでの二輪駆動について

今のところ、diff_drive_controllerを使用してモデルを制御しています。
しかし、実機ではそれぞれのステッピングモータに周波数を与えて動かすように制御しています。
シミュレーションモデルでも同様にするべく、jointをPositionJointInterfaceとして設定し、コントローラをposition_controllers/JointPositionControllerでモデルを作成してみました。
すると、ホイールは回転するのですが、ボディが前進しません。つまり、摩擦が働いていないのと同じ状態になっているのです。
摩擦係数の設定値がおかしいのかと考え、摩擦係数を小さくした状態でdiff_drive_controllerを使用すると、確かにホイールが空転します。

このようなホイールとボディだけのモデルを作って試してみましたが、全く変化はありませんでした。
シミュレーションモデルで試したプログラムを実機で使用する際にはdiff_drive_controllerと同様のコマンドで動かすことができるようなコントローラを用意する必要がありそうです。

参考文献

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