TB3_rosserial - 8BitsCoding/RobotMentor GitHub Wiki

Turtlebot3에서 사용된 rosserial을 바탕으로 분석


설치

라즈베리파이에 아래와 같이 설치하면됨.

$ sudo apt-get update
$ sudo apt-get upgrade
$ wget https://raw.githubusercontent.com/ROBOTIS-GIT/robotis_tools/master/install_ros_kinetic_rp3.sh && chmod 755 ./install_ros_kinetic_rp3.sh && bash ./install_ros_kinetic_rp3.sh
$ cd ~/catkin_ws/src
$ git clone https://github.com/ROBOTIS-GIT/hls_lfcd_lds_driver.git
$ git clone https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git
$ git clone https://github.com/ROBOTIS-GIT/turtlebot3.git
$ sudo apt-get install ros-kinetic-rosserial-python ros-kinetic-tf
$ source /opt/ros/kinetic/setup.bash
$ cd ~/catkin_ws && catkin_make -j1

결국 여기가 중요!

$ rosrun turtlebot3_bringup create_udev_rules

create_udev_rules

turtlebot3_bringup/scripts/create_udev_rules

#!/bin/bash

echo ""
echo "This script copies a udev rule to /etc to facilitate bringing"
echo "up the turtlebot3 usb connection."
echo ""

sudo cp `rospack find turtlebot3_bringup`/99-turtlebot3-cdc.rules /etc/udev/rules.d/

echo ""
echo "Reload rules"
echo ""
sudo udevadm control --reload-rules
sudo udevadm trigger

99-turtlebot3-cdc.rules 내부

#http://linux-tips.org/t/prevent-modem-manager-to-capture-usb-serial-devices/284/2.

#cp rules /etc/udev/rules.d/
#sudo udevadm control --reload-rules
#sudo udevadm trigger

ATTRS{idVendor}=="0483" ATTRS{idProduct}=="5740", ENV{ID_MM_DEVICE_IGNORE}="1", MODE:="0666"
ATTRS{idVendor}=="0483" ATTRS{idProduct}=="df11", MODE:="0666"
ATTRS{idVendor}=="fff1" ATTRS{idProduct}=="ff48", ENV{ID_MM_DEVICE_IGNORE}="1", MODE:="0666"
ATTRS{idVendor}=="10c4" ATTRS{idProduct}=="ea60", ENV{ID_MM_DEVICE_IGNORE}="1", MODE:="0666"

hls_lfcd_lds_driver


udev 문서제작

다음과 같이 하면된다.


현재 연결된 usb확인

$ lsusb

이미지

위 그림과 같이 현재 연결된 usb정보를 전시해 준다.

예를 들어서

idventor : 1d6b, idproduct : 0003이 된다.

물론 $ dmesg | grep usb를 통해서 확인해도 됨.


udev rules 추가

$ sudo gedit /etc/udev/rules.d/99-ttyacms.rules
ATTRS{idVendor}=="1d6b", ATTRS=="0003", ENV{ID_MM_DEVICE_IGNORE}="1", MODE:="0666"

다른건 그렇다 치고 ID_MM_DEVICE_IGNORE는 리눅스에서 ModemManager라고 있는데 새로운 장비가 연결되면 관리하는 역할이라 생각하자. ModemManager가 연결즉시 PlugandPlay를 막는 경우가 발생하기에 ModemMananger를 Ignore하는 것이다.


참고사이트