ROS: Roomba 800 の掃除機能を使いたい

Roomba 800 の掃除機能をROSで使いたいときのメモ。Roomba用のパッケージとしては以下のcreate_autonomyを使っている。

しかし、掃除機能を実現するブラシを動かすモータをON/OFFできない。研究室のM2学生榎本君がドライバを少し改造したのでその方法を紹介する。

  • ca_driver/src/create_driver.cppの以下の3点を変更する。
  1. UdevでRoombaを設定している場合は、エラーになる可能性があるため以下を変更する。
//priv_nh_.param<std::string>("dev", dev_, "/dev/ttyUSB0");
↓
priv_nh_.param<std::string>("dev", dev_, "/dev/roomba");

2. サブスクライバが定義されているすぐ上の行に以下を追加する。

brush_sub_ = nh.subscribe("brush", 1, &CreateDriver::brushCallback, this);

3. callback関数が定義されているすぐ上に以下の関数を追加する。

void CreateDriver::brushCallback(const std_msgs::BoolConstPtr& msg)
{
  if(msg->data==1){
    robot_->setAllMotors(1,1,1);
  }
  else{
    robot_->setAllMotors(0,0,0);
  }
}
  • ca_driver/include/ca_driver/create_driver.hの変更は以下の2点

1.callback関数が宣言されているすぐ上に以下のcallbackの宣言を追加する。

void brushCallback(const std_msgs::BoolConstPtr& msg);

2.Subscriberが定義されているすぐ上にsubscriberの宣言を追加

ros::Subscriber brush_sub_;
  • catkin buildでビルトする。/brushトピックにstd_msgs/Bool型 data: trueを送るとブラシモータがON、data: falseを送るとOFFになる。rostopicコマンドを使うと次になる。
# Brush ON
rostopic pub /brush std_msgs/Bool "data: true"

# Brush OFF
rostopic pub /brush std_msgs/Bool "data: false"

以上

コメント

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