mROS で Lチカしてみる


概要

前回,「athrillでLチカしてみる」において,仮想環境上で手軽にLチカを体験しました.
今回,これを mROS で試してみたいと思います.

※mROSについて詳しく知りたい方は,本家サイトを参照ください.
https://qiita.com/takasehideki/items/7d783ecd605dcee29ee0
https://qiita.com/m_ksg/items/0060a8738e6a34a0f237

構成

今回のでデモでは,ROSのトポロジー構成を以下のようにしました.

led_node1とled_node2がmROS上で動作しており,WSL上のROSコマンド(rostopic)でLEDトグル用のトピック(led1_toggle, led2_toggle)を出版します.

mROS アプリケーションプログラム

mROS上で動作するアプリケーションプログラムは以下の通りです.

タスク側

void usr_task1(void)
{
    syslog(LOG_NOTICE,"========Activate user task1========");
    int argc = 0;
    char *argv = NULL;
    ros::init(argc,argv,"led2_node");
    ros::NodeHandle n;
    ros::Subscriber sub;

     sub = n.subscriber("led2_toggle",1, Callback2);

    ros::spin();
}
void usr_task2(void)
{
    syslog(LOG_NOTICE,"========Activate user task2========");
    int argc = 0;
    char *argv = NULL;
    ros::init(argc,argv,"led1_node");
    ros::NodeHandle n;
    ros::Subscriber sub;

     sub = n.subscriber("led1_toggle",1, Callback1);

    ros::spin();
}

トピック購読コールバック関数側

void Callback1(string *msg)
{
    sprintf(callback_buffer1, "I heard [%s]",msg->c_str());
    syslog(LOG_NOTICE, "%s", callback_buffer1);
    sample_program(DIGITAL_LED1);
}
void Callback2(string *msg)
{
    sprintf(callback_buffer2, "I heard [%s]",msg->c_str());
    syslog(LOG_NOTICE, "%s", callback_buffer2);
    sample_program(DIGITAL_LED2);
}

LEDトグル関数側

void sample_program(uint8 led_bit)
{
    uint8 data = sil_reb_mem(DIGITAL_REG_ADDR);

    if ((data & led_bit) != 0) {
        data &= ~led_bit;
        sil_wrb_mem(DIGITAL_REG_ADDR, data);
    }
    else {
        data |= led_bit;
        sil_wrb_mem(DIGITAL_REG_ADDR, data);
    }
    return;
}

ソース配置場所

上記のアプリケーションプログラムは,以下で公開しています.

デモ内容

それでは,実際にデモをしてみます.

デモ手順は以下の流れです.

  1. roscore コマンドで,ROSマスタを起動する
  2. athrill-run コマンドで,アプリケーションを起動する
  3. led コマンドで,仮想マイコン(athrill)の LED状態を表示する
  4. rostopic pub コマンドで,LED1 のトグル用トピックを出版する
  5. rostopic pub コマンドで,LED2 のトグル用トピックを出版する

デモ

以下,上記手順で実施したデモ動画です.

最後に

mROSは,マイコン上で動作するアプリケーションでも簡単に ROS を利用できるようにしてくれるありがたいOSS組込みミドルウェアです.

これを athrill 上でさらに手軽に使えるように,昨年末から開発を進めてきました.

今回の成果は,「athrill の Lチカの成果」と「上記の成果」を組みあわせたものです.

今後の展開としては,仮想環境上で動作確認したアプリケーションプログラムを実機に持っていき,同じようにLチカできるようにしてみたいと思います.

乞うご期待ください.