Roomba 800 の掃除機能をROSで使いたいときのメモ。Roomba用のパッケージとしては以下のcreate_autonomyを使っている。
しかし、掃除機能を実現するブラシを動かすモータをON/OFFできない。研究室のM2学生榎本君がドライバを少し改造したのでその方法を紹介する。
- ca_driver/src/create_driver.cppの以下の3点を変更する。
- 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"
以上
コメント