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하는 것이다.